{
 "firmware": "Skiff",
 "slug": "skiff",
 "author": "illuminus5; based on Felucca by Leo Kuroshita (Hügelton Instruments)",
 "repo": "https://github.com/illuminus5/skiff",
 "licence": "GPL-3.0-only",
 "closed_source": false,
 "mapped_release": "v1.2",
 "mapped_commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
 "release_date": "2026-10-16",
 "date_mapped": "2026-10-16",
 "turns_it_into": "A six-track synth and drum groovebox with shared patterns, song lists, scenes and live effects.",
 "docs": [
  {
   "title": "Skiff README",
   "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/README.md",
   "read_at": "2026-10-16",
   "ref": "v1.2",
   "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7"
  },
  {
   "title": "Skiff design rules",
   "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/DESIGN.md",
   "ref": "v1.2",
   "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7"
  }
 ],
 "install": {
  "official": "https://github.com/illuminus5/skiff/releases/tag/v1.2",
  "hub": "https://thefirmwarehub.com/"
 },
 "part_id_notes": "The button printed SEL is called SCL by Skiff; button_sel maps to it, and ALGORITHM selects a track rather than an FM algorithm; the encoders have no press action; key_lights groups the 27 white key LEDs and led_play_stop_green is PLAY’s separate green light. Page-specific and conditional entries override ordinary any-mode behavior; engine HOME modes share Home navigation, while naming alphabet and save target are separate conditions on the same screen; held-layer modes also apply when that layer is locked unless FX has its own locked mode.",
 "modes": [
  {
   "id": "home",
   "name": "Home",
   "how_to_get_there": "Tap HOME and release it.",
   "what_it_is": "The selected track’s sound controls above the track view or scope.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "854-863",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L854-L863"
    }
   ]
  },
  {
   "id": "step_record",
   "name": "Step record",
   "how_to_get_there": "On a melodic STEP or ROLL page, stop and press REC.",
   "what_it_is": "Keys write the cursor step while recording is armed and stopped.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "410-438",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L410-L438"
    }
   ]
  },
  {
   "id": "grid",
   "name": "Drum grid",
   "how_to_get_there": "Choose a DRUM or DRUM-X track and open SEQ > STEP.",
   "what_it_is": "White keys edit steps and black keys choose lanes, accents and the step page.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "664-681",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L664-L681"
    }
   ]
  },
  {
   "id": "undo_window",
   "name": "Undo window",
   "how_to_get_there": "Hold SAVE past HOLD, then use OCT- or OCT+ while the undo box is visible.",
   "what_it_is": "Eight recent supported edits can be undone or redone in memory.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "904-909",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L904-L909"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "1191-1219",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1191-L1219"
    }
   ]
  },
  {
   "id": "dialog",
   "name": "Confirmation",
   "how_to_get_there": "Request a protected action to display its question; INIT opens one as soon as its key is pressed, while save-page actions usually need one OCT+ tap to show it.",
   "what_it_is": "OCT+ accepts the displayed action and OCT- cancels it.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1343-1394",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1343-L1394"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "853-913",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L853-L913"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_layer.c",
     "lines": "503-507",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L503-L507"
    }
   ]
  },
  {
   "id": "sleep",
   "name": "Screen asleep",
   "how_to_get_there": "Leave the stopped unit untouched for the SCREEN OFF time.",
   "what_it_is": "Panel input wakes the screen before it can change anything.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "255-270",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
    }
   ]
  },
  {
   "id": "update",
   "name": "Update mode",
   "how_to_get_there": "Hold OCT- and OCT+ together for more than five seconds.",
   "what_it_is": "The countdown begins after two seconds and release cancels it.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/main.c",
     "lines": "220-246",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/main.c#L220-L246"
    }
   ]
  },
  {
   "id": "startup",
   "name": "Startup",
   "how_to_get_there": "Switch the unit on.",
   "what_it_is": "Startup loads settings, scans saved patterns and may migrate earlier projects.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/main.c",
     "lines": "142-198",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/main.c#L142-L198"
    }
   ]
  },
  {
   "id": "crash",
   "name": "Crash screen",
   "how_to_get_there": "Appears if a processor fault reaches the crash handler.",
   "what_it_is": "A diagnostic display followed by a reboot.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/main.c",
     "lines": "74-95",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/main.c#L74-L95"
    }
   ]
  },
  {
   "id": "env",
   "name": "ENV",
   "how_to_get_there": "Tap ENV and release it, then turn SELECT to ENV with BPM LOCK on.",
   "what_it_is": "The main amplitude envelope, hidden on FM6 and drum tracks.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/params.c",
     "lines": "407",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L407"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "476-500",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L476-L500"
    }
   ]
  },
  {
   "id": "env_dest",
   "name": "ENV DEST",
   "how_to_get_there": "Tap ENV and release it, then turn SELECT to ENV DEST with BPM LOCK on.",
   "what_it_is": "Main envelope modulation amounts, hidden on FM6 and drum tracks.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/params.c",
     "lines": "408",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L408"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "476-500",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L476-L500"
    }
   ]
  },
  {
   "id": "env_2",
   "name": "ENV 2",
   "how_to_get_there": "Tap ENV and release it, then turn SELECT to ENV 2 with BPM LOCK on.",
   "what_it_is": "A second envelope for the modulation matrix, hidden on FM6 and drum tracks.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/params.c",
     "lines": "409",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L409"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "476-500",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L476-L500"
    }
   ]
  },
  {
   "id": "lfo",
   "name": "LFO",
   "how_to_get_there": "Tap LFO and release it, then turn SELECT to LFO with BPM LOCK on.",
   "what_it_is": "The LFO page for its displayed controls.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/params.c",
     "lines": "410",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L410"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "476-500",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L476-L500"
    }
   ]
  },
  {
   "id": "lfo_dest",
   "name": "LFO DEST",
   "how_to_get_there": "Tap LFO and release it, then turn SELECT to LFO DEST with BPM LOCK on.",
   "what_it_is": "The LFO DEST page for its displayed controls.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/params.c",
     "lines": "411",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L411"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "476-500",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L476-L500"
    }
   ]
  },
  {
   "id": "mod",
   "name": "MOD",
   "how_to_get_there": "Tap LFO and release it, then turn SELECT to MOD with BPM LOCK on.",
   "what_it_is": "The MOD page for its displayed controls.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/params.c",
     "lines": "412",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L412"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "476-500",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L476-L500"
    }
   ]
  },
  {
   "id": "fx",
   "name": "FX",
   "how_to_get_there": "Tap FX and release it, then turn SELECT to FX with BPM LOCK on.",
   "what_it_is": "The FX page for its displayed controls.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/params.c",
     "lines": "413",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L413"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "476-500",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L476-L500"
    }
   ]
  },
  {
   "id": "drive",
   "name": "DRIVE",
   "how_to_get_there": "Tap FX and release it, then turn SELECT to DRIVE with BPM LOCK on.",
   "what_it_is": "The DRIVE page for its displayed controls.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/params.c",
     "lines": "414",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L414"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "476-500",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L476-L500"
    }
   ]
  },
  {
   "id": "slicer",
   "name": "SLICER",
   "how_to_get_there": "Tap FX and release it, then turn SELECT to SLICER with BPM LOCK on.",
   "what_it_is": "The SLICER page for its displayed controls.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/params.c",
     "lines": "415",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L415"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "476-500",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L476-L500"
    }
   ]
  },
  {
   "id": "duck",
   "name": "DUCK",
   "how_to_get_there": "Tap FX and release it, then turn SELECT to DUCK with BPM LOCK on.",
   "what_it_is": "The DUCK page for its displayed controls.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/params.c",
     "lines": "416",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L416"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "476-500",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L476-L500"
    }
   ]
  },
  {
   "id": "scale",
   "name": "SCL",
   "how_to_get_there": "Tap SEL and release it, then turn SELECT to SCL with BPM LOCK on.",
   "what_it_is": "Scale and pitch mapping, hidden on drum tracks.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/params.c",
     "lines": "417",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L417"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "476-500",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L476-L500"
    }
   ]
  },
  {
   "id": "chord",
   "name": "CHORD",
   "how_to_get_there": "Tap SEL and release it, then turn SELECT to CHORD with BPM LOCK on.",
   "what_it_is": "Chord shape and voicing, hidden on drum tracks.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/params.c",
     "lines": "418",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L418"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "476-500",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L476-L500"
    }
   ]
  },
  {
   "id": "lanes",
   "name": "LANES",
   "how_to_get_there": "Tap EDIT and release it, then turn SELECT to LANES with BPM LOCK on.",
   "what_it_is": "Individual DRUM lane levels, tuning and decay.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/params.c",
     "lines": "423",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L423"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "476-500",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L476-L500"
    }
   ]
  },
  {
   "id": "voice",
   "name": "VOICE",
   "how_to_get_there": "Tap EDIT and release it, then turn SELECT to VOICE with BPM LOCK on.",
   "what_it_is": "Voice and glide choices, hidden on drum tracks.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/params.c",
     "lines": "433",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L433"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "476-500",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L476-L500"
    }
   ]
  },
  {
   "id": "voice_2",
   "name": "VOICE 2",
   "how_to_get_there": "Tap EDIT and release it, then turn SELECT to VOICE 2 with BPM LOCK on.",
   "what_it_is": "Voice allocation and unison detune, hidden on drum tracks.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/params.c",
     "lines": "434",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L434"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "476-500",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L476-L500"
    }
   ]
  },
  {
   "id": "mixer",
   "name": "MIXER",
   "how_to_get_there": "Tap GLO and release it, then turn SELECT to MIXER with BPM LOCK on.",
   "what_it_is": "The MIXER page for its displayed controls.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/params.c",
     "lines": "435",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L435"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "476-500",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L476-L500"
    }
   ]
  },
  {
   "id": "delay",
   "name": "DELAY",
   "how_to_get_there": "Tap GLO and release it, then turn SELECT to DELAY with BPM LOCK on.",
   "what_it_is": "The DELAY page for its displayed controls.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/params.c",
     "lines": "436",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L436"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "476-500",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L476-L500"
    }
   ]
  },
  {
   "id": "reverb",
   "name": "REVERB",
   "how_to_get_there": "Tap GLO and release it, then turn SELECT to REVERB with BPM LOCK on.",
   "what_it_is": "The REVERB page for its displayed controls.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/params.c",
     "lines": "437",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L437"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "476-500",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L476-L500"
    }
   ]
  },
  {
   "id": "chorus",
   "name": "CHORUS",
   "how_to_get_there": "Tap GLO and release it, then turn SELECT to CHORUS with BPM LOCK on.",
   "what_it_is": "The CHORUS page for its displayed controls.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/params.c",
     "lines": "438",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L438"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "476-500",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L476-L500"
    }
   ]
  },
  {
   "id": "global",
   "name": "GLOBAL",
   "how_to_get_there": "Tap GLO and release it, then turn SELECT to GLOBAL with BPM LOCK on.",
   "what_it_is": "The GLOBAL page for its displayed controls.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/params.c",
     "lines": "439",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L439"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "476-500",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L476-L500"
    }
   ]
  },
  {
   "id": "presets",
   "name": "PRESETS",
   "how_to_get_there": "Tap SAVE and release it, then turn SELECT to PRESETS with BPM LOCK on.",
   "what_it_is": "The PRESETS page for its displayed controls.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/params.c",
     "lines": "440",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L440"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "476-500",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L476-L500"
    }
   ]
  },
  {
   "id": "user",
   "name": "USER",
   "how_to_get_there": "Tap SAVE and release it, then turn SELECT to USER with BPM LOCK on.",
   "what_it_is": "Named sound slots with LOAD, ERASE, NAME and SAVE actions.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/params.c",
     "lines": "441",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L441"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "476-500",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L476-L500"
    }
   ]
  },
  {
   "id": "pool",
   "name": "PATTERNS",
   "how_to_get_there": "Tap SAVE and release it, then turn SELECT to PATTERNS with BPM LOCK on.",
   "what_it_is": "The common pool of 64 patterns; a pattern used by an entry cannot be cleared here.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/params.c",
     "lines": "442",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L442"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "476-500",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L476-L500"
    }
   ]
  },
  {
   "id": "project",
   "name": "PROJECT",
   "how_to_get_there": "Tap SAVE and release it, then turn SELECT to PROJECT with BPM LOCK on.",
   "what_it_is": "Four named project slots; their notes live in the shared pattern pool.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/params.c",
     "lines": "443",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L443"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "476-500",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L476-L500"
    }
   ]
  },
  {
   "id": "arp",
   "name": "ARP",
   "how_to_get_there": "Tap ARP and release it, then turn SELECT to ARP with BPM LOCK on.",
   "what_it_is": "The ARP page for its displayed controls.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/params.c",
     "lines": "444",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L444"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "476-500",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L476-L500"
    }
   ]
  },
  {
   "id": "arp_2",
   "name": "ARP 2",
   "how_to_get_there": "Tap ARP and release it, then turn SELECT to ARP 2 with BPM LOCK on.",
   "what_it_is": "The ARP 2 page for its displayed controls.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/params.c",
     "lines": "445",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L445"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "476-500",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L476-L500"
    }
   ]
  },
  {
   "id": "step",
   "name": "STEP",
   "how_to_get_there": "Tap SEQ and release it, then turn SELECT to STEP with BPM LOCK on.",
   "what_it_is": "Melodic step tiles; DRUM and DRUM-X use the drum grid instead.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/params.c",
     "lines": "446",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L446"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "476-500",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L476-L500"
    }
   ]
  },
  {
   "id": "roll",
   "name": "ROLL",
   "how_to_get_there": "Tap SEQ and release it, then turn SELECT to ROLL with BPM LOCK on.",
   "what_it_is": "A piano roll for melodic tracks.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/params.c",
     "lines": "447",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L447"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "476-500",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L476-L500"
    }
   ]
  },
  {
   "id": "chance",
   "name": "CHANCE",
   "how_to_get_there": "Tap SEQ and release it, then turn SELECT to CHANCE with BPM LOCK on.",
   "what_it_is": "The CHANCE page for its displayed controls.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/params.c",
     "lines": "449",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L449"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "476-500",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L476-L500"
    }
   ]
  },
  {
   "id": "seq_play",
   "name": "PLAY",
   "how_to_get_there": "Tap SEQ and release it, then turn SELECT to PLAY with BPM LOCK on.",
   "what_it_is": "The PLAY page for its displayed controls.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/params.c",
     "lines": "450",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L450"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "476-500",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L476-L500"
    }
   ]
  },
  {
   "id": "pattern",
   "name": "PATTERN",
   "how_to_get_there": "Tap SEQ and release it, then turn SELECT to PATTERN with BPM LOCK on.",
   "what_it_is": "The PATTERN page for its displayed controls.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/params.c",
     "lines": "451",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L451"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "476-500",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L476-L500"
    }
   ]
  },
  {
   "id": "automation",
   "name": "AUTOMATION",
   "how_to_get_there": "Tap SEQ and release it, then turn SELECT to AUTOMATION with BPM LOCK on.",
   "what_it_is": "The AUTOMATION page for its displayed controls.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/params.c",
     "lines": "452",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L452"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "476-500",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L476-L500"
    }
   ]
  },
  {
   "id": "song",
   "name": "SONG",
   "how_to_get_there": "Tap SEQ and release it, then turn SELECT to SONG with BPM LOCK on.",
   "what_it_is": "Each track has sixteen entries pointing into the shared pattern pool.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/params.c",
     "lines": "453",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L453"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "476-500",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L476-L500"
    }
   ]
  },
  {
   "id": "home_analog",
   "name": "HOME ANALOG",
   "how_to_get_there": "Choose ANALOG on the EDIT layer, then tap HOME.",
   "what_it_is": "The four main ANALOG sound controls.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "1588-1594",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1588-L1594"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/eng_analog.c",
     "lines": "127",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_analog.c#L127"
    }
   ]
  },
  {
   "id": "edit_analog_1",
   "name": "ANALOG OSC",
   "how_to_get_there": "With MENU > CONTROL > BPM LOCK on, on a ANALOG track, tap EDIT and use SELECT for OSC.",
   "what_it_is": "ANALOG sound controls on EDIT page 1.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/eng_analog.c",
     "lines": "110-121",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_analog.c#L110-L121"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1498-1508",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1508"
    }
   ]
  },
  {
   "id": "edit_analog_2",
   "name": "ANALOG FLT",
   "how_to_get_there": "With MENU > CONTROL > BPM LOCK on, on a ANALOG track, tap EDIT and use SELECT for FLT.",
   "what_it_is": "ANALOG sound controls on EDIT page 2.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/eng_analog.c",
     "lines": "110-121",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_analog.c#L110-L121"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1498-1508",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1508"
    }
   ]
  },
  {
   "id": "home_drum",
   "name": "HOME DRUM",
   "how_to_get_there": "Choose DRUM on the EDIT layer, then tap HOME.",
   "what_it_is": "The four main DRUM sound controls.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "1588-1594",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1588-L1594"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/eng_drum.c",
     "lines": "343",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L343"
    }
   ]
  },
  {
   "id": "edit_drum_1",
   "name": "DRUM KIT",
   "how_to_get_there": "With MENU > CONTROL > BPM LOCK on, on a DRUM track, tap EDIT and use SELECT for KIT.",
   "what_it_is": "DRUM sound controls on EDIT page 1.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/eng_drum.c",
     "lines": "325-336",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L325-L336"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1498-1508",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1508"
    }
   ]
  },
  {
   "id": "edit_drum_2",
   "name": "DRUM HIT",
   "how_to_get_there": "With MENU > CONTROL > BPM LOCK on, on a DRUM track, tap EDIT and use SELECT for HIT.",
   "what_it_is": "DRUM sound controls on EDIT page 2.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/eng_drum.c",
     "lines": "325-336",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L325-L336"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1498-1508",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1508"
    }
   ]
  },
  {
   "id": "home_drumx",
   "name": "HOME DRUM-X",
   "how_to_get_there": "Choose DRUM-X on the EDIT layer, then tap HOME.",
   "what_it_is": "The four main DRUM-X sound controls.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "1588-1594",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1588-L1594"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/eng_drumx.c",
     "lines": "266",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drumx.c#L266"
    }
   ]
  },
  {
   "id": "edit_drumx_1",
   "name": "DRUM-X KIT",
   "how_to_get_there": "With MENU > CONTROL > BPM LOCK on, on a DRUM-X track, tap EDIT and use SELECT for KIT.",
   "what_it_is": "DRUM-X sound controls on EDIT page 1.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/eng_drumx.c",
     "lines": "248-259",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drumx.c#L248-L259"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1498-1508",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1508"
    }
   ]
  },
  {
   "id": "edit_drumx_2",
   "name": "DRUM-X HIT",
   "how_to_get_there": "With MENU > CONTROL > BPM LOCK on, on a DRUM-X track, tap EDIT and use SELECT for HIT.",
   "what_it_is": "DRUM-X sound controls on EDIT page 2.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/eng_drumx.c",
     "lines": "248-259",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drumx.c#L248-L259"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1498-1508",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1508"
    }
   ]
  },
  {
   "id": "home_fm6",
   "name": "HOME FM6",
   "how_to_get_there": "Choose FM6 on the EDIT layer, then tap HOME.",
   "what_it_is": "The four main FM6 sound controls.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "1588-1594",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1588-L1594"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/eng_fm6.c",
     "lines": "421",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_fm6.c#L421"
    }
   ]
  },
  {
   "id": "edit_fm6_1",
   "name": "FM6 OPS",
   "how_to_get_there": "With MENU > CONTROL > BPM LOCK on, on a FM6 track, tap EDIT and use SELECT for OPS.",
   "what_it_is": "FM6 sound controls on EDIT page 1.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/eng_fm6.c",
     "lines": "404-415",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_fm6.c#L404-L415"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1498-1508",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1508"
    }
   ]
  },
  {
   "id": "edit_fm6_2",
   "name": "FM6 PATCH",
   "how_to_get_there": "With MENU > CONTROL > BPM LOCK on, on a FM6 track, tap EDIT and use SELECT for PATCH.",
   "what_it_is": "FM6 sound controls on EDIT page 2.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/eng_fm6.c",
     "lines": "404-415",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_fm6.c#L404-L415"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1498-1508",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1508"
    }
   ]
  },
  {
   "id": "home_voice",
   "name": "HOME VOICE",
   "how_to_get_there": "Choose VOICE on the EDIT layer, then tap HOME.",
   "what_it_is": "The four main VOICE sound controls.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "1588-1594",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1588-L1594"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/eng_formant.c",
     "lines": "236",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_formant.c#L236"
    }
   ]
  },
  {
   "id": "edit_voice_1",
   "name": "VOICE VOWEL",
   "how_to_get_there": "With MENU > CONTROL > BPM LOCK on, on a VOICE track, tap EDIT and use SELECT for VOWEL.",
   "what_it_is": "VOICE sound controls on EDIT page 1.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/eng_formant.c",
     "lines": "219-230",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_formant.c#L219-L230"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1498-1508",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1508"
    }
   ]
  },
  {
   "id": "edit_voice_2",
   "name": "VOICE TONE",
   "how_to_get_there": "With MENU > CONTROL > BPM LOCK on, on a VOICE track, tap EDIT and use SELECT for TONE.",
   "what_it_is": "VOICE sound controls on EDIT page 2.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/eng_formant.c",
     "lines": "219-230",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_formant.c#L219-L230"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1498-1508",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1508"
    }
   ]
  },
  {
   "id": "home_grain",
   "name": "HOME GRAIN",
   "how_to_get_there": "Choose GRAIN on the EDIT layer, then tap HOME.",
   "what_it_is": "The four main GRAIN sound controls.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "1588-1594",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1588-L1594"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/eng_grain.c",
     "lines": "471",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_grain.c#L471"
    }
   ]
  },
  {
   "id": "edit_grain_1",
   "name": "GRAIN GRAIN",
   "how_to_get_there": "With MENU > CONTROL > BPM LOCK on, on a GRAIN track, tap EDIT and use SELECT for GRAIN.",
   "what_it_is": "GRAIN sound controls on EDIT page 1.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/eng_grain.c",
     "lines": "454-465",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_grain.c#L454-L465"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1498-1508",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1508"
    }
   ]
  },
  {
   "id": "edit_grain_2",
   "name": "GRAIN SPRAY",
   "how_to_get_there": "With MENU > CONTROL > BPM LOCK on, on a GRAIN track, tap EDIT and use SELECT for SPRAY.",
   "what_it_is": "GRAIN sound controls on EDIT page 2.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/eng_grain.c",
     "lines": "454-465",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_grain.c#L454-L465"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1498-1508",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1508"
    }
   ]
  },
  {
   "id": "home_lofi",
   "name": "HOME LOFI",
   "how_to_get_there": "Choose LOFI on the EDIT layer, then tap HOME.",
   "what_it_is": "The four main LOFI sound controls.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "1588-1594",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1588-L1594"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/eng_lofi.c",
     "lines": "238",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_lofi.c#L238"
    }
   ]
  },
  {
   "id": "edit_lofi_1",
   "name": "LOFI CHIP",
   "how_to_get_there": "With MENU > CONTROL > BPM LOCK on, on a LOFI track, tap EDIT and use SELECT for CHIP.",
   "what_it_is": "LOFI sound controls on EDIT page 1.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/eng_lofi.c",
     "lines": "221-232",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_lofi.c#L221-L232"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1498-1508",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1508"
    }
   ]
  },
  {
   "id": "edit_lofi_2",
   "name": "LOFI MOTION",
   "how_to_get_there": "With MENU > CONTROL > BPM LOCK on, on a LOFI track, tap EDIT and use SELECT for MOTION.",
   "what_it_is": "LOFI sound controls on EDIT page 2.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/eng_lofi.c",
     "lines": "221-232",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_lofi.c#L221-L232"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1498-1508",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1508"
    }
   ]
  },
  {
   "id": "home_noise",
   "name": "HOME NOISE",
   "how_to_get_there": "Choose NOISE on the EDIT layer, then tap HOME.",
   "what_it_is": "The four main NOISE sound controls.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "1588-1594",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1588-L1594"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/eng_noise.c",
     "lines": "275",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_noise.c#L275"
    }
   ]
  },
  {
   "id": "edit_noise_1",
   "name": "NOISE SOURCE",
   "how_to_get_there": "With MENU > CONTROL > BPM LOCK on, on a NOISE track, tap EDIT and use SELECT for SOURCE.",
   "what_it_is": "NOISE sound controls on EDIT page 1.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/eng_noise.c",
     "lines": "258-269",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_noise.c#L258-L269"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1498-1508",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1508"
    }
   ]
  },
  {
   "id": "edit_noise_2",
   "name": "NOISE MOVE",
   "how_to_get_there": "With MENU > CONTROL > BPM LOCK on, on a NOISE track, tap EDIT and use SELECT for MOVE.",
   "what_it_is": "NOISE sound controls on EDIT page 2.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/eng_noise.c",
     "lines": "258-269",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_noise.c#L258-L269"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1498-1508",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1508"
    }
   ]
  },
  {
   "id": "home_phase",
   "name": "HOME PHASE",
   "how_to_get_there": "Choose PHASE on the EDIT layer, then tap HOME.",
   "what_it_is": "The four main PHASE sound controls.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "1588-1594",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1588-L1594"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/eng_phase.c",
     "lines": "205",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phase.c#L205"
    }
   ]
  },
  {
   "id": "edit_phase_1",
   "name": "PHASE PHASE",
   "how_to_get_there": "With MENU > CONTROL > BPM LOCK on, on a PHASE track, tap EDIT and use SELECT for PHASE.",
   "what_it_is": "PHASE sound controls on EDIT page 1.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/eng_phase.c",
     "lines": "188-199",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phase.c#L188-L199"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1498-1508",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1508"
    }
   ]
  },
  {
   "id": "edit_phase_2",
   "name": "PHASE LINE",
   "how_to_get_there": "With MENU > CONTROL > BPM LOCK on, on a PHASE track, tap EDIT and use SELECT for LINE.",
   "what_it_is": "PHASE sound controls on EDIT page 2.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/eng_phase.c",
     "lines": "188-199",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phase.c#L188-L199"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1498-1508",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1508"
    }
   ]
  },
  {
   "id": "home_phys",
   "name": "HOME PHYS",
   "how_to_get_there": "Choose PHYS on the EDIT layer, then tap HOME.",
   "what_it_is": "The four main PHYS sound controls.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "1588-1594",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1588-L1594"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/eng_phys.c",
     "lines": "251",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phys.c#L251"
    }
   ]
  },
  {
   "id": "edit_phys_1",
   "name": "PHYS BODY",
   "how_to_get_there": "With MENU > CONTROL > BPM LOCK on, on a PHYS track, tap EDIT and use SELECT for BODY.",
   "what_it_is": "PHYS sound controls on EDIT page 1.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/eng_phys.c",
     "lines": "234-245",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phys.c#L234-L245"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1498-1508",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1508"
    }
   ]
  },
  {
   "id": "edit_phys_2",
   "name": "PHYS EXCITE",
   "how_to_get_there": "With MENU > CONTROL > BPM LOCK on, on a PHYS track, tap EDIT and use SELECT for EXCITE.",
   "what_it_is": "PHYS sound controls on EDIT page 2.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/eng_phys.c",
     "lines": "234-245",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phys.c#L234-L245"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1498-1508",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1508"
    }
   ]
  },
  {
   "id": "home_sample",
   "name": "HOME SAMPLE",
   "how_to_get_there": "Choose SAMPLE on the EDIT layer, then tap HOME.",
   "what_it_is": "The four main SAMPLE sound controls.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "1588-1594",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1588-L1594"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/eng_sample.c",
     "lines": "261",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_sample.c#L261"
    }
   ]
  },
  {
   "id": "edit_sample_1",
   "name": "SAMPLE SET",
   "how_to_get_there": "With MENU > CONTROL > BPM LOCK on, on a SAMPLE track, tap EDIT and use SELECT for SET.",
   "what_it_is": "SAMPLE sound controls on EDIT page 1.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/eng_sample.c",
     "lines": "244-255",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_sample.c#L244-L255"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1498-1508",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1508"
    }
   ]
  },
  {
   "id": "edit_sample_2",
   "name": "SAMPLE TONE",
   "how_to_get_there": "With MENU > CONTROL > BPM LOCK on, on a SAMPLE track, tap EDIT and use SELECT for TONE.",
   "what_it_is": "SAMPLE sound controls on EDIT page 2.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/eng_sample.c",
     "lines": "244-255",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_sample.c#L244-L255"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1498-1508",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1508"
    }
   ]
  },
  {
   "id": "home_slice",
   "name": "HOME SLICE",
   "how_to_get_there": "Choose SLICE on the EDIT layer, then tap HOME.",
   "what_it_is": "The four main SLICE sound controls.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "1588-1594",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1588-L1594"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/eng_slice.c",
     "lines": "655",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_slice.c#L655"
    }
   ]
  },
  {
   "id": "edit_slice_1",
   "name": "SLICE SLICE",
   "how_to_get_there": "With MENU > CONTROL > BPM LOCK on, on a SLICE track, tap EDIT and use SELECT for SLICE.",
   "what_it_is": "SLICE sound controls on EDIT page 1.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/eng_slice.c",
     "lines": "638-649",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_slice.c#L638-L649"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1498-1508",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1508"
    }
   ]
  },
  {
   "id": "edit_slice_2",
   "name": "SLICE PLAYBACK",
   "how_to_get_there": "With MENU > CONTROL > BPM LOCK on, on a SLICE track, tap EDIT and use SELECT for PLAYBACK.",
   "what_it_is": "SLICE sound controls on EDIT page 2.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/eng_slice.c",
     "lines": "638-649",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_slice.c#L638-L649"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1498-1508",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1508"
    }
   ]
  },
  {
   "id": "home_trio",
   "name": "HOME TRIO",
   "how_to_get_there": "Choose TRIO on the EDIT layer, then tap HOME.",
   "what_it_is": "The four main TRIO sound controls.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "1588-1594",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1588-L1594"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/eng_trio.c",
     "lines": "378",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_trio.c#L378"
    }
   ]
  },
  {
   "id": "edit_trio_1",
   "name": "TRIO OSC",
   "how_to_get_there": "With MENU > CONTROL > BPM LOCK on, on a TRIO track, tap EDIT and use SELECT for OSC.",
   "what_it_is": "TRIO sound controls on EDIT page 1.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/eng_trio.c",
     "lines": "361-372",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_trio.c#L361-L372"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1498-1508",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1508"
    }
   ]
  },
  {
   "id": "edit_trio_2",
   "name": "TRIO TONE",
   "how_to_get_there": "With MENU > CONTROL > BPM LOCK on, on a TRIO track, tap EDIT and use SELECT for TONE.",
   "what_it_is": "TRIO sound controls on EDIT page 2.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/eng_trio.c",
     "lines": "361-372",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_trio.c#L361-L372"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1498-1508",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1508"
    }
   ]
  },
  {
   "id": "home_wheel",
   "name": "HOME WHEEL",
   "how_to_get_there": "Choose WHEEL on the EDIT layer, then tap HOME.",
   "what_it_is": "The four main WHEEL sound controls.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "1588-1594",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1588-L1594"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/eng_wheel.c",
     "lines": "299",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_wheel.c#L299"
    }
   ]
  },
  {
   "id": "edit_wheel_1",
   "name": "WHEEL BARS",
   "how_to_get_there": "With MENU > CONTROL > BPM LOCK on, on a WHEEL track, tap EDIT and use SELECT for BARS.",
   "what_it_is": "WHEEL sound controls on EDIT page 1.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/eng_wheel.c",
     "lines": "282-293",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_wheel.c#L282-L293"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1498-1508",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1508"
    }
   ]
  },
  {
   "id": "edit_wheel_2",
   "name": "WHEEL TONE",
   "how_to_get_there": "With MENU > CONTROL > BPM LOCK on, on a WHEEL track, tap EDIT and use SELECT for TONE.",
   "what_it_is": "WHEEL sound controls on EDIT page 2.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/eng_wheel.c",
     "lines": "282-293",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_wheel.c#L282-L293"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1498-1508",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1508"
    }
   ]
  },
  {
   "id": "layer_fx",
   "name": "FX held",
   "how_to_get_there": "Hold FX.",
   "what_it_is": "The keys apply temporary master effects and track cuts; releasing a key ends its effect.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_layer.c",
     "lines": "52-69",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L52-L69"
    }
   ]
  },
  {
   "id": "layer_fx_latch",
   "name": "FX locked",
   "how_to_get_there": "Hold HOME and press FX.",
   "what_it_is": "Effect keys toggle while the layer stays open; closing it clears the effects.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_layer.c",
     "lines": "52-69",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L52-L69"
    }
   ]
  },
  {
   "id": "layer_glo",
   "name": "GLO quick mix",
   "how_to_get_there": "Hold GLO, or hold HOME and press GLO to lock it.",
   "what_it_is": "Mix the tracks, hold solos or fills, and set the tempo.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_layer.c",
     "lines": "52-69",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L52-L69"
    }
   ]
  },
  {
   "id": "layer_scl",
   "name": "SEL scale layer",
   "how_to_get_there": "Hold SEL, or hold HOME and press SEL to lock it.",
   "what_it_is": "Set the selected track’s root, scale and chord.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_layer.c",
     "lines": "52-69",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L52-L69"
    }
   ]
  },
  {
   "id": "layer_edit",
   "name": "EDIT sound layer",
   "how_to_get_there": "Hold EDIT, or hold HOME and press EDIT to lock it.",
   "what_it_is": "Choose an engine or sound while leaving the steps in place.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_layer.c",
     "lines": "52-69",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L52-L69"
    }
   ]
  },
  {
   "id": "layer_seq",
   "name": "SEQ tools on a melodic track",
   "how_to_get_there": "Select a melodic track and hold SEQ, or hold HOME and press SEQ.",
   "what_it_is": "Change the sequence within its current length.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_layer.c",
     "lines": "52-69",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L52-L69"
    }
   ]
  },
  {
   "id": "layer_seq_drum",
   "name": "SEQ tools on a drum track",
   "how_to_get_there": "Select a drum track and hold SEQ, or hold HOME and press SEQ.",
   "what_it_is": "Change the beat or one drum lane within its current length.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_layer.c",
     "lines": "52-69",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L52-L69"
    }
   ]
  },
  {
   "id": "layer_rec",
   "name": "REC settings",
   "how_to_get_there": "Hold HOME and press REC.",
   "what_it_is": "Recording preferences and a held sequence-clear key.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_layer.c",
     "lines": "52-69",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L52-L69"
    }
   ]
  },
  {
   "id": "layer_perf_track",
   "name": "PERFORM with track entries",
   "how_to_get_there": "Hold ARP and turn PRESETS left.",
   "what_it_is": "Launch selected-track list entries, stage mutes and make temporary throws.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_layer.c",
     "lines": "52-69",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L52-L69"
    }
   ]
  },
  {
   "id": "layer_perf_scene",
   "name": "PERFORM with scenes",
   "how_to_get_there": "Hold ARP and turn PRESETS right.",
   "what_it_is": "Recall scenes or hold SAVE with a white key to store the current entries and mutes.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_layer.c",
     "lines": "52-69",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L52-L69"
    }
   ]
  },
  {
   "id": "name_abc",
   "name": "Name entry: ABC",
   "how_to_get_there": "Enter NAME through a USER or PROJECT SAVE action, or choose that page’s NAME action and tap OCT+ to rename its used slot; D# changes ABC/123 typing.",
   "what_it_is": "Edit an uppercase name of up to twelve characters; OCT+ writes only while stopped and OCT- cancels.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_name.c",
     "lines": "77-117",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L77-L117"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "871-894",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L871-L894"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1129-1133",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1129-L1133"
    }
   ]
  },
  {
   "id": "name_num",
   "name": "Name entry: 123",
   "how_to_get_there": "Enter NAME through a USER or PROJECT SAVE action, or choose that page’s NAME action and tap OCT+ to rename its used slot; D# changes ABC/123 typing.",
   "what_it_is": "Edit an uppercase name of up to twelve characters; OCT+ writes only while stopped and OCT- cancels.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_name.c",
     "lines": "77-117",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L77-L117"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "871-894",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L871-L894"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1129-1133",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1129-L1133"
    }
   ]
  },
  {
   "id": "take_result",
   "name": "TAKE result",
   "how_to_get_there": "Disarm REC on the selected track, play a complete loop, then hold HOME and press SAVE.",
   "what_it_is": "A short result card reports what was kept or whether the log was partial; it is a result overlay, not a separate input mode.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_take.c",
     "lines": "172-194",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_take.c#L172-L194"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_take.c",
     "lines": "113-128",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_take.c#L113-L128"
    }
   ]
  },
  {
   "id": "fmop_tone",
   "name": "OPERATOR · TONE",
   "how_to_get_there": "Open EDIT on an FM6 track and turn SELECT to this window with BPM LOCK on until the sheet opens; inside the sheet, SELECT moves its windows regardless of BPM LOCK.",
   "what_it_is": "Shows the selected FM6 patch values and their graph.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_fm6.c",
     "lines": "31",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L31"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1640-1647",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1640-L1647"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1498-1508",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1508"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1016-1028",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1016-L1028"
    }
   ]
  },
  {
   "id": "fmop_env1",
   "name": "OPERATOR · ENV 1",
   "how_to_get_there": "Open EDIT on an FM6 track and turn SELECT to this window with BPM LOCK on until the sheet opens; inside the sheet, SELECT moves its windows regardless of BPM LOCK.",
   "what_it_is": "Shows the selected FM6 patch values and their graph.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_fm6.c",
     "lines": "32",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L32"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1640-1647",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1640-L1647"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1498-1508",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1508"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1016-1028",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1016-L1028"
    }
   ]
  },
  {
   "id": "fmop_env2",
   "name": "OPERATOR · ENV 2",
   "how_to_get_there": "Open EDIT on an FM6 track and turn SELECT to this window with BPM LOCK on until the sheet opens; inside the sheet, SELECT moves its windows regardless of BPM LOCK.",
   "what_it_is": "Shows the selected FM6 patch values and their graph.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_fm6.c",
     "lines": "33-34",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L33-L34"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1640-1647",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1640-L1647"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1498-1508",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1508"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1016-1028",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1016-L1028"
    }
   ]
  },
  {
   "id": "fmop_keys",
   "name": "OPERATOR · KEYS",
   "how_to_get_there": "Open EDIT on an FM6 track and turn SELECT to this window with BPM LOCK on until the sheet opens; inside the sheet, SELECT moves its windows regardless of BPM LOCK.",
   "what_it_is": "Shows the selected FM6 patch values and their graph.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_fm6.c",
     "lines": "35",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L35"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1640-1647",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1640-L1647"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1498-1508",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1508"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1016-1028",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1016-L1028"
    }
   ]
  },
  {
   "id": "fmop_more",
   "name": "OPERATOR · MORE",
   "how_to_get_there": "Open EDIT on an FM6 track and turn SELECT to this window with BPM LOCK on until the sheet opens; inside the sheet, SELECT moves its windows regardless of BPM LOCK.",
   "what_it_is": "Shows the selected FM6 patch values and their graph.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_fm6.c",
     "lines": "36",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L36"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1640-1647",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1640-L1647"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1498-1508",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1508"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1016-1028",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1016-L1028"
    }
   ]
  },
  {
   "id": "fmall_algo",
   "name": "ALL OPS · ALGO",
   "how_to_get_there": "Open EDIT on an FM6 track and turn SELECT to this window with BPM LOCK on until the sheet opens; inside the sheet, SELECT moves its windows regardless of BPM LOCK.",
   "what_it_is": "Shows the selected FM6 patch values and their graph.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_fm6.c",
     "lines": "37",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L37"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1640-1647",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1640-L1647"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1498-1508",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1508"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1016-1028",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1016-L1028"
    }
   ]
  },
  {
   "id": "fmall_pitch1",
   "name": "ALL OPS · PITCH 1",
   "how_to_get_there": "Open EDIT on an FM6 track and turn SELECT to this window with BPM LOCK on until the sheet opens; inside the sheet, SELECT moves its windows regardless of BPM LOCK.",
   "what_it_is": "Shows the selected FM6 patch values and their graph.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_fm6.c",
     "lines": "38-39",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L38-L39"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1640-1647",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1640-L1647"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1498-1508",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1508"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1016-1028",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1016-L1028"
    }
   ]
  },
  {
   "id": "fmall_pitch2",
   "name": "ALL OPS · PITCH 2",
   "how_to_get_there": "Open EDIT on an FM6 track and turn SELECT to this window with BPM LOCK on until the sheet opens; inside the sheet, SELECT moves its windows regardless of BPM LOCK.",
   "what_it_is": "Shows the selected FM6 patch values and their graph.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_fm6.c",
     "lines": "40-41",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L40-L41"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1640-1647",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1640-L1647"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1498-1508",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1508"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1016-1028",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1016-L1028"
    }
   ]
  },
  {
   "id": "fmall_lfo",
   "name": "ALL OPS · LFO",
   "how_to_get_there": "Open EDIT on an FM6 track and turn SELECT to this window with BPM LOCK on until the sheet opens; inside the sheet, SELECT moves its windows regardless of BPM LOCK.",
   "what_it_is": "Shows the selected FM6 patch values and their graph.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_fm6.c",
     "lines": "42",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L42"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1640-1647",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1640-L1647"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1498-1508",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1508"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1016-1028",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1016-L1028"
    }
   ]
  },
  {
   "id": "fmall_depth",
   "name": "ALL OPS · DEPTH",
   "how_to_get_there": "Open EDIT on an FM6 track and turn SELECT to this window with BPM LOCK on until the sheet opens; inside the sheet, SELECT moves its windows regardless of BPM LOCK.",
   "what_it_is": "Shows the selected FM6 patch values and their graph.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_fm6.c",
     "lines": "43",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L43"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1640-1647",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1640-L1647"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1498-1508",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1508"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1016-1028",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1016-L1028"
    }
   ]
  },
  {
   "id": "dx_osc",
   "name": "SOUND · pitch",
   "how_to_get_there": "Open EDIT on a DRUM-X track and use SELECT to reach this SOUND window with BPM LOCK on until the sheet opens; inside the sheet, SELECT moves its windows regardless of BPM LOCK.",
   "what_it_is": "Edits one sound in the project's shared DRUM-X kit.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_dx.c",
     "lines": "6-15",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L6-L15"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_dx.c",
     "lines": "25",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L25"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1498-1508",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1508"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1016-1028",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1016-L1028"
    }
   ]
  },
  {
   "id": "dx_decay",
   "name": "SOUND · decay",
   "how_to_get_there": "Open EDIT on a DRUM-X track and use SELECT to reach this SOUND window with BPM LOCK on until the sheet opens; inside the sheet, SELECT moves its windows regardless of BPM LOCK.",
   "what_it_is": "Edits one sound in the project's shared DRUM-X kit.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_dx.c",
     "lines": "6-15",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L6-L15"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_dx.c",
     "lines": "26",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L26"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1498-1508",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1508"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1016-1028",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1016-L1028"
    }
   ]
  },
  {
   "id": "dx_color",
   "name": "SOUND · colour",
   "how_to_get_there": "Open EDIT on a DRUM-X track and use SELECT to reach this SOUND window with BPM LOCK on until the sheet opens; inside the sheet, SELECT moves its windows regardless of BPM LOCK.",
   "what_it_is": "Edits one sound in the project's shared DRUM-X kit.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_dx.c",
     "lines": "6-15",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L6-L15"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_dx.c",
     "lines": "27",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L27"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1498-1508",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1508"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1016-1028",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1016-L1028"
    }
   ]
  },
  {
   "id": "dx_mode",
   "name": "SOUND · mode",
   "how_to_get_there": "Open EDIT on a DRUM-X track and use SELECT to reach this SOUND window with BPM LOCK on until the sheet opens; inside the sheet, SELECT moves its windows regardless of BPM LOCK.",
   "what_it_is": "Edits one sound in the project's shared DRUM-X kit.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_dx.c",
     "lines": "6-15",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L6-L15"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_dx.c",
     "lines": "28",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L28"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1498-1508",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1508"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1016-1028",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1016-L1028"
    }
   ]
  },
  {
   "id": "slices",
   "name": "SLICES",
   "how_to_get_there": "With MENU > CONTROL > BPM LOCK on, open EDIT on a SLICE track and turn SELECT to SLICES.",
   "what_it_is": "Displays slice boundaries and a close view around the chosen boundary.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_slice.c",
     "lines": "3-17",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_slice.c#L3-L17"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1498-1508",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1508"
    }
   ]
  },
  {
   "id": "menu_display",
   "name": "MENU · DISPLAY",
   "how_to_get_there": "Hold HOME alone, release it, then turn ALGORITHM to this tab.",
   "what_it_is": "Shows the DISPLAY settings rows.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/menu_items.c",
     "lines": "9-40",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L9-L40"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_menu.c",
     "lines": "467-522",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L467-L522"
    }
   ]
  },
  {
   "id": "menu_control",
   "name": "MENU · CONTROL",
   "how_to_get_there": "Hold HOME alone, release it, then turn ALGORITHM to this tab.",
   "what_it_is": "Shows the CONTROL settings rows.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/menu_items.c",
     "lines": "9-40",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L9-L40"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_menu.c",
     "lines": "467-522",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L467-L522"
    }
   ]
  },
  {
   "id": "menu_audio",
   "name": "MENU · AUDIO",
   "how_to_get_there": "Hold HOME alone, release it, then turn ALGORITHM to this tab.",
   "what_it_is": "Shows the AUDIO settings rows.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/menu_items.c",
     "lines": "9-40",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L9-L40"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_menu.c",
     "lines": "467-522",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L467-L522"
    }
   ]
  },
  {
   "id": "menu_system",
   "name": "MENU · SYSTEM",
   "how_to_get_there": "Hold HOME alone, release it, then turn ALGORITHM to this tab.",
   "what_it_is": "Shows the SYSTEM settings rows.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/menu_items.c",
     "lines": "9-40",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L9-L40"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_menu.c",
     "lines": "467-522",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L467-L522"
    }
   ]
  },
  {
   "id": "about",
   "name": "ABOUT / CREDITS",
   "how_to_get_there": "Select ABOUT in MENU > SYSTEM and press OCT+.",
   "what_it_is": "Shows the firmware version, build date, credits, licence and repository QR code.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_menu.c",
     "lines": "120-151",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L120-L151"
    }
   ]
  },
  {
   "id": "calibration",
   "name": "HARDWARE CALIBRATION",
   "how_to_get_there": "Select CALIBRATION in MENU > SYSTEM and press OCT+.",
   "what_it_is": "Prompts for each button and each encoder's clockwise direction.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1548-1634",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1548-L1634"
    }
   ]
  },
  {
   "id": "reset_settings_confirm",
   "name": "Reset settings confirmation",
   "how_to_get_there": "Select RESET SETTINGS in MENU > SYSTEM and press OCT+.",
   "what_it_is": "Asks before returning the MENU settings to their defaults.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_menu.c",
     "lines": "513-515",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L513-L515"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_draw.c",
     "lines": "1144-1146",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_draw.c#L1144-L1146"
    }
   ]
  },
  {
   "id": "shift_map",
   "name": "SHIFT map",
   "how_to_get_there": "Hold HOME alone for at least 250 ms while HINTS is on.",
   "what_it_is": "A context-sensitive map of the current page’s controls.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1306-1317",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1306-L1317"
    }
   ]
  },
  {
   "id": "confirm_user_erase",
   "name": "Erase sound",
   "how_to_get_there": "Stop playback, open SAVE > USER, select a used slot, turn KNOB 3 to ERASE and tap OCT+ once to display the erase question.",
   "what_it_is": "A confirmation before erase sound.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/upreset.c",
     "lines": "244-289",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/upreset.c#L244-L289"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1352-1353",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1352-L1353"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "871-888",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L871-L888"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1343-1369",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1343-L1369"
    }
   ]
  },
  {
   "id": "confirm_user_replace",
   "name": "Replace sound",
   "how_to_get_there": "Stop playback, open SAVE > USER, select a used slot, choose SAVE with KNOB 4 and tap OCT+ once to display the overwrite question.",
   "what_it_is": "A confirmation before replace sound.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1348-1351",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1348-L1351"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "871-888",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L871-L888"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1343-1369",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1343-L1369"
    }
   ]
  },
  {
   "id": "confirm_project_replace",
   "name": "Replace project",
   "how_to_get_there": "Stop playback, open SAVE > PROJECT, select a used slot, choose SAVE with KNOB 4 and tap OCT+ once to display the overwrite question.",
   "what_it_is": "A confirmation before replace project.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1348-1351",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1348-L1351"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "907-913",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L907-L913"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1343-1369",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1343-L1369"
    }
   ]
  },
  {
   "id": "confirm_project_load",
   "name": "Load project",
   "how_to_get_there": "On SAVE > PROJECT, select a used slot, choose LOAD with KNOB 3 and tap OCT+ once; the load question appears only if the current session changed.",
   "what_it_is": "A confirmation before load project.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/project.c",
     "lines": "1341-1370",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1341-L1370"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/project.c",
     "lines": "1267-1312",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1267-L1312"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "900-905",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L900-L905"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1343-1369",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1343-L1369"
    }
   ]
  },
  {
   "id": "confirm_pool_clear",
   "name": "Clear pool",
   "how_to_get_there": "While stopped, open SAVE > PATTERNS, select a stored pattern that no entry uses and tap OCT+ once to display the clear question.",
   "what_it_is": "A confirmation before clear pool.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/bank.c",
     "lines": "1033-1062",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L1033-L1062"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "853-868",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L853-L868"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1343-1369",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1343-L1369"
    }
   ]
  },
  {
   "id": "confirm_entry_clear",
   "name": "Clear entry",
   "how_to_get_there": "While stopped on SEQ > SONG, choose an occupied entry with KNOB 1, turn KNOB 2 to CLEAR and tap OCT+ once to display the clear question.",
   "what_it_is": "A confirmation before clear entry.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/bank.c",
     "lines": "563-604",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L563-L604"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/bank.c",
     "lines": "617-621",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L617-L621"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "837-841",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L837-L841"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1343-1369",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1343-L1369"
    }
   ]
  },
  {
   "id": "confirm_sound_init",
   "name": "Initialize sound",
   "how_to_get_there": "Hold EDIT and press F5 to display the initialization question immediately; on DRUM-X its warning includes the shared kit.",
   "what_it_is": "A confirmation before initialize sound.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "1396-1411",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1396-L1411"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_layer.c",
     "lines": "503-507",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L503-L507"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1343-1369",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1343-L1369"
    }
   ]
  },
  {
   "id": "confirm_motion_clear",
   "name": "Clear automation",
   "how_to_get_there": "On SEQ > AUTOMATION, select its top settings row, choose CLEAR with KNOB 4 and tap OCT+ once to display the clear question.",
   "what_it_is": "A confirmation before clear automation.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1358-1360",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1358-L1360"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_events.c",
     "lines": "221-232",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_events.c#L221-L232"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1343-1369",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1343-L1369"
    }
   ]
  },
  {
   "id": "confirm_scene_replace",
   "name": "Replace scene",
   "how_to_get_there": "Set PERFORM’s KEYS to SCENE, hold or lock the PERFORM layer open, then hold SAVE and press a white key for an occupied scene to open its overwrite question.",
   "what_it_is": "A confirmation before replace scene.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/bank.c",
     "lines": "906-988",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L906-L988"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1368-1369",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1368-L1369"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/bank.c",
     "lines": "979-988",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L979-L988"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1343-1369",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1343-L1369"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_layer.c",
     "lines": "178-184",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L178-L184"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_layer.c",
     "lines": "511-517",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L511-L517"
    }
   ]
  },
  {
   "id": "name_user_save",
   "name": "NAME: sound save",
   "how_to_get_there": "While stopped on SAVE > USER, pick the destination with KNOB 1, choose SAVE with KNOB 4 and tap OCT+; if overwrite is asked, accept it to enter NAME, then type the new sound name.",
   "what_it_is": "Saves the current track sound into the chosen slot; the final OCT+ in NAME writes it.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_name.c",
     "lines": "207-237",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L207-L237"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "871-888",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L871-L888"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_name.c",
     "lines": "223-228",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L223-L228"
    }
   ]
  },
  {
   "id": "name_user_rename",
   "name": "NAME: sound rename",
   "how_to_get_there": "While stopped on SAVE > USER, pick a used slot with KNOB 1, turn KNOB 3 to NAME and tap OCT+ to edit that stored sound’s name.",
   "what_it_is": "Preserves the stored sound and changes its name only when OCT+ is tapped in NAME.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_name.c",
     "lines": "207-237",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L207-L237"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "871-875",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L871-L875"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_name.c",
     "lines": "106-117",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L106-L117"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_name.c",
     "lines": "223-228",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L223-L228"
    }
   ]
  },
  {
   "id": "name_project_save",
   "name": "NAME: project save",
   "how_to_get_there": "While stopped on SAVE > PROJECT, pick the destination with KNOB 1, choose SAVE with KNOB 4 and tap OCT+; if overwrite is asked, accept it to enter NAME, then type the project name.",
   "what_it_is": "Saves the current session into the chosen project; the final OCT+ in NAME writes it.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_name.c",
     "lines": "207-237",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L207-L237"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "907-913",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L907-L913"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_name.c",
     "lines": "230-234",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L230-L234"
    }
   ]
  },
  {
   "id": "name_project_rename",
   "name": "NAME: project rename",
   "how_to_get_there": "While stopped on SAVE > PROJECT, pick a used slot with KNOB 1, choose NAME with KNOB 2 and tap OCT+ to edit that stored project’s name.",
   "what_it_is": "Preserves the stored project and changes its name only when OCT+ is tapped in NAME.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_name.c",
     "lines": "207-237",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L207-L237"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "891-894",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L891-L894"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_name.c",
     "lines": "106-117",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L106-L117"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_name.c",
     "lines": "230-234",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L230-L234"
    }
   ]
  }
 ],
 "controls": {
  "screen": [
   {
    "mode": "home",
    "gesture": "shows",
    "short_label": "HOME",
    "action": "Shows the selected sound’s four controls, transport and tempo above the track view or the scope.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_home.c",
      "lines": "59-83",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_home.c#L59-L83"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_draw.c",
      "lines": "1287-1295",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_draw.c#L1287-L1295"
     }
    ]
   },
   {
    "mode": "dialog",
    "gesture": "shows",
    "short_label": "CONFIRMATION",
    "action": "Names the pending action and offers OCT- to cancel or OCT+ to proceed.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_draw.c",
      "lines": "1133-1199",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_draw.c#L1133-L1199"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_blocks.c",
      "lines": "321-336",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_blocks.c#L321-L336"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "shows",
    "short_label": "SCREEN OFF",
    "action": "Turns the display and backlight off after the chosen idle time while audio, MIDI and USB remain available.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "update",
    "gesture": "shows",
    "short_label": "UPDATE MODE",
    "action": "Shows a countdown before entering UPDATE MODE; release either octave button before it ends to cancel.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/main.c",
      "lines": "220-246",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/main.c#L220-L246"
     }
    ]
   },
   {
    "mode": "startup",
    "gesture": "shows",
    "short_label": "STARTUP",
    "action": "Shows the startup artwork before opening the playing interface; keys pressed under the splash are silent.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/main.c",
      "lines": "154-155",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/main.c#L154-L155"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "702-707",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L702-L707"
     }
    ]
   },
   {
    "mode": "crash",
    "gesture": "shows",
    "short_label": "CRASH SCREEN",
    "action": "Shows SKIFF CRASH with diagnostic values and restarts after about four seconds.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/main.c",
      "lines": "74-95",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/main.c#L74-L95"
     }
    ]
   },
   {
    "mode": "env",
    "gesture": "shows",
    "short_label": "ENV",
    "action": "The main amplitude envelope, hidden on FM6 and drum tracks.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "407",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L407"
     }
    ]
   },
   {
    "mode": "env_dest",
    "gesture": "shows",
    "short_label": "ENV DEST",
    "action": "Main envelope modulation amounts, hidden on FM6 and drum tracks.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "408",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L408"
     }
    ]
   },
   {
    "mode": "env_2",
    "gesture": "shows",
    "short_label": "ENV 2",
    "action": "A second envelope for the modulation matrix, hidden on FM6 and drum tracks.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "409",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L409"
     }
    ]
   },
   {
    "mode": "lfo",
    "gesture": "shows",
    "short_label": "LFO",
    "action": "The LFO page for its displayed controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "410",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L410"
     }
    ]
   },
   {
    "mode": "lfo_dest",
    "gesture": "shows",
    "short_label": "LFO DEST",
    "action": "The LFO DEST page for its displayed controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "411",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L411"
     }
    ]
   },
   {
    "mode": "mod",
    "gesture": "shows",
    "short_label": "MOD",
    "action": "The MOD page for its displayed controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "412",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L412"
     }
    ]
   },
   {
    "mode": "fx",
    "gesture": "shows",
    "short_label": "FX",
    "action": "The FX page for its displayed controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "413",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L413"
     }
    ]
   },
   {
    "mode": "drive",
    "gesture": "shows",
    "short_label": "DRIVE",
    "action": "The DRIVE page for its displayed controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "414",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L414"
     }
    ]
   },
   {
    "mode": "slicer",
    "gesture": "shows",
    "short_label": "SLICER",
    "action": "The SLICER page for its displayed controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "415",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L415"
     }
    ]
   },
   {
    "mode": "duck",
    "gesture": "shows",
    "short_label": "DUCK",
    "action": "The DUCK page for its displayed controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "416",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L416"
     }
    ]
   },
   {
    "mode": "scale",
    "gesture": "shows",
    "short_label": "SCL",
    "action": "Scale and pitch mapping, hidden on drum tracks.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "417",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L417"
     }
    ]
   },
   {
    "mode": "chord",
    "gesture": "shows",
    "short_label": "CHORD",
    "action": "Chord shape and voicing, hidden on drum tracks.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "418",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L418"
     }
    ]
   },
   {
    "mode": "lanes",
    "gesture": "shows",
    "short_label": "LANES",
    "action": "Individual DRUM lane levels, tuning and decay.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "423",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L423"
     }
    ]
   },
   {
    "mode": "voice",
    "gesture": "shows",
    "short_label": "VOICE",
    "action": "Voice and glide choices, hidden on drum tracks.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "433",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L433"
     }
    ]
   },
   {
    "mode": "voice_2",
    "gesture": "shows",
    "short_label": "VOICE 2",
    "action": "Voice allocation and unison detune, hidden on drum tracks.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "434",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L434"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "shows",
    "short_label": "MIXER",
    "action": "The MIXER page for its displayed controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "435",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L435"
     }
    ]
   },
   {
    "mode": "delay",
    "gesture": "shows",
    "short_label": "DELAY",
    "action": "The DELAY page for its displayed controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "436",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L436"
     }
    ]
   },
   {
    "mode": "reverb",
    "gesture": "shows",
    "short_label": "REVERB",
    "action": "The REVERB page for its displayed controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "437",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L437"
     }
    ]
   },
   {
    "mode": "chorus",
    "gesture": "shows",
    "short_label": "CHORUS",
    "action": "The CHORUS page for its displayed controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "438",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L438"
     }
    ]
   },
   {
    "mode": "global",
    "gesture": "shows",
    "short_label": "GLOBAL",
    "action": "The GLOBAL page for its displayed controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "439",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L439"
     }
    ]
   },
   {
    "mode": "presets",
    "gesture": "shows",
    "short_label": "PRESETS",
    "action": "The PRESETS page for its displayed controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "440",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L440"
     }
    ]
   },
   {
    "mode": "user",
    "gesture": "shows",
    "short_label": "USER",
    "action": "Named sound slots with LOAD, ERASE, NAME and SAVE actions.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "441",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L441"
     }
    ]
   },
   {
    "mode": "pool",
    "gesture": "shows",
    "short_label": "PATTERNS",
    "action": "The common pool of 64 patterns; a pattern used by an entry cannot be cleared here.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "442",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L442"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "shows",
    "short_label": "PROJECT",
    "action": "Four named project slots; their notes live in the shared pattern pool.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "443",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L443"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "shows",
    "short_label": "ARP",
    "action": "The ARP page for its displayed controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "444",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L444"
     }
    ]
   },
   {
    "mode": "arp_2",
    "gesture": "shows",
    "short_label": "ARP 2",
    "action": "The ARP 2 page for its displayed controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "445",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L445"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "shows",
    "short_label": "STEP",
    "action": "Melodic step tiles; DRUM and DRUM-X use the drum grid instead.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "446",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L446"
     }
    ]
   },
   {
    "mode": "roll",
    "gesture": "shows",
    "short_label": "ROLL",
    "action": "A piano roll for melodic tracks.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "447",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L447"
     }
    ]
   },
   {
    "mode": "chance",
    "gesture": "shows",
    "short_label": "CHANCE",
    "action": "The CHANCE page for its displayed controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "449",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L449"
     }
    ]
   },
   {
    "mode": "seq_play",
    "gesture": "shows",
    "short_label": "PLAY",
    "action": "The PLAY page for its displayed controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "450",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L450"
     }
    ]
   },
   {
    "mode": "pattern",
    "gesture": "shows",
    "short_label": "PATTERN",
    "action": "The PATTERN page for its displayed controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "451",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L451"
     }
    ]
   },
   {
    "mode": "automation",
    "gesture": "shows",
    "short_label": "AUTOMATION",
    "action": "The AUTOMATION page for its displayed controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "452",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L452"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "shows",
    "short_label": "SONG",
    "action": "Each track has sixteen entries pointing into the shared pattern pool.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "453",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L453"
     }
    ]
   },
   {
    "mode": "home_analog",
    "gesture": "shows",
    "short_label": "HOME ANALOG",
    "action": "Shows the four main controls of the selected ANALOG track above the track view or scope.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1588-1594",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1588-L1594"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_analog.c",
      "lines": "127",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_analog.c#L127"
     }
    ]
   },
   {
    "mode": "edit_analog_1",
    "gesture": "shows",
    "short_label": "ANALOG OSC",
    "action": "Shows ANALOG OSC with its four knob values.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "419",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L419"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_analog.c",
      "lines": "110-121",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_analog.c#L110-L121"
     }
    ]
   },
   {
    "mode": "edit_analog_2",
    "gesture": "shows",
    "short_label": "ANALOG FLT",
    "action": "Shows ANALOG FLT with its four knob values.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "420",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L420"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_analog.c",
      "lines": "110-121",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_analog.c#L110-L121"
     }
    ]
   },
   {
    "mode": "home_drum",
    "gesture": "shows",
    "short_label": "HOME DRUM",
    "action": "Shows the four main controls of the selected DRUM track above the track view or scope.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1588-1594",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1588-L1594"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "343",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L343"
     }
    ]
   },
   {
    "mode": "edit_drum_1",
    "gesture": "shows",
    "short_label": "DRUM KIT",
    "action": "Shows DRUM KIT with its four knob values.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "419",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L419"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "325-336",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L325-L336"
     }
    ]
   },
   {
    "mode": "edit_drum_2",
    "gesture": "shows",
    "short_label": "DRUM HIT",
    "action": "Shows DRUM HIT with its four knob values.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "420",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L420"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "325-336",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L325-L336"
     }
    ]
   },
   {
    "mode": "home_drumx",
    "gesture": "shows",
    "short_label": "HOME DRUM-X",
    "action": "Shows the four main controls of the selected DRUM-X track above the track view or scope.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1588-1594",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1588-L1594"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drumx.c",
      "lines": "266",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drumx.c#L266"
     }
    ]
   },
   {
    "mode": "edit_drumx_1",
    "gesture": "shows",
    "short_label": "DRUM-X KIT",
    "action": "Shows DRUM-X KIT with its four knob values.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "419",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L419"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drumx.c",
      "lines": "248-259",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drumx.c#L248-L259"
     }
    ]
   },
   {
    "mode": "edit_drumx_2",
    "gesture": "shows",
    "short_label": "DRUM-X HIT",
    "action": "Shows DRUM-X HIT with its four knob values.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "420",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L420"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drumx.c",
      "lines": "248-259",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drumx.c#L248-L259"
     }
    ]
   },
   {
    "mode": "home_fm6",
    "gesture": "shows",
    "short_label": "HOME FM6",
    "action": "Shows the four main controls of the selected FM6 track above the track view or scope.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1588-1594",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1588-L1594"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_fm6.c",
      "lines": "421",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_fm6.c#L421"
     }
    ]
   },
   {
    "mode": "edit_fm6_1",
    "gesture": "shows",
    "short_label": "FM6 OPS",
    "action": "Shows FM6 OPS with its four knob values.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "419",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L419"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_fm6.c",
      "lines": "404-415",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_fm6.c#L404-L415"
     }
    ]
   },
   {
    "mode": "edit_fm6_2",
    "gesture": "shows",
    "short_label": "FM6 PATCH",
    "action": "Shows FM6 PATCH with its four knob values.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "420",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L420"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_fm6.c",
      "lines": "404-415",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_fm6.c#L404-L415"
     }
    ]
   },
   {
    "mode": "home_voice",
    "gesture": "shows",
    "short_label": "HOME VOICE",
    "action": "Shows the four main controls of the selected VOICE track above the track view or scope.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1588-1594",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1588-L1594"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_formant.c",
      "lines": "236",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_formant.c#L236"
     }
    ]
   },
   {
    "mode": "edit_voice_1",
    "gesture": "shows",
    "short_label": "VOICE VOWEL",
    "action": "Shows VOICE VOWEL with its four knob values.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "419",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L419"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_formant.c",
      "lines": "219-230",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_formant.c#L219-L230"
     }
    ]
   },
   {
    "mode": "edit_voice_2",
    "gesture": "shows",
    "short_label": "VOICE TONE",
    "action": "Shows VOICE TONE with its four knob values.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "420",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L420"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_formant.c",
      "lines": "219-230",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_formant.c#L219-L230"
     }
    ]
   },
   {
    "mode": "home_grain",
    "gesture": "shows",
    "short_label": "HOME GRAIN",
    "action": "Shows the four main controls of the selected GRAIN track above the track view or scope.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1588-1594",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1588-L1594"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_grain.c",
      "lines": "471",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_grain.c#L471"
     }
    ]
   },
   {
    "mode": "edit_grain_1",
    "gesture": "shows",
    "short_label": "GRAIN GRAIN",
    "action": "Shows GRAIN GRAIN with its four knob values.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "419",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L419"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_grain.c",
      "lines": "454-465",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_grain.c#L454-L465"
     }
    ]
   },
   {
    "mode": "edit_grain_2",
    "gesture": "shows",
    "short_label": "GRAIN SPRAY",
    "action": "Shows GRAIN SPRAY with its four knob values.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "420",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L420"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_grain.c",
      "lines": "454-465",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_grain.c#L454-L465"
     }
    ]
   },
   {
    "mode": "home_lofi",
    "gesture": "shows",
    "short_label": "HOME LOFI",
    "action": "Shows the four main controls of the selected LOFI track above the track view or scope.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1588-1594",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1588-L1594"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_lofi.c",
      "lines": "238",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_lofi.c#L238"
     }
    ]
   },
   {
    "mode": "edit_lofi_1",
    "gesture": "shows",
    "short_label": "LOFI CHIP",
    "action": "Shows LOFI CHIP with its four knob values.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "419",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L419"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_lofi.c",
      "lines": "221-232",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_lofi.c#L221-L232"
     }
    ]
   },
   {
    "mode": "edit_lofi_2",
    "gesture": "shows",
    "short_label": "LOFI MOTION",
    "action": "Shows LOFI MOTION with its four knob values.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "420",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L420"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_lofi.c",
      "lines": "221-232",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_lofi.c#L221-L232"
     }
    ]
   },
   {
    "mode": "home_noise",
    "gesture": "shows",
    "short_label": "HOME NOISE",
    "action": "Shows the four main controls of the selected NOISE track above the track view or scope.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1588-1594",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1588-L1594"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_noise.c",
      "lines": "275",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_noise.c#L275"
     }
    ]
   },
   {
    "mode": "edit_noise_1",
    "gesture": "shows",
    "short_label": "NOISE SOURCE",
    "action": "Shows NOISE SOURCE with its four knob values.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "419",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L419"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_noise.c",
      "lines": "258-269",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_noise.c#L258-L269"
     }
    ]
   },
   {
    "mode": "edit_noise_2",
    "gesture": "shows",
    "short_label": "NOISE MOVE",
    "action": "Shows NOISE MOVE with its four knob values.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "420",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L420"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_noise.c",
      "lines": "258-269",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_noise.c#L258-L269"
     }
    ]
   },
   {
    "mode": "home_phase",
    "gesture": "shows",
    "short_label": "HOME PHASE",
    "action": "Shows the four main controls of the selected PHASE track above the track view or scope.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1588-1594",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1588-L1594"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_phase.c",
      "lines": "205",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phase.c#L205"
     }
    ]
   },
   {
    "mode": "edit_phase_1",
    "gesture": "shows",
    "short_label": "PHASE PHASE",
    "action": "Shows PHASE PHASE with its four knob values.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "419",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L419"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_phase.c",
      "lines": "188-199",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phase.c#L188-L199"
     }
    ]
   },
   {
    "mode": "edit_phase_2",
    "gesture": "shows",
    "short_label": "PHASE LINE",
    "action": "Shows PHASE LINE with its four knob values.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "420",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L420"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_phase.c",
      "lines": "188-199",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phase.c#L188-L199"
     }
    ]
   },
   {
    "mode": "home_phys",
    "gesture": "shows",
    "short_label": "HOME PHYS",
    "action": "Shows the four main controls of the selected PHYS track above the track view or scope.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1588-1594",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1588-L1594"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_phys.c",
      "lines": "251",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phys.c#L251"
     }
    ]
   },
   {
    "mode": "edit_phys_1",
    "gesture": "shows",
    "short_label": "PHYS BODY",
    "action": "Shows PHYS BODY with its four knob values.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "419",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L419"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_phys.c",
      "lines": "234-245",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phys.c#L234-L245"
     }
    ]
   },
   {
    "mode": "edit_phys_2",
    "gesture": "shows",
    "short_label": "PHYS EXCITE",
    "action": "Shows PHYS EXCITE with its four knob values.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "420",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L420"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_phys.c",
      "lines": "234-245",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phys.c#L234-L245"
     }
    ]
   },
   {
    "mode": "home_sample",
    "gesture": "shows",
    "short_label": "HOME SAMPLE",
    "action": "Shows the four main controls of the selected SAMPLE track above the track view or scope.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1588-1594",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1588-L1594"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_sample.c",
      "lines": "261",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_sample.c#L261"
     }
    ]
   },
   {
    "mode": "edit_sample_1",
    "gesture": "shows",
    "short_label": "SAMPLE SET",
    "action": "Shows SAMPLE SET with its four knob values.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "419",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L419"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_sample.c",
      "lines": "244-255",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_sample.c#L244-L255"
     }
    ]
   },
   {
    "mode": "edit_sample_2",
    "gesture": "shows",
    "short_label": "SAMPLE TONE",
    "action": "Shows SAMPLE TONE with its four knob values.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "420",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L420"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_sample.c",
      "lines": "244-255",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_sample.c#L244-L255"
     }
    ]
   },
   {
    "mode": "home_slice",
    "gesture": "shows",
    "short_label": "HOME SLICE",
    "action": "Shows the four main controls of the selected SLICE track above the track view or scope.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1588-1594",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1588-L1594"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_slice.c",
      "lines": "655",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_slice.c#L655"
     }
    ]
   },
   {
    "mode": "edit_slice_1",
    "gesture": "shows",
    "short_label": "SLICE SLICE",
    "action": "Shows SLICE SLICE with its four knob values.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "419",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L419"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_slice.c",
      "lines": "638-649",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_slice.c#L638-L649"
     }
    ]
   },
   {
    "mode": "edit_slice_2",
    "gesture": "shows",
    "short_label": "PLAYBACK",
    "action": "Shows SLICE PLAYBACK with its four knob values.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "420",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L420"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_slice.c",
      "lines": "638-649",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_slice.c#L638-L649"
     }
    ]
   },
   {
    "mode": "home_trio",
    "gesture": "shows",
    "short_label": "HOME TRIO",
    "action": "Shows the four main controls of the selected TRIO track above the track view or scope.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1588-1594",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1588-L1594"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_trio.c",
      "lines": "378",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_trio.c#L378"
     }
    ]
   },
   {
    "mode": "edit_trio_1",
    "gesture": "shows",
    "short_label": "TRIO OSC",
    "action": "Shows TRIO OSC with its four knob values.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "419",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L419"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_trio.c",
      "lines": "361-372",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_trio.c#L361-L372"
     }
    ]
   },
   {
    "mode": "edit_trio_2",
    "gesture": "shows",
    "short_label": "TRIO TONE",
    "action": "Shows TRIO TONE with its four knob values.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "420",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L420"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_trio.c",
      "lines": "361-372",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_trio.c#L361-L372"
     }
    ]
   },
   {
    "mode": "home_wheel",
    "gesture": "shows",
    "short_label": "HOME WHEEL",
    "action": "Shows the four main controls of the selected WHEEL track above the track view or scope.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1588-1594",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1588-L1594"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_wheel.c",
      "lines": "299",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_wheel.c#L299"
     }
    ]
   },
   {
    "mode": "edit_wheel_1",
    "gesture": "shows",
    "short_label": "WHEEL BARS",
    "action": "Shows WHEEL BARS with its four knob values.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "419",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L419"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_wheel.c",
      "lines": "282-293",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_wheel.c#L282-L293"
     }
    ]
   },
   {
    "mode": "edit_wheel_2",
    "gesture": "shows",
    "short_label": "WHEEL TONE",
    "action": "Shows WHEEL TONE with its four knob values.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "420",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L420"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_wheel.c",
      "lines": "282-293",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_wheel.c#L282-L293"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "shows",
    "short_label": "FX MAP",
    "action": "Shows this layer’s key map, current values and control hints over the current page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "1198-1234",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L1198-L1234"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "shows",
    "short_label": "LOCKED FX",
    "action": "Shows this layer’s key map, current values and control hints over the current page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "1198-1234",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L1198-L1234"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "shows",
    "short_label": "MIX MAP",
    "action": "Shows this layer’s key map, current values and control hints over the current page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "1198-1234",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L1198-L1234"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "shows",
    "short_label": "SCALE MAP",
    "action": "Shows this layer’s key map, current values and control hints over the current page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "1198-1234",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L1198-L1234"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "shows",
    "short_label": "ENGINE MAP",
    "action": "Shows this layer’s key map, current values and control hints over the current page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "1198-1234",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L1198-L1234"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "shows",
    "short_label": "SEQ TOOLS",
    "action": "Shows this layer’s key map, current values and control hints over the current page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "1198-1234",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L1198-L1234"
     }
    ]
   },
   {
    "mode": "layer_seq_drum",
    "gesture": "shows",
    "short_label": "DRUM TOOLS",
    "action": "Shows this layer’s key map, current values and control hints over the current page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "1198-1234",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L1198-L1234"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "shows",
    "short_label": "REC SETTINGS",
    "action": "Shows this layer’s key map, current values and control hints over the current page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "1198-1234",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L1198-L1234"
     }
    ]
   },
   {
    "mode": "layer_perf_track",
    "gesture": "shows",
    "short_label": "PERFORM",
    "action": "Shows this layer’s key map, current values and control hints over the current page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "1198-1234",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L1198-L1234"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "shows",
    "short_label": "SCENES",
    "action": "Shows this layer’s key map, current values and control hints over the current page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "1198-1234",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L1198-L1234"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "shows",
    "short_label": "NAME",
    "action": "Shows the target slot, twelve-character field, cursor, typing groups and save/cancel controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "291-305",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L291-L305"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "395-407",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L395-L407"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "shows",
    "short_label": "NAME",
    "action": "Shows the target slot, twelve-character field, cursor, typing groups and save/cancel controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "291-305",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L291-L305"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "395-407",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L395-L407"
     }
    ]
   },
   {
    "mode": "take_result",
    "gesture": "shows",
    "short_label": "TAKE RESULT",
    "action": "Shows the track and kept-note/move counts for about two seconds, or warns about partial capture or full automation storage.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_take.c",
      "lines": "172-194",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_take.c#L172-L194"
     }
    ]
   },
   {
    "mode": "fmop_tone",
    "gesture": "shows",
    "short_label": "OP TONE",
    "action": "Shows OPERATOR, TONE values and the matching patch graph.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "31",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L31"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "213-232",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L213-L232"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "970-999",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L970-L999"
     }
    ]
   },
   {
    "mode": "fmop_env1",
    "gesture": "shows",
    "short_label": "OP ENV 1",
    "action": "Shows OPERATOR, ENV 1 values and the matching patch graph.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "32",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L32"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "213-232",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L213-L232"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "970-999",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L970-L999"
     }
    ]
   },
   {
    "mode": "fmop_env2",
    "gesture": "shows",
    "short_label": "OP ENV 2",
    "action": "Shows OPERATOR, ENV 2 values and the matching patch graph.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "33-34",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L33-L34"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "213-232",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L213-L232"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "970-999",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L970-L999"
     }
    ]
   },
   {
    "mode": "fmop_keys",
    "gesture": "shows",
    "short_label": "OP KEYS",
    "action": "Shows OPERATOR, KEYS values and the matching patch graph.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "35",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L35"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "213-232",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L213-L232"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "970-999",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L970-L999"
     }
    ]
   },
   {
    "mode": "fmop_more",
    "gesture": "shows",
    "short_label": "OP MORE",
    "action": "Shows OPERATOR, MORE values and the matching patch graph.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "36",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L36"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "213-232",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L213-L232"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "970-999",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L970-L999"
     }
    ]
   },
   {
    "mode": "fmall_algo",
    "gesture": "shows",
    "short_label": "ALL ALGO",
    "action": "Shows ALL OPS, ALGO values and the matching patch graph.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "37",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L37"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "213-232",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L213-L232"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "970-999",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L970-L999"
     }
    ]
   },
   {
    "mode": "fmall_pitch1",
    "gesture": "shows",
    "short_label": "ALL PITCH 1",
    "action": "Shows ALL OPS, PITCH 1 values and the matching patch graph.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "38-39",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L38-L39"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "213-232",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L213-L232"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "970-999",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L970-L999"
     }
    ]
   },
   {
    "mode": "fmall_pitch2",
    "gesture": "shows",
    "short_label": "ALL PITCH 2",
    "action": "Shows ALL OPS, PITCH 2 values and the matching patch graph.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "40-41",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L40-L41"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "213-232",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L213-L232"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "970-999",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L970-L999"
     }
    ]
   },
   {
    "mode": "fmall_lfo",
    "gesture": "shows",
    "short_label": "ALL LFO",
    "action": "Shows ALL OPS, LFO values and the matching patch graph.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "213-232",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L213-L232"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "970-999",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L970-L999"
     }
    ]
   },
   {
    "mode": "fmall_depth",
    "gesture": "shows",
    "short_label": "ALL DEPTH",
    "action": "Shows ALL OPS, DEPTH values and the matching patch graph.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "43",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L43"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "213-232",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L213-L232"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "970-999",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L970-L999"
     }
    ]
   },
   {
    "mode": "dx_osc",
    "gesture": "shows",
    "short_label": "DRUM OSC",
    "action": "Shows the chosen drum sound, its A and B values, lane level and mode switches.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "163-221",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L163-L221"
     }
    ]
   },
   {
    "mode": "dx_decay",
    "gesture": "shows",
    "short_label": "DRUM DECAY",
    "action": "Shows the chosen drum sound, its A and B values, lane level and mode switches.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "163-221",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L163-L221"
     }
    ]
   },
   {
    "mode": "dx_color",
    "gesture": "shows",
    "short_label": "DRUM COLOR",
    "action": "Shows the chosen drum sound, its A and B values, lane level and mode switches.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "163-221",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L163-L221"
     }
    ]
   },
   {
    "mode": "dx_mode",
    "gesture": "shows",
    "short_label": "DRUM MODE",
    "action": "Shows the chosen drum sound, its A and B values, lane level and mode switches.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "163-221",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L163-L221"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "shows",
    "short_label": "SLICES",
    "action": "Shows slice starts, the final END marker and the waveform around the chosen marker.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_slice.c",
      "lines": "41-75",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_slice.c#L41-L75"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_slice.c",
      "lines": "224-250",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_slice.c#L224-L250"
     }
    ]
   },
   {
    "mode": "menu_display",
    "gesture": "shows",
    "short_label": "DISPLAY MENU",
    "action": "Shows the DISPLAY tab, its rows and selected value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "9-40",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L9-L40"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "382-447",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L382-L447"
     }
    ]
   },
   {
    "mode": "menu_control",
    "gesture": "shows",
    "short_label": "CONTROL MENU",
    "action": "Shows the CONTROL tab, its rows and selected value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "9-40",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L9-L40"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "382-447",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L382-L447"
     }
    ]
   },
   {
    "mode": "menu_audio",
    "gesture": "shows",
    "short_label": "AUDIO MENU",
    "action": "Shows the AUDIO tab, its rows and selected value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "9-40",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L9-L40"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "382-447",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L382-L447"
     }
    ]
   },
   {
    "mode": "menu_system",
    "gesture": "shows",
    "short_label": "SYSTEM MENU",
    "action": "Shows the SYSTEM tab, its rows and selected value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "9-40",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L9-L40"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "382-447",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L382-L447"
     }
    ]
   },
   {
    "mode": "about",
    "gesture": "shows",
    "short_label": "ABOUT",
    "action": "Shows version, build date, credits, licence and the repository QR code.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "120-151",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L120-L151"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "shows",
    "short_label": "CALIBRATION",
    "action": "Prompts for each button and clockwise knob turn, with any piano key or 30 seconds idle cancelling the process.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1548-1634",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1548-L1634"
     }
    ]
   },
   {
    "mode": "reset_settings_confirm",
    "gesture": "shows",
    "short_label": "RESET",
    "action": "Asks whether to reset settings while keeping music.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_draw.c",
      "lines": "1144-1146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_draw.c#L1144-L1146"
     }
    ]
   },
   {
    "mode": "shift_map",
    "gesture": "shows",
    "short_label": "SHIFT MAP",
    "action": "Shows the current page’s button, encoder and key jobs until HOME is released or a combination is used.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "1271-1303",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L1271-L1303"
     }
    ]
   },
   {
    "mode": "confirm_user_erase",
    "gesture": "shows",
    "short_label": "ERASE SOUND",
    "action": "Shows the erase sound question and the affected target.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_draw.c",
      "lines": "1133-1199",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_draw.c#L1133-L1199"
     }
    ]
   },
   {
    "mode": "confirm_user_replace",
    "gesture": "shows",
    "short_label": "REPLACE USER",
    "action": "Shows the replace sound question and the affected target.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_draw.c",
      "lines": "1133-1199",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_draw.c#L1133-L1199"
     }
    ]
   },
   {
    "mode": "confirm_project_replace",
    "gesture": "shows",
    "short_label": "REPLACE PROJ",
    "action": "Shows the replace project question and the affected target.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_draw.c",
      "lines": "1133-1199",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_draw.c#L1133-L1199"
     }
    ]
   },
   {
    "mode": "confirm_project_load",
    "gesture": "shows",
    "short_label": "LOAD PROJECT",
    "action": "Shows the load project question and the affected target.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_draw.c",
      "lines": "1133-1199",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_draw.c#L1133-L1199"
     }
    ]
   },
   {
    "mode": "confirm_pool_clear",
    "gesture": "shows",
    "short_label": "CLEAR POOL",
    "action": "Shows the clear pool question and the affected target.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_draw.c",
      "lines": "1133-1199",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_draw.c#L1133-L1199"
     }
    ]
   },
   {
    "mode": "confirm_entry_clear",
    "gesture": "shows",
    "short_label": "CLEAR ENTRY",
    "action": "Shows the clear entry question and the affected target.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_draw.c",
      "lines": "1133-1199",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_draw.c#L1133-L1199"
     }
    ]
   },
   {
    "mode": "confirm_sound_init",
    "gesture": "shows",
    "short_label": "INIT SOUND",
    "action": "Shows the initialize sound question and the affected target.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_draw.c",
      "lines": "1133-1199",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_draw.c#L1133-L1199"
     }
    ]
   },
   {
    "mode": "confirm_motion_clear",
    "gesture": "shows",
    "short_label": "CLEAR MOTION",
    "action": "Shows the clear automation question and the affected target.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_draw.c",
      "lines": "1133-1199",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_draw.c#L1133-L1199"
     }
    ]
   },
   {
    "mode": "confirm_scene_replace",
    "gesture": "shows",
    "short_label": "STORE SCENE",
    "action": "Shows the replace scene question and the affected target.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_draw.c",
      "lines": "1133-1199",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_draw.c#L1133-L1199"
     }
    ]
   },
   {
    "mode": "name_user_save",
    "gesture": "shows",
    "short_label": "SAVE USER",
    "action": "Shows the target slot and editable name before the confirming write.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "299-317",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L299-L317"
     }
    ]
   },
   {
    "mode": "name_user_rename",
    "gesture": "shows",
    "short_label": "NAME USER",
    "action": "Shows the target slot and editable name before the confirming write.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "299-317",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L299-L317"
     }
    ]
   },
   {
    "mode": "name_project_save",
    "gesture": "shows",
    "short_label": "SAVE PROJECT",
    "action": "Shows the target slot and editable name before the confirming write.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "299-317",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L299-L317"
     }
    ]
   },
   {
    "mode": "name_project_rename",
    "gesture": "shows",
    "short_label": "NAME PROJECT",
    "action": "Shows the target slot and editable name before the confirming write.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "299-317",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L299-L317"
     }
    ]
   }
  ],
  "encoder_knob1": [
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "HOME CTRL 1",
    "action": "Changes the selected sound’s first Home control, whose job depends on its engine.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1542",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1542"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1588-1594",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1588-L1594"
     }
    ]
   },
   {
    "mode": "env",
    "gesture": "turn",
    "short_label": "ENV ATTACK",
    "action": "Sets the selected track’s attack time.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "407",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L407"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "58",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L58"
     }
    ]
   },
   {
    "mode": "env_dest",
    "gesture": "turn",
    "short_label": "ENV CUTOFF",
    "action": "Sets how far the main envelope moves cutoff.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "408",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L408"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "62",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L62"
     }
    ]
   },
   {
    "mode": "env_2",
    "gesture": "turn",
    "short_label": "ENV2 ATTACK",
    "action": "Sets the second envelope’s attack.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "409",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L409"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "133",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L133"
     }
    ]
   },
   {
    "mode": "lfo",
    "gesture": "turn",
    "short_label": "LFO RATE",
    "action": "Sets the selected track’s LFO speed.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "410",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L410"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "66",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L66"
     }
    ]
   },
   {
    "mode": "lfo_dest",
    "gesture": "turn",
    "short_label": "LFO PITCH",
    "action": "Sets the LFO pitch amount.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "411",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L411"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "70",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L70"
     }
    ]
   },
   {
    "mode": "fx",
    "gesture": "turn",
    "short_label": "DIST",
    "action": "Sets the track’s distortion amount.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "413",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L413"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "90",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L90"
     }
    ]
   },
   {
    "mode": "drive",
    "gesture": "turn",
    "short_label": "DRIVE DIST",
    "action": "Sets the track’s distortion amount.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "414",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L414"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "90",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L90"
     }
    ]
   },
   {
    "mode": "slicer",
    "gesture": "turn",
    "short_label": "SLICER",
    "action": "Chooses OFF, GATE or STUT for the track’s rhythmic slicer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "415",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L415"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "102",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L102"
     }
    ]
   },
   {
    "mode": "duck",
    "gesture": "turn",
    "short_label": "BY",
    "action": "Chooses the track that triggers ducking, skipping the track being edited.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "416",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L416"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "128",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L128"
     }
    ]
   },
   {
    "mode": "scale",
    "gesture": "turn",
    "short_label": "ROOT",
    "action": "Chooses the scale’s root note.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "417",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L417"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "82",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L82"
     }
    ]
   },
   {
    "mode": "chord",
    "gesture": "turn",
    "short_label": "CHORD",
    "action": "Chooses OFF, a scale chord or a fixed chord shape.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "418",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L418"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "120",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L120"
     }
    ]
   },
   {
    "mode": "voice",
    "gesture": "turn",
    "short_label": "VOICE",
    "action": "Chooses POLY, MONO, LEG or UNI voices.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "433",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L433"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "94",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L94"
     }
    ]
   },
   {
    "mode": "voice_2",
    "gesture": "turn",
    "short_label": "ALLOC",
    "action": "Chooses ROT or REUSE voice allocation.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "434",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L434"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L98"
     }
    ]
   },
   {
    "mode": "delay",
    "gesture": "turn",
    "short_label": "TIME",
    "action": "Chooses the shared delay subdivision.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "436",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L436"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "148",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L148"
     }
    ]
   },
   {
    "mode": "reverb",
    "gesture": "turn",
    "short_label": "TYPE",
    "action": "Chooses ROOM, SPRING or HALL reverb for every track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "437",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L437"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "169",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L169"
     }
    ]
   },
   {
    "mode": "chorus",
    "gesture": "turn",
    "short_label": "RATE",
    "action": "Sets shared chorus, flanger or phaser speed.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "438",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L438"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "154",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L154"
     }
    ]
   },
   {
    "mode": "global",
    "gesture": "turn",
    "short_label": "BPM",
    "action": "Sets the internal tempo from 40 to 240 BPM.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "439",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L439"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "144",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L144"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "turn",
    "short_label": "ARP MODE",
    "action": "Chooses OFF or an arpeggiator mode.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "444",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L444"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "74",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L74"
     }
    ]
   },
   {
    "mode": "arp_2",
    "gesture": "turn",
    "short_label": "ARP SWING",
    "action": "Sets the arpeggiator swing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "445",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L445"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "78",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L78"
     }
    ]
   },
   {
    "mode": "pattern",
    "gesture": "turn",
    "short_label": "LENGTH",
    "action": "Sets the pattern length from one to 64 steps without clearing steps beyond it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "451",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L451"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "86",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L86"
     }
    ]
   },
   {
    "mode": "home_analog",
    "gesture": "turn",
    "short_label": "ANLG CUTOFF",
    "action": "Changes ANALOG cutoff for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_analog.c",
      "lines": "127",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_analog.c#L127"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_analog.c",
      "lines": "118",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_analog.c#L118"
     }
    ]
   },
   {
    "mode": "edit_analog_1",
    "gesture": "turn",
    "short_label": "ANALOG WAVE",
    "action": "Changes ANALOG wave for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_analog.c",
      "lines": "114",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_analog.c#L114"
     }
    ]
   },
   {
    "mode": "edit_analog_2",
    "gesture": "turn",
    "short_label": "ANLG CUTOFF",
    "action": "Changes ANALOG cutoff for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_analog.c",
      "lines": "118",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_analog.c#L118"
     }
    ]
   },
   {
    "mode": "home_drum",
    "gesture": "turn",
    "short_label": "DRUM PITCH",
    "action": "Changes DRUM pitch for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "343",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L343"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "330",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L330"
     }
    ]
   },
   {
    "mode": "edit_drum_1",
    "gesture": "turn",
    "short_label": "DRUM KIT",
    "action": "Changes DRUM kit for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "329",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L329"
     }
    ]
   },
   {
    "mode": "edit_drum_2",
    "gesture": "turn",
    "short_label": "DRUM SNAP",
    "action": "Changes DRUM snap for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "333",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L333"
     }
    ]
   },
   {
    "mode": "home_drumx",
    "gesture": "turn",
    "short_label": "DRUM-X MORPH",
    "action": "Changes DRUM-X morph for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drumx.c",
      "lines": "266",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drumx.c#L266"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drumx.c",
      "lines": "252",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drumx.c#L252"
     }
    ]
   },
   {
    "mode": "edit_drumx_1",
    "gesture": "turn",
    "short_label": "DRUM-X MORPH",
    "action": "Changes DRUM-X morph for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drumx.c",
      "lines": "252",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drumx.c#L252"
     }
    ]
   },
   {
    "mode": "edit_drumx_2",
    "gesture": "turn",
    "short_label": "DRUM-X NOISE",
    "action": "Changes DRUM-X noise for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drumx.c",
      "lines": "256",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drumx.c#L256"
     }
    ]
   },
   {
    "mode": "home_fm6",
    "gesture": "turn",
    "short_label": "FM6 MOD LVL",
    "action": "Changes FM6 mod lvl for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_fm6.c",
      "lines": "421",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_fm6.c#L421"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_fm6.c",
      "lines": "410",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_fm6.c#L410"
     }
    ]
   },
   {
    "mode": "edit_fm6_1",
    "gesture": "turn",
    "short_label": "FM6 ALGO",
    "action": "Changes FM6 algo for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_fm6.c",
      "lines": "408",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_fm6.c#L408"
     }
    ]
   },
   {
    "mode": "edit_fm6_2",
    "gesture": "turn",
    "short_label": "FM6 MOD ENV",
    "action": "Changes FM6 mod env for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_fm6.c",
      "lines": "412",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_fm6.c#L412"
     }
    ]
   },
   {
    "mode": "home_voice",
    "gesture": "turn",
    "short_label": "VOICE VOWEL",
    "action": "Changes VOICE vowel for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_formant.c",
      "lines": "236",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_formant.c#L236"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_formant.c",
      "lines": "223",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_formant.c#L223"
     }
    ]
   },
   {
    "mode": "edit_voice_1",
    "gesture": "turn",
    "short_label": "VOICE VOWEL",
    "action": "Changes VOICE vowel for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_formant.c",
      "lines": "223",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_formant.c#L223"
     }
    ]
   },
   {
    "mode": "edit_voice_2",
    "gesture": "turn",
    "short_label": "VOICE BUZZ",
    "action": "Changes VOICE buzz for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_formant.c",
      "lines": "227",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_formant.c#L227"
     }
    ]
   },
   {
    "mode": "home_grain",
    "gesture": "turn",
    "short_label": "GRAIN POS",
    "action": "Changes GRAIN pos for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_grain.c",
      "lines": "471",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_grain.c#L471"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_grain.c",
      "lines": "459",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_grain.c#L459"
     }
    ]
   },
   {
    "mode": "edit_grain_1",
    "gesture": "turn",
    "short_label": "GRAIN SOURCE",
    "action": "Changes GRAIN source for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_grain.c",
      "lines": "458",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_grain.c#L458"
     }
    ]
   },
   {
    "mode": "edit_grain_2",
    "gesture": "turn",
    "short_label": "GRAIN PITCH",
    "action": "Changes GRAIN pitch for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_grain.c",
      "lines": "462",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_grain.c#L462"
     }
    ]
   },
   {
    "mode": "home_lofi",
    "gesture": "turn",
    "short_label": "LOFI WAVE",
    "action": "Changes LOFI wave for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_lofi.c",
      "lines": "238",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_lofi.c#L238"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_lofi.c",
      "lines": "226",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_lofi.c#L226"
     }
    ]
   },
   {
    "mode": "edit_lofi_1",
    "gesture": "turn",
    "short_label": "LOFI CHIP",
    "action": "Changes LOFI chip for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_lofi.c",
      "lines": "225",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_lofi.c#L225"
     }
    ]
   },
   {
    "mode": "edit_lofi_2",
    "gesture": "turn",
    "short_label": "LOFI SWEEP",
    "action": "Changes LOFI sweep for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_lofi.c",
      "lines": "229",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_lofi.c#L229"
     }
    ]
   },
   {
    "mode": "home_noise",
    "gesture": "turn",
    "short_label": "NOISE CUTOFF",
    "action": "Changes NOISE cutoff for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_noise.c",
      "lines": "275",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_noise.c#L275"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_noise.c",
      "lines": "264",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_noise.c#L264"
     }
    ]
   },
   {
    "mode": "edit_noise_1",
    "gesture": "turn",
    "short_label": "NOISE MODE",
    "action": "Changes NOISE mode for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_noise.c",
      "lines": "262",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_noise.c#L262"
     }
    ]
   },
   {
    "mode": "edit_noise_2",
    "gesture": "turn",
    "short_label": "NOISE KEYTRK",
    "action": "Changes NOISE keytrk for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_noise.c",
      "lines": "266",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_noise.c#L266"
     }
    ]
   },
   {
    "mode": "home_phase",
    "gesture": "turn",
    "short_label": "PHASE DCW",
    "action": "Changes PHASE dcw for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_phase.c",
      "lines": "205",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phase.c#L205"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_phase.c",
      "lines": "194",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phase.c#L194"
     }
    ]
   },
   {
    "mode": "edit_phase_1",
    "gesture": "turn",
    "short_label": "PHASE WAVE",
    "action": "Changes PHASE wave for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_phase.c",
      "lines": "192",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phase.c#L192"
     }
    ]
   },
   {
    "mode": "edit_phase_2",
    "gesture": "turn",
    "short_label": "PHASE DETUNE",
    "action": "Changes PHASE detune for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_phase.c",
      "lines": "196",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phase.c#L196"
     }
    ]
   },
   {
    "mode": "home_phys",
    "gesture": "turn",
    "short_label": "PHYS STRUCT",
    "action": "Changes PHYS struct for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_phys.c",
      "lines": "251",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phys.c#L251"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_phys.c",
      "lines": "239",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phys.c#L239"
     }
    ]
   },
   {
    "mode": "edit_phys_1",
    "gesture": "turn",
    "short_label": "PHYS MODEL",
    "action": "Changes PHYS model for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_phys.c",
      "lines": "238",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phys.c#L238"
     }
    ]
   },
   {
    "mode": "edit_phys_2",
    "gesture": "turn",
    "short_label": "PHYS POS",
    "action": "Changes PHYS pos for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_phys.c",
      "lines": "242",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phys.c#L242"
     }
    ]
   },
   {
    "mode": "home_sample",
    "gesture": "turn",
    "short_label": "SAMPLE SET",
    "action": "Changes SAMPLE set for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_sample.c",
      "lines": "261",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_sample.c#L261"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_sample.c",
      "lines": "248",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_sample.c#L248"
     }
    ]
   },
   {
    "mode": "edit_sample_1",
    "gesture": "turn",
    "short_label": "SAMPLE SET",
    "action": "Changes SAMPLE set for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_sample.c",
      "lines": "248",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_sample.c#L248"
     }
    ]
   },
   {
    "mode": "edit_sample_2",
    "gesture": "turn",
    "short_label": "SMP CUTOFF",
    "action": "Changes SAMPLE cutoff for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_sample.c",
      "lines": "252",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_sample.c#L252"
     }
    ]
   },
   {
    "mode": "home_slice",
    "gesture": "turn",
    "short_label": "SLICE SOURCE",
    "action": "Changes SLICE source for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_slice.c",
      "lines": "655",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_slice.c#L655"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_slice.c",
      "lines": "642",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_slice.c#L642"
     }
    ]
   },
   {
    "mode": "edit_slice_1",
    "gesture": "turn",
    "short_label": "SLICE SOURCE",
    "action": "Changes SLICE source for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_slice.c",
      "lines": "642",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_slice.c#L642"
     }
    ]
   },
   {
    "mode": "edit_slice_2",
    "gesture": "turn",
    "short_label": "SLICE MODE",
    "action": "Changes SLICE mode for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_slice.c",
      "lines": "646",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_slice.c#L646"
     }
    ]
   },
   {
    "mode": "home_trio",
    "gesture": "turn",
    "short_label": "TRIO CUTOFF",
    "action": "Changes TRIO cutoff for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_trio.c",
      "lines": "378",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_trio.c#L378"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_trio.c",
      "lines": "370",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_trio.c#L370"
     }
    ]
   },
   {
    "mode": "edit_trio_1",
    "gesture": "turn",
    "short_label": "TRIO WAVE",
    "action": "Changes TRIO wave for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_trio.c",
      "lines": "365",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_trio.c#L365"
     }
    ]
   },
   {
    "mode": "edit_trio_2",
    "gesture": "turn",
    "short_label": "TRIO MODE",
    "action": "Changes TRIO mode for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_trio.c",
      "lines": "369",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_trio.c#L369"
     }
    ]
   },
   {
    "mode": "home_wheel",
    "gesture": "turn",
    "short_label": "WHEEL REG",
    "action": "Changes WHEEL reg for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_wheel.c",
      "lines": "299",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_wheel.c#L299"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_wheel.c",
      "lines": "286",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_wheel.c#L286"
     }
    ]
   },
   {
    "mode": "edit_wheel_1",
    "gesture": "turn",
    "short_label": "WHEEL REG",
    "action": "Changes WHEEL reg for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_wheel.c",
      "lines": "286",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_wheel.c#L286"
     }
    ]
   },
   {
    "mode": "edit_wheel_2",
    "gesture": "turn",
    "short_label": "WHEEL PERC",
    "action": "Changes WHEEL perc for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_wheel.c",
      "lines": "290",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_wheel.c#L290"
     }
    ]
   },
   {
    "mode": "home_phys",
    "gesture": "turn",
    "short_label": "PHYS HARM",
    "action": "With MODEL at MEMB, sets membrane harmonics instead of structure.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_phys.c",
      "lines": "60-75",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phys.c#L60-L75"
     }
    ]
   },
   {
    "mode": "home_phys",
    "gesture": "turn",
    "short_label": "PHYS CHRD",
    "action": "With MODEL at SYMP, chooses the sympathetic-string chord instead of structure.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_phys.c",
      "lines": "60-81",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phys.c#L60-L81"
     }
    ]
   },
   {
    "mode": "edit_phys_2",
    "gesture": "turn",
    "short_label": "PHYS SYMP",
    "action": "With MODEL at SYMP, sets sympathetic-string strength instead of position.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_phys.c",
      "lines": "60-75",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phys.c#L60-L75"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn",
    "short_label": "STEP",
    "action": "Moves the cursor within the pattern.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "610-651",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L610-L651"
     }
    ]
   },
   {
    "mode": "roll",
    "gesture": "turn",
    "short_label": "STEP",
    "action": "Moves the cursor within the pattern.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "610-651",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L610-L651"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn",
    "short_label": "STEP",
    "action": "Moves the cursor within the pattern.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "479-490",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L479-L490"
     }
    ]
   },
   {
    "mode": "chance",
    "gesture": "turn",
    "short_label": "STEP",
    "action": "Moves the cursor within the pattern.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "715-725",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L715-L725"
     }
    ]
   },
   {
    "mode": "seq_play",
    "gesture": "turn",
    "short_label": "STEP",
    "action": "Moves the cursor within the pattern.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "654-734",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L654-L734"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "turn",
    "short_label": "TRACK LEVEL",
    "action": "Sets the selected track’s level.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "382-408",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L382-L408"
     }
    ]
   },
   {
    "mode": "mod",
    "gesture": "turn",
    "short_label": "MOD SLOT",
    "action": "Chooses one of four modulation slots.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "809-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L809-L820"
     }
    ]
   },
   {
    "mode": "lanes",
    "gesture": "turn",
    "short_label": "DRUM LANE",
    "action": "Chooses the DRUM lane being edited.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "749-752",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L749-L752"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "461-463",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L461-L463"
     }
    ]
   },
   {
    "mode": "presets",
    "gesture": "turn",
    "short_label": "SOUND LIST",
    "action": "Loads the next or previous LIST sound, keeping steps and mix but removing old engine-control and drum-lane-level automation and locks if the engine changes, while factory DRUM-X kit sounds replace the shared kit except OWN KIT and HADRON KIT; SAVE held can undo the load.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-778",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L762-L778"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1323-1324",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1323-L1324"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1354-1355",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1354-L1355"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drumx.c",
      "lines": "167-170",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drumx.c#L167-L170"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drumx.c",
      "lines": "244-245",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drumx.c#L244-L245"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/motion.c",
      "lines": "374-398",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/motion.c#L374-L398"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1042-1049",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1042-L1049"
     }
    ]
   },
   {
    "mode": "user",
    "gesture": "turn",
    "short_label": "USER SLOT",
    "action": "Chooses a user sound slot.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "787-802",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L787-L802"
     }
    ]
   },
   {
    "mode": "pool",
    "gesture": "turn",
    "short_label": "POOL PATTERN",
    "action": "Chooses a pattern from 01 to 64.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "794-807",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L794-L807"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "turn",
    "short_label": "PROJECT SLOT",
    "action": "Chooses project A, B, C or D.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "794-797",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L794-L797"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "turn",
    "short_label": "SONG ENTRY",
    "action": "Chooses the selected track’s entry A through P.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "672-707",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L672-L707"
     }
    ]
   },
   {
    "mode": "automation",
    "gesture": "turn",
    "short_label": "EVENT ROW",
    "action": "Chooses the top settings row, a stored record or + ADD LOCK.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "737-739",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L737-L739"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_events.c",
      "lines": "122-214",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_events.c#L122-L214"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn",
    "short_label": "STEP LOCK",
    "action": "With one or more editable steps held, adds or changes their lock for this knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern is saved later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "568-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L568-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "609-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L609-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn",
    "short_label": "STEP LOCK",
    "action": "With one or more editable steps held, adds or changes their lock for this knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern is saved later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "568-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L568-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "609-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L609-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "turn",
    "short_label": "WAKE",
    "action": "Wakes the display and consumes this gesture; PLAY can still stop a running transport, and MASTER does not wake the screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1198-1201",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1198-L1201"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "turn",
    "short_label": "FILTER",
    "action": "Moves left toward low-pass filtering or right toward high-pass filtering.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "541-548",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L541-L548"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "61-62",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L61-L62"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "351-360",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L351-L360"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "636-651",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L636-L651"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "turn",
    "short_label": "FILTER",
    "action": "Moves left toward low-pass filtering or right toward high-pass filtering.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "541-548",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L541-L548"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "61-62",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L61-L62"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "351-360",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L351-L360"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "636-651",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L636-L651"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "turn",
    "short_label": "LEVEL 1",
    "action": "Changes the first displayed track’s level and records the move when recording is enabled.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "549-555",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L549-L555"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "turn",
    "short_label": "ROOT",
    "action": "Changes the root note.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "65-69",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L65-L69"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "576-585",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L576-L585"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "turn",
    "short_label": "ENGINE",
    "action": "Chooses an allowed engine, keeping the edited sound if that engine is already selected; changing it loads its first sound in memory and preserves steps but removes old engine-control and drum-lane-level automation and locks, with SAVE-held undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "556-563",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L556-L563"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/motion.c",
      "lines": "374-398",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/motion.c#L374-L398"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1042-1049",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1042-L1049"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "317-330",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L317-L330"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "turn",
    "short_label": "LENGTH",
    "action": "Changes sequence length.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "67-69",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L67-L69"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "576-585",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L576-L585"
     }
    ]
   },
   {
    "mode": "layer_seq_drum",
    "gesture": "turn",
    "short_label": "LENGTH",
    "action": "Changes sequence length.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "67-69",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L67-L69"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "576-585",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L576-L585"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "turn",
    "short_label": "CLICK",
    "action": "Chooses click OFF, REC or ON, saving preferences when the layer closes or after playback stops.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "568-575",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L568-L575"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "151-163",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L151-L163"
     }
    ]
   },
   {
    "mode": "layer_perf_track",
    "gesture": "turn",
    "short_label": "TONE THROW",
    "action": "Temporarily offsets the selected sound’s tone or filter and glides back over a bar after the knob rests, without saving the offset.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/throw.c",
      "lines": "59-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/throw.c#L59-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/throw.c",
      "lines": "21-47",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/throw.c#L21-L47"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "turn",
    "short_label": "TONE THROW",
    "action": "Temporarily offsets the selected sound’s tone or filter and glides back over a bar after the knob rests, without saving the offset.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/throw.c",
      "lines": "59-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/throw.c#L59-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/throw.c",
      "lines": "21-47",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/throw.c#L21-L47"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "turn",
    "short_label": "MOVE CURSOR",
    "action": "Moves the cursor through the draft name.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "191-204",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L191-L204"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "turn",
    "short_label": "MOVE CURSOR",
    "action": "Moves the cursor through the draft name.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "191-204",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L191-L204"
     }
    ]
   },
   {
    "mode": "fmop_tone",
    "gesture": "turn",
    "short_label": "OP OUTPUT",
    "action": "Sets the selected operator's output level in the track’s patch memory; it is saved later with the project or a user sound, without a separate undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "31",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L31"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "174-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L174-L209"
     }
    ]
   },
   {
    "mode": "fmop_env1",
    "gesture": "turn",
    "short_label": "OP RATE 1",
    "action": "Sets the selected operator's first envelope rate in the track’s patch memory; it is saved later with the project or a user sound, without a separate undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "32",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L32"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "174-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L174-L209"
     }
    ]
   },
   {
    "mode": "fmop_env2",
    "gesture": "turn",
    "short_label": "OP RATE 3",
    "action": "Sets the selected operator's third envelope rate in the track’s patch memory; it is saved later with the project or a user sound, without a separate undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "33-34",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L33-L34"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "174-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L174-L209"
     }
    ]
   },
   {
    "mode": "fmop_keys",
    "gesture": "turn",
    "short_label": "OP L CURVE",
    "action": "Chooses the level curve below the keyboard breakpoint.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "35",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L35"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "174-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L174-L209"
     }
    ]
   },
   {
    "mode": "fmop_more",
    "gesture": "turn",
    "short_label": "OP BREAK",
    "action": "Sets the selected operator's keyboard breakpoint in the track’s patch memory; it is saved later with the project or a user sound, without a separate undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "36",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L36"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "174-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L174-L209"
     }
    ]
   },
   {
    "mode": "fmall_algo",
    "gesture": "turn",
    "short_label": "ALGO",
    "action": "Sets the patch's algorithm from the sounding value and returns the EDIT 1 algorithm macro to neutral in the track’s patch memory; it is saved later with the project or a user sound, without a separate undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "37",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L37"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "174-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L174-L209"
     }
    ]
   },
   {
    "mode": "fmall_pitch1",
    "gesture": "turn",
    "short_label": "PITCH RATE 1",
    "action": "Sets the first pitch envelope rate in the track’s patch memory; it is saved later with the project or a user sound, without a separate undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "38-39",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L38-L39"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "174-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L174-L209"
     }
    ]
   },
   {
    "mode": "fmall_pitch2",
    "gesture": "turn",
    "short_label": "PITCH RATE 3",
    "action": "Sets the third pitch envelope rate in the track’s patch memory; it is saved later with the project or a user sound, without a separate undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "40-41",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L40-L41"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "174-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L174-L209"
     }
    ]
   },
   {
    "mode": "fmall_lfo",
    "gesture": "turn",
    "short_label": "FM LFO WAVE",
    "action": "Chooses the patch LFO wave from triangle, falling saw, rising saw, square, sine and random.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "174-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L174-L209"
     }
    ]
   },
   {
    "mode": "fmall_depth",
    "gesture": "turn",
    "short_label": "VIBRATO",
    "action": "Sets the patch LFO pitch depth in the track’s patch memory; it is saved later with the project or a user sound, without a separate undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "43",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L43"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "174-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L174-L209"
     }
    ]
   },
   {
    "mode": "dx_osc",
    "gesture": "turn",
    "short_label": "DX PTCH A",
    "action": "Sets sound A's pitch.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "25",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L25"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "51-86",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L51-L86"
     }
    ]
   },
   {
    "mode": "dx_decay",
    "gesture": "turn",
    "short_label": "DX DCAY A",
    "action": "Sets sound A's decay.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "26",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L26"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "51-86",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L51-L86"
     }
    ]
   },
   {
    "mode": "dx_color",
    "gesture": "turn",
    "short_label": "DX COLR A",
    "action": "Sets sound A's colour.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "27",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L27"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "51-86",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L51-L86"
     }
    ]
   },
   {
    "mode": "dx_mode",
    "gesture": "turn",
    "short_label": "DX WAVE",
    "action": "Chooses SIN, FM, MTL or BEL for the chosen drum sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "28",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L28"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "51-86",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L51-L86"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "turn",
    "short_label": "SLICE",
    "action": "Chooses a slice start or the final END marker.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_slice.c",
      "lines": "125-137",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_slice.c#L125-L137"
     }
    ]
   },
   {
    "mode": "menu_display",
    "gesture": "turn",
    "short_label": "THEME",
    "action": "When THEME is selected, chooses the screen theme.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "186-190",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L186-L190"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_display",
    "gesture": "turn",
    "short_label": "LARGE",
    "action": "When LARGE is selected, sets larger control labels and values.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "63",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L63"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_display",
    "gesture": "turn",
    "short_label": "ANIM",
    "action": "When ANIM is selected, enables or disables screen animation.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "64",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L64"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_display",
    "gesture": "turn",
    "short_label": "LEDS",
    "action": "When LEDS is selected, chooses OFF, DIM LO, DIM HI or inverted idle lights.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "194",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L194"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_display",
    "gesture": "turn",
    "short_label": "SCREEN OFF",
    "action": "When SCREEN OFF is selected, sets idle screen sleep to never, 5, 15, 30 or 60 minutes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "193",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L193"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_display",
    "gesture": "turn",
    "short_label": "HINTS",
    "action": "When HINTS is selected, shows or hides the short hints and SHIFT map.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "199",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L199"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_control",
    "gesture": "turn",
    "short_label": "HOLD",
    "action": "When HOLD is selected, sets the button hold threshold to 0.3, 0.4, 0.5 or 0.6 seconds.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "192",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L192"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_control",
    "gesture": "turn",
    "short_label": "KNOB ACCEL",
    "action": "When KNOB ACCEL is selected, enables or disables faster changes during a quick knob turn.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "65",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L65"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_control",
    "gesture": "turn",
    "short_label": "BPM LOCK",
    "action": "When BPM LOCK is selected, sets whether unmodified SELECT changes pages rather than tempo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "67",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L67"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_control",
    "gesture": "turn",
    "short_label": "SCALE LEDS",
    "action": "When SCALE LEDS is selected, shows or hides the scale on melodic keys.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "70",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L70"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_control",
    "gesture": "turn",
    "short_label": "CLOCK",
    "action": "When CLOCK is selected, chooses internal, USB or TRS clock for the unit.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "196",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L196"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_control",
    "gesture": "turn",
    "short_label": "MIDI IN",
    "action": "When MIDI IN is selected, routes channels 1–6 to tracks 1–6 or every channel to the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "197",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L197"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_audio",
    "gesture": "turn",
    "short_label": "SPEAKER EQ",
    "action": "When SPEAKER EQ is selected, chooses FLAT, LOWCUT or BASS+ for speaker, headphones and USB audio.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "72-76",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L72-L76"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_audio",
    "gesture": "turn",
    "short_label": "USB LEVEL",
    "action": "When USB LEVEL is selected, makes USB audio follow MASTER or use a fixed full level.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "66",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L66"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_audio",
    "gesture": "turn",
    "short_label": "CLICK",
    "action": "When CLICK is selected, sets the metronome to OFF, REC or ON.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "195",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L195"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_audio",
    "gesture": "turn",
    "short_label": "CLICK LEVEL",
    "action": "When CLICK LEVEL is selected, sets the metronome to LOW, MID or HIGH.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "195",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L195"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_audio",
    "gesture": "turn",
    "short_label": "COUNT-IN",
    "action": "When COUNT-IN is selected, sets recording count-in to OFF, one bar or two bars.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "195",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L195"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_audio",
    "gesture": "turn",
    "short_label": "TUNE",
    "action": "When TUNE is selected, tunes the whole unit by up to 50 cents in either direction.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "198",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L198"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_system",
    "gesture": "turn",
    "short_label": "USB SERIAL",
    "action": "When USB SERIAL is selected, enables or disables the serial console, reconnecting USB after the menu closes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "85-101",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L85-L101"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_system",
    "gesture": "turn",
    "short_label": "RESTORE LAST",
    "action": "When RESTORE LAST is selected, enables or disables the music autosave and its restoration at power-on.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "69",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L69"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_system",
    "gesture": "turn",
    "short_label": "CPU",
    "action": "When CPU is selected, leaves the audio workload display unchanged.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "159-166",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L159-L166"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_system",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing on CALIBRATION, RESET SETTINGS and ABOUT.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-520",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L520"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "turn_cw",
    "short_label": "TEACH",
    "action": "When prompted for this knob, records its position and clockwise direction in the new panel mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1603-1628",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1603-L1628"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_f3",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_g3",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_a3",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_b3",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_c4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_d4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_e4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_f4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_g4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_a4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_b4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_c5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_d5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_e5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_f5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_g5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_f3",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_fs3",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_g3",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_gs3",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_a3",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_as3",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_b3",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_c4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_cs4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_d4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_ds4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_e4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_f4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_fs4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_g4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_gs4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_a4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_as4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_b4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_c5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_cs5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_d5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_ds5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_e5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_f5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_fs5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_g5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   }
  ],
  "encoder_knob2": [
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "HOME CTRL 2",
    "action": "Changes the selected sound’s second Home control, whose job depends on its engine.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1542",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1542"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1588-1594",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1588-L1594"
     }
    ]
   },
   {
    "mode": "env",
    "gesture": "turn",
    "short_label": "ENV DECAY",
    "action": "Sets its decay time.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "407",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L407"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "59",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L59"
     }
    ]
   },
   {
    "mode": "env_dest",
    "gesture": "turn",
    "short_label": "ENV PITCH",
    "action": "Sets how far the main envelope moves pitch.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "408",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L408"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "63",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L63"
     }
    ]
   },
   {
    "mode": "env_2",
    "gesture": "turn",
    "short_label": "ENV2 DECAY",
    "action": "Sets the second envelope’s decay.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "409",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L409"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "134",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L134"
     }
    ]
   },
   {
    "mode": "lfo",
    "gesture": "turn",
    "short_label": "LFO WAVE",
    "action": "Chooses SIN, TRI, SAW, SQR or S&H for its LFO.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "410",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L410"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "67",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L67"
     }
    ]
   },
   {
    "mode": "lfo_dest",
    "gesture": "turn",
    "short_label": "LFO CUTOFF",
    "action": "Sets the LFO cutoff amount.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "411",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L411"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "71",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L71"
     }
    ]
   },
   {
    "mode": "fx",
    "gesture": "turn",
    "short_label": "CHORUS",
    "action": "Sets the track’s chorus amount.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "413",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L413"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "91",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L91"
     }
    ]
   },
   {
    "mode": "drive",
    "gesture": "turn",
    "short_label": "DRIVE TYPE",
    "action": "Chooses SOFT, HARD, FOLD or BITS distortion.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "414",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L414"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "131",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L131"
     }
    ]
   },
   {
    "mode": "slicer",
    "gesture": "turn",
    "short_label": "PATTERN",
    "action": "Chooses one of sixteen slicer patterns.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "415",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L415"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "103",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L103"
     }
    ]
   },
   {
    "mode": "duck",
    "gesture": "turn",
    "short_label": "DUCK DEPTH",
    "action": "Sets the ducking depth.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "416",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L416"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "129",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L129"
     }
    ]
   },
   {
    "mode": "scale",
    "gesture": "turn",
    "short_label": "SCALE",
    "action": "Chooses the scale.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "417",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L417"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "83",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L83"
     }
    ]
   },
   {
    "mode": "chord",
    "gesture": "turn",
    "short_label": "VOICING",
    "action": "Chooses CLOSE, OPEN, INV1, INV2 or +OCT chord voicing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "418",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L418"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "121",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L121"
     }
    ]
   },
   {
    "mode": "voice",
    "gesture": "turn",
    "short_label": "GLIDE",
    "action": "Sets glide amount.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "433",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L433"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "95",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L95"
     }
    ]
   },
   {
    "mode": "voice_2",
    "gesture": "turn",
    "short_label": "UNI DETUNE",
    "action": "Sets unison detune.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "434",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L434"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "99",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L99"
     }
    ]
   },
   {
    "mode": "delay",
    "gesture": "turn",
    "short_label": "DLY FEEDBACK",
    "action": "Sets the shared delay feedback.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "436",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L436"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "149",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L149"
     }
    ]
   },
   {
    "mode": "reverb",
    "gesture": "turn",
    "short_label": "SIZE",
    "action": "Sets shared reverb size.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "437",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L437"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "152",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L152"
     }
    ]
   },
   {
    "mode": "chorus",
    "gesture": "turn",
    "short_label": "CHORUS DEPTH",
    "action": "Sets shared chorus, flanger or phaser depth.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "438",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L438"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "155",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L155"
     }
    ]
   },
   {
    "mode": "global",
    "gesture": "turn",
    "short_label": "SWING+",
    "action": "Sets the global swing added to each pattern’s own swing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "439",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L439"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "145",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L145"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "turn",
    "short_label": "ARP RATE",
    "action": "Chooses the arpeggiator subdivision.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "444",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L444"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "75",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L75"
     }
    ]
   },
   {
    "mode": "arp_2",
    "gesture": "turn",
    "short_label": "ARP CHANCE",
    "action": "Sets its note probability.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "445",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L445"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "79",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L79"
     }
    ]
   },
   {
    "mode": "pattern",
    "gesture": "turn",
    "short_label": "DIV",
    "action": "Chooses the pattern’s step subdivision.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "451",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L451"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "87",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L87"
     }
    ]
   },
   {
    "mode": "home_analog",
    "gesture": "turn",
    "short_label": "ANALOG RES",
    "action": "Changes ANALOG res for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_analog.c",
      "lines": "127",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_analog.c#L127"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_analog.c",
      "lines": "119",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_analog.c#L119"
     }
    ]
   },
   {
    "mode": "edit_analog_1",
    "gesture": "turn",
    "short_label": "ANLG DETUNE",
    "action": "Changes ANALOG detune for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_analog.c",
      "lines": "115",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_analog.c#L115"
     }
    ]
   },
   {
    "mode": "edit_analog_2",
    "gesture": "turn",
    "short_label": "ANALOG RES",
    "action": "Changes ANALOG res for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_analog.c",
      "lines": "119",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_analog.c#L119"
     }
    ]
   },
   {
    "mode": "home_drum",
    "gesture": "turn",
    "short_label": "DRUM TONE",
    "action": "Changes DRUM tone for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "343",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L343"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "331",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L331"
     }
    ]
   },
   {
    "mode": "edit_drum_1",
    "gesture": "turn",
    "short_label": "DRUM PITCH",
    "action": "Changes DRUM pitch for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "330",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L330"
     }
    ]
   },
   {
    "mode": "edit_drum_2",
    "gesture": "turn",
    "short_label": "DRUM ACCENT",
    "action": "Changes DRUM accent for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "334",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L334"
     }
    ]
   },
   {
    "mode": "home_drumx",
    "gesture": "turn",
    "short_label": "DRUM-X PITCH",
    "action": "Changes DRUM-X pitch for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drumx.c",
      "lines": "266",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drumx.c#L266"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drumx.c",
      "lines": "253",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drumx.c#L253"
     }
    ]
   },
   {
    "mode": "edit_drumx_1",
    "gesture": "turn",
    "short_label": "DRUM-X PITCH",
    "action": "Changes DRUM-X pitch for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drumx.c",
      "lines": "253",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drumx.c#L253"
     }
    ]
   },
   {
    "mode": "edit_drumx_2",
    "gesture": "turn",
    "short_label": "DRUM-X FM",
    "action": "Changes DRUM-X fm for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drumx.c",
      "lines": "257",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drumx.c#L257"
     }
    ]
   },
   {
    "mode": "home_fm6",
    "gesture": "turn",
    "short_label": "FM6 RATIO",
    "action": "Changes FM6 ratio for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_fm6.c",
      "lines": "421",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_fm6.c#L421"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_fm6.c",
      "lines": "411",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_fm6.c#L411"
     }
    ]
   },
   {
    "mode": "edit_fm6_1",
    "gesture": "turn",
    "short_label": "FM6 FEEDBACK",
    "action": "Changes FM6 feedback for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_fm6.c",
      "lines": "409",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_fm6.c#L409"
     }
    ]
   },
   {
    "mode": "edit_fm6_2",
    "gesture": "turn",
    "short_label": "FM6 VEL MOD",
    "action": "Changes FM6 vel mod for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_fm6.c",
      "lines": "413",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_fm6.c#L413"
     }
    ]
   },
   {
    "mode": "home_voice",
    "gesture": "turn",
    "short_label": "VOICE BUZZ",
    "action": "Changes VOICE buzz for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_formant.c",
      "lines": "236",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_formant.c#L236"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_formant.c",
      "lines": "227",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_formant.c#L227"
     }
    ]
   },
   {
    "mode": "edit_voice_1",
    "gesture": "turn",
    "short_label": "VOICE VOWEL2",
    "action": "Changes VOICE vowel2 for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_formant.c",
      "lines": "224",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_formant.c#L224"
     }
    ]
   },
   {
    "mode": "edit_voice_2",
    "gesture": "turn",
    "short_label": "VOICE BREATH",
    "action": "Changes VOICE breath for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_formant.c",
      "lines": "228",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_formant.c#L228"
     }
    ]
   },
   {
    "mode": "home_grain",
    "gesture": "turn",
    "short_label": "GRAIN SIZE",
    "action": "Changes GRAIN size for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_grain.c",
      "lines": "471",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_grain.c#L471"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_grain.c",
      "lines": "460",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_grain.c#L460"
     }
    ]
   },
   {
    "mode": "edit_grain_1",
    "gesture": "turn",
    "short_label": "GRAIN POS",
    "action": "Changes GRAIN pos for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_grain.c",
      "lines": "459",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_grain.c#L459"
     }
    ]
   },
   {
    "mode": "edit_grain_2",
    "gesture": "turn",
    "short_label": "GRAIN SPREAD",
    "action": "Changes GRAIN spread for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_grain.c",
      "lines": "463",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_grain.c#L463"
     }
    ]
   },
   {
    "mode": "home_lofi",
    "gesture": "turn",
    "short_label": "LOFI DUTY",
    "action": "Changes LOFI duty for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_lofi.c",
      "lines": "238",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_lofi.c#L238"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_lofi.c",
      "lines": "227",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_lofi.c#L227"
     }
    ]
   },
   {
    "mode": "edit_lofi_1",
    "gesture": "turn",
    "short_label": "LOFI WAVE",
    "action": "Changes LOFI wave for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_lofi.c",
      "lines": "226",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_lofi.c#L226"
     }
    ]
   },
   {
    "mode": "edit_lofi_2",
    "gesture": "turn",
    "short_label": "LOFI VIBRATO",
    "action": "Changes LOFI vibrato for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_lofi.c",
      "lines": "230",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_lofi.c#L230"
     }
    ]
   },
   {
    "mode": "home_noise",
    "gesture": "turn",
    "short_label": "NOISE RES",
    "action": "Changes NOISE res for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_noise.c",
      "lines": "275",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_noise.c#L275"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_noise.c",
      "lines": "265",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_noise.c#L265"
     }
    ]
   },
   {
    "mode": "edit_noise_1",
    "gesture": "turn",
    "short_label": "NOISE COLOR",
    "action": "Changes NOISE color for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_noise.c",
      "lines": "263",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_noise.c#L263"
     }
    ]
   },
   {
    "mode": "edit_noise_2",
    "gesture": "turn",
    "short_label": "DENSITY",
    "action": "Changes NOISE density for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_noise.c",
      "lines": "267",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_noise.c#L267"
     }
    ]
   },
   {
    "mode": "home_phase",
    "gesture": "turn",
    "short_label": "PHASE ENV",
    "action": "Changes PHASE env for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_phase.c",
      "lines": "205",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phase.c#L205"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_phase.c",
      "lines": "195",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phase.c#L195"
     }
    ]
   },
   {
    "mode": "edit_phase_1",
    "gesture": "turn",
    "short_label": "PHASE WAVE2",
    "action": "Changes PHASE wave2 for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_phase.c",
      "lines": "193",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phase.c#L193"
     }
    ]
   },
   {
    "mode": "edit_phase_2",
    "gesture": "turn",
    "short_label": "PHASE LINE",
    "action": "Changes PHASE line for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_phase.c",
      "lines": "197",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phase.c#L197"
     }
    ]
   },
   {
    "mode": "home_phys",
    "gesture": "turn",
    "short_label": "PHYS BRIGHT",
    "action": "Changes PHYS bright for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_phys.c",
      "lines": "251",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phys.c#L251"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_phys.c",
      "lines": "240",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phys.c#L240"
     }
    ]
   },
   {
    "mode": "edit_phys_1",
    "gesture": "turn",
    "short_label": "PHYS STRUCT",
    "action": "Changes PHYS struct for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_phys.c",
      "lines": "239",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phys.c#L239"
     }
    ]
   },
   {
    "mode": "edit_phys_2",
    "gesture": "turn",
    "short_label": "PHYS ACCENT",
    "action": "Changes PHYS accent for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_phys.c",
      "lines": "243",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phys.c#L243"
     }
    ]
   },
   {
    "mode": "home_sample",
    "gesture": "turn",
    "short_label": "CUTOFF",
    "action": "Changes SAMPLE cutoff for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_sample.c",
      "lines": "261",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_sample.c#L261"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_sample.c",
      "lines": "252",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_sample.c#L252"
     }
    ]
   },
   {
    "mode": "edit_sample_1",
    "gesture": "turn",
    "short_label": "SAMPLE PITCH",
    "action": "Changes SAMPLE pitch for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_sample.c",
      "lines": "249",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_sample.c#L249"
     }
    ]
   },
   {
    "mode": "edit_sample_2",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing in the empty column.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_sample.c",
      "lines": "253",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_sample.c#L253"
     }
    ]
   },
   {
    "mode": "home_slice",
    "gesture": "turn",
    "short_label": "SLICE DIV",
    "action": "Changes SLICE div for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_slice.c",
      "lines": "655",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_slice.c#L655"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_slice.c",
      "lines": "643",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_slice.c#L643"
     }
    ]
   },
   {
    "mode": "edit_slice_1",
    "gesture": "turn",
    "short_label": "SLICE DIV",
    "action": "Changes SLICE div for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_slice.c",
      "lines": "643",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_slice.c#L643"
     }
    ]
   },
   {
    "mode": "edit_slice_2",
    "gesture": "turn",
    "short_label": "SLICE RVRS",
    "action": "Changes SLICE rvrs for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_slice.c",
      "lines": "647",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_slice.c#L647"
     }
    ]
   },
   {
    "mode": "home_trio",
    "gesture": "turn",
    "short_label": "TRIO RES",
    "action": "Changes TRIO res for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_trio.c",
      "lines": "378",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_trio.c#L378"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_trio.c",
      "lines": "371",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_trio.c#L371"
     }
    ]
   },
   {
    "mode": "edit_trio_1",
    "gesture": "turn",
    "short_label": "TRIO PITCH2",
    "action": "Changes TRIO pitch2 for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_trio.c",
      "lines": "366",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_trio.c#L366"
     }
    ]
   },
   {
    "mode": "edit_trio_2",
    "gesture": "turn",
    "short_label": "TRIO CUTOFF",
    "action": "Changes TRIO cutoff for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_trio.c",
      "lines": "370",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_trio.c#L370"
     }
    ]
   },
   {
    "mode": "home_wheel",
    "gesture": "turn",
    "short_label": "WHEEL PERC",
    "action": "Changes WHEEL perc for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_wheel.c",
      "lines": "299",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_wheel.c#L299"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_wheel.c",
      "lines": "290",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_wheel.c#L290"
     }
    ]
   },
   {
    "mode": "edit_wheel_1",
    "gesture": "turn",
    "short_label": "WHEEL SUB",
    "action": "Changes WHEEL sub for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_wheel.c",
      "lines": "287",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_wheel.c#L287"
     }
    ]
   },
   {
    "mode": "edit_wheel_2",
    "gesture": "turn",
    "short_label": "WHEEL CLICK",
    "action": "Changes WHEEL click for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_wheel.c",
      "lines": "291",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_wheel.c#L291"
     }
    ]
   },
   {
    "mode": "home_lofi",
    "gesture": "turn",
    "short_label": "LOFI WAV#",
    "action": "With WAVE at WRAM, chooses the wave table instead of pulse duty.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_lofi.c",
      "lines": "47-56",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_lofi.c#L47-L56"
     }
    ]
   },
   {
    "mode": "edit_noise_2",
    "gesture": "turn",
    "short_label": "NOISE LEN",
    "action": "With MODE at LFSR or META, chooses the register length or metallic sequence instead of impulse density.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_noise.c",
      "lines": "20-26",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_noise.c#L20-L26"
     }
    ]
   },
   {
    "mode": "edit_phys_1",
    "gesture": "turn",
    "short_label": "PHYS HARM",
    "action": "With MODEL at MEMB, sets membrane harmonics instead of structure.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_phys.c",
      "lines": "60-75",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phys.c#L60-L75"
     }
    ]
   },
   {
    "mode": "edit_phys_1",
    "gesture": "turn",
    "short_label": "PHYS CHRD",
    "action": "With MODEL at SYMP, chooses the sympathetic-string chord instead of structure.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_phys.c",
      "lines": "60-81",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phys.c#L60-L81"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn",
    "short_label": "NOTE",
    "action": "Transposes every note in the cursor step, or adds the last played note if it is empty.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "610-651",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L610-L651"
     }
    ]
   },
   {
    "mode": "roll",
    "gesture": "turn",
    "short_label": "NOTE",
    "action": "Transposes every note in the cursor step, or adds the last played note if it is empty.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "610-651",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L610-L651"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn",
    "short_label": "LANE",
    "action": "Chooses one of the eight drum lanes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "479-490",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L479-L490"
     }
    ]
   },
   {
    "mode": "chance",
    "gesture": "turn",
    "short_label": "STEP CHANCE",
    "action": "Sets the cursor step’s chance from zero to 100 percent.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "715-725",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L715-L725"
     }
    ]
   },
   {
    "mode": "seq_play",
    "gesture": "turn",
    "short_label": "NUDGE",
    "action": "Moves the cursor step’s timing earlier or later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "654-734",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L654-L734"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "turn",
    "short_label": "TRACK PAN",
    "action": "Sets the selected track’s pan.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "382-408",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L382-L408"
     }
    ]
   },
   {
    "mode": "mod",
    "gesture": "turn",
    "short_label": "MOD SOURCE",
    "action": "Chooses the selected slot’s modulation source.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "809-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L809-L820"
     }
    ]
   },
   {
    "mode": "lanes",
    "gesture": "turn",
    "short_label": "LANE LEVEL",
    "action": "Sets that drum lane’s level.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "749-752",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L749-L752"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "461-463",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L461-L463"
     }
    ]
   },
   {
    "mode": "presets",
    "gesture": "turn",
    "short_label": "ENGINE",
    "action": "Loads an allowed engine’s first sound in memory, removing old engine-control and drum-lane-level automation and locks only if the engine changes; steps and common-control records remain, and SAVE held can undo it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-778",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L762-L778"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/motion.c",
      "lines": "374-398",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/motion.c#L374-L398"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1042-1049",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1042-L1049"
     }
    ]
   },
   {
    "mode": "user",
    "gesture": "turn",
    "short_label": "LOAD SOUND",
    "action": "Selects LOAD clockwise or drops it anticlockwise, then OCT+ loads the stored sound and removes old engine-control and drum-lane-level automation and locks if the engine changes; steps and common-control records remain, with SAVE-held undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "787-802",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L787-L802"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/motion.c",
      "lines": "374-398",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/motion.c#L374-L398"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1042-1049",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1042-L1049"
     }
    ]
   },
   {
    "mode": "pool",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing because LEN only reports the pattern’s length.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "794-807",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L794-L807"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "turn",
    "short_label": "PROJECT NAME",
    "action": "Selects NAME clockwise or drops it anticlockwise; OCT+ opens naming for the stored project.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "794-797",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L794-L797"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "turn",
    "short_label": "PATTERN PICK",
    "action": "Picks an existing pool pattern, COPY or CLEAR for the entry; OCT+ commits the choice.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "672-707",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L672-L707"
     }
    ]
   },
   {
    "mode": "automation",
    "gesture": "turn",
    "short_label": "EVENT STEP",
    "action": "Moves the record to a free step, or sets the step for + ADD LOCK.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "737-739",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L737-L739"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_events.c",
      "lines": "122-214",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_events.c#L122-L214"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn",
    "short_label": "STEP LOCK",
    "action": "With one or more editable steps held, adds or changes their lock for this knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern is saved later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "568-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L568-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "609-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L609-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn",
    "short_label": "STEP LOCK",
    "action": "With one or more editable steps held, adds or changes their lock for this knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern is saved later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "568-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L568-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "609-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L609-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "automation",
    "gesture": "turn",
    "short_label": "PLAY MOTION",
    "action": "On the top row, turns the track’s automation and locks on clockwise or off anticlockwise in memory without a question.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "737-739",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L737-L739"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_events.c",
      "lines": "134-140",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_events.c#L134-L140"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "turn",
    "short_label": "WAKE",
    "action": "Wakes the display and consumes this gesture; PLAY can still stop a running transport, and MASTER does not wake the screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1198-1201",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1198-L1201"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "turn",
    "short_label": "CRUSH",
    "action": "Adds bit and sample reduction.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "541-548",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L541-L548"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "61-62",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L61-L62"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "351-360",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L351-L360"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "636-651",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L636-L651"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "turn",
    "short_label": "CRUSH",
    "action": "Adds bit and sample reduction.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "541-548",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L541-L548"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "61-62",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L61-L62"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "351-360",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L351-L360"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "636-651",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L636-L651"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "turn",
    "short_label": "LEVEL 2",
    "action": "Changes the second displayed track’s level and records the move when recording is enabled.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "549-555",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L549-L555"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "turn",
    "short_label": "SCALE",
    "action": "Chooses the scale.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "65-69",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L65-L69"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "576-585",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L576-L585"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "turn",
    "short_label": "SOUND",
    "action": "Browses sounds within the current engine, keeping its steps and automation, while a factory DRUM-X kit preset replaces the shared kit except OWN KIT and HADRON KIT; SAVE held can undo the load.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "556-563",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L556-L563"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1323-1324",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1323-L1324"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1354-1355",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1354-L1355"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drumx.c",
      "lines": "167-170",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drumx.c#L167-L170"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drumx.c",
      "lines": "244-245",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drumx.c#L244-L245"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/motion.c",
      "lines": "374-398",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/motion.c#L374-L398"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1042-1049",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1042-L1049"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1545-1561",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1545-L1561"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "turn",
    "short_label": "DIVISION",
    "action": "Changes the sequence step division.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "67-69",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L67-L69"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "576-585",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L576-L585"
     }
    ]
   },
   {
    "mode": "layer_seq_drum",
    "gesture": "turn",
    "short_label": "DIVISION",
    "action": "Changes the sequence step division.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "67-69",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L67-L69"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "576-585",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L576-L585"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "turn",
    "short_label": "COUNT-IN",
    "action": "Chooses no count-in, one bar or two bars, saving preferences when the layer closes or after playback stops.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "568-575",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L568-L575"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "151-163",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L151-L163"
     }
    ]
   },
   {
    "mode": "layer_perf_track",
    "gesture": "turn",
    "short_label": "VERB THROW",
    "action": "Temporarily offsets selected-track reverb send and glides back over a bar after the knob rests, without saving the offset.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/throw.c",
      "lines": "59-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/throw.c#L59-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/throw.c",
      "lines": "21-47",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/throw.c#L21-L47"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "turn",
    "short_label": "VERB THROW",
    "action": "Temporarily offsets selected-track reverb send and glides back over a bar after the knob rests, without saving the offset.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/throw.c",
      "lines": "59-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/throw.c#L59-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/throw.c",
      "lines": "21-47",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/throw.c#L21-L47"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "turn",
    "short_label": "CHARACTER",
    "action": "Changes the character at the cursor or appends one at the end.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "191-204",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L191-L204"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "turn",
    "short_label": "CHARACTER",
    "action": "Changes the character at the cursor or appends one at the end.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "191-204",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L191-L204"
     }
    ]
   },
   {
    "mode": "fmop_tone",
    "gesture": "turn",
    "short_label": "OP RATIO",
    "action": "Chooses a pitch ratio from ×0.5 to ×31 or a fixed frequency range of 1, 10, 100 or 1K Hz.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "31",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L31"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "174-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L174-L209"
     }
    ]
   },
   {
    "mode": "fmop_env1",
    "gesture": "turn",
    "short_label": "OP LEVEL 1",
    "action": "Sets the selected operator's first envelope level in the track’s patch memory; it is saved later with the project or a user sound, without a separate undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "32",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L32"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "174-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L174-L209"
     }
    ]
   },
   {
    "mode": "fmop_env2",
    "gesture": "turn",
    "short_label": "OP LEVEL 3",
    "action": "Sets the selected operator's third envelope level in the track’s patch memory; it is saved later with the project or a user sound, without a separate undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "33-34",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L33-L34"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "174-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L174-L209"
     }
    ]
   },
   {
    "mode": "fmop_keys",
    "gesture": "turn",
    "short_label": "OP L DEPTH",
    "action": "Sets the level scaling depth below the keyboard breakpoint in the track’s patch memory; it is saved later with the project or a user sound, without a separate undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "35",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L35"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "174-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L174-L209"
     }
    ]
   },
   {
    "mode": "fmop_more",
    "gesture": "turn",
    "short_label": "OP KEY RATE",
    "action": "Sets how the selected operator's envelope rate follows note pitch in the track’s patch memory; it is saved later with the project or a user sound, without a separate undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "36",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L36"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "174-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L174-L209"
     }
    ]
   },
   {
    "mode": "fmall_algo",
    "gesture": "turn",
    "short_label": "FM FEEDBACK",
    "action": "Sets the patch's feedback from the sounding value and returns the EDIT 1 feedback macro to zero in the track’s patch memory; it is saved later with the project or a user sound, without a separate undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "37",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L37"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "174-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L174-L209"
     }
    ]
   },
   {
    "mode": "fmall_pitch1",
    "gesture": "turn",
    "short_label": "PITCH 1",
    "action": "Sets the first pitch envelope level in the track’s patch memory; it is saved later with the project or a user sound, without a separate undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "38-39",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L38-L39"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "174-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L174-L209"
     }
    ]
   },
   {
    "mode": "fmall_pitch2",
    "gesture": "turn",
    "short_label": "PITCH 3",
    "action": "Sets the third pitch envelope level in the track’s patch memory; it is saved later with the project or a user sound, without a separate undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "40-41",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L40-L41"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "174-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L174-L209"
     }
    ]
   },
   {
    "mode": "fmall_lfo",
    "gesture": "turn",
    "short_label": "FM LFO RATE",
    "action": "Sets the patch LFO speed in the track’s patch memory; it is saved later with the project or a user sound, without a separate undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "174-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L174-L209"
     }
    ]
   },
   {
    "mode": "fmall_depth",
    "gesture": "turn",
    "short_label": "VIB SENS",
    "action": "Sets the patch's pitch modulation sensitivity in the track’s patch memory; it is saved later with the project or a user sound, without a separate undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "43",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L43"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "174-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L174-L209"
     }
    ]
   },
   {
    "mode": "dx_osc",
    "gesture": "turn",
    "short_label": "DX PTCH B",
    "action": "Sets sound B's pitch.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "25",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L25"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "51-86",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L51-L86"
     }
    ]
   },
   {
    "mode": "dx_decay",
    "gesture": "turn",
    "short_label": "DX DCAY B",
    "action": "Sets sound B's decay.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "26",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L26"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "51-86",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L51-L86"
     }
    ]
   },
   {
    "mode": "dx_color",
    "gesture": "turn",
    "short_label": "DX COLR B",
    "action": "Sets sound B's colour.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "27",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L27"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "51-86",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L51-L86"
     }
    ]
   },
   {
    "mode": "dx_mode",
    "gesture": "turn",
    "short_label": "DX FILTER",
    "action": "Chooses low-pass, band-pass or high-pass filtering for the chosen drum sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "28",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L28"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "51-86",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L51-L86"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "turn",
    "short_label": "POSITION",
    "action": "Moves the chosen boundary on a user sample, applying it now and saving after leaving SLICES with the transport stopped, without a question or slice undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_slice.c",
      "lines": "139-153",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_slice.c#L139-L153"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_slice.c",
      "lines": "78-123",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_slice.c#L78-L123"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/slice_store.c",
      "lines": "88-105",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/slice_store.c#L88-L105"
     }
    ]
   },
   {
    "mode": "menu_display",
    "gesture": "turn",
    "short_label": "THEME",
    "action": "When THEME is selected, chooses the screen theme.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "186-190",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L186-L190"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_display",
    "gesture": "turn",
    "short_label": "LARGE",
    "action": "When LARGE is selected, sets larger control labels and values.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "63",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L63"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_display",
    "gesture": "turn",
    "short_label": "ANIM",
    "action": "When ANIM is selected, enables or disables screen animation.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "64",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L64"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_display",
    "gesture": "turn",
    "short_label": "LEDS",
    "action": "When LEDS is selected, chooses OFF, DIM LO, DIM HI or inverted idle lights.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "194",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L194"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_display",
    "gesture": "turn",
    "short_label": "SCREEN OFF",
    "action": "When SCREEN OFF is selected, sets idle screen sleep to never, 5, 15, 30 or 60 minutes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "193",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L193"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_display",
    "gesture": "turn",
    "short_label": "HINTS",
    "action": "When HINTS is selected, shows or hides the short hints and SHIFT map.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "199",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L199"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_control",
    "gesture": "turn",
    "short_label": "HOLD",
    "action": "When HOLD is selected, sets the button hold threshold to 0.3, 0.4, 0.5 or 0.6 seconds.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "192",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L192"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_control",
    "gesture": "turn",
    "short_label": "KNOB ACCEL",
    "action": "When KNOB ACCEL is selected, enables or disables faster changes during a quick knob turn.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "65",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L65"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_control",
    "gesture": "turn",
    "short_label": "BPM LOCK",
    "action": "When BPM LOCK is selected, sets whether unmodified SELECT changes pages rather than tempo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "67",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L67"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_control",
    "gesture": "turn",
    "short_label": "SCALE LEDS",
    "action": "When SCALE LEDS is selected, shows or hides the scale on melodic keys.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "70",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L70"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_control",
    "gesture": "turn",
    "short_label": "CLOCK",
    "action": "When CLOCK is selected, chooses internal, USB or TRS clock for the unit.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "196",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L196"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_control",
    "gesture": "turn",
    "short_label": "MIDI IN",
    "action": "When MIDI IN is selected, routes channels 1–6 to tracks 1–6 or every channel to the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "197",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L197"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_audio",
    "gesture": "turn",
    "short_label": "SPEAKER EQ",
    "action": "When SPEAKER EQ is selected, chooses FLAT, LOWCUT or BASS+ for speaker, headphones and USB audio.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "72-76",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L72-L76"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_audio",
    "gesture": "turn",
    "short_label": "USB LEVEL",
    "action": "When USB LEVEL is selected, makes USB audio follow MASTER or use a fixed full level.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "66",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L66"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_audio",
    "gesture": "turn",
    "short_label": "CLICK",
    "action": "When CLICK is selected, sets the metronome to OFF, REC or ON.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "195",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L195"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_audio",
    "gesture": "turn",
    "short_label": "CLICK LEVEL",
    "action": "When CLICK LEVEL is selected, sets the metronome to LOW, MID or HIGH.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "195",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L195"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_audio",
    "gesture": "turn",
    "short_label": "COUNT-IN",
    "action": "When COUNT-IN is selected, sets recording count-in to OFF, one bar or two bars.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "195",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L195"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_audio",
    "gesture": "turn",
    "short_label": "TUNE",
    "action": "When TUNE is selected, tunes the whole unit by up to 50 cents in either direction.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "198",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L198"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_system",
    "gesture": "turn",
    "short_label": "USB SERIAL",
    "action": "When USB SERIAL is selected, enables or disables the serial console, reconnecting USB after the menu closes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "85-101",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L85-L101"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_system",
    "gesture": "turn",
    "short_label": "RESTORE LAST",
    "action": "When RESTORE LAST is selected, enables or disables the music autosave and its restoration at power-on.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "69",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L69"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_system",
    "gesture": "turn",
    "short_label": "CPU",
    "action": "When CPU is selected, leaves the audio workload display unchanged.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "159-166",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L159-L166"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_system",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing on CALIBRATION, RESET SETTINGS and ABOUT.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-520",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L520"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "turn_cw",
    "short_label": "TEACH",
    "action": "When prompted for this knob, records its position and clockwise direction in the new panel mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1603-1628",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1603-L1628"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_f3",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_g3",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_a3",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_b3",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_c4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_d4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_e4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_f4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_g4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_a4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_b4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_c5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_d5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_e5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_f5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_g5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_f3",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_fs3",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_g3",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_gs3",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_a3",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_as3",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_b3",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_c4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_cs4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_d4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_ds4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_e4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_f4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_fs4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_g4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_gs4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_a4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_as4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_b4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_c5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_cs5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_d5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_ds5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_e5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_f5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_fs5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_g5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   }
  ],
  "encoder_knob3": [
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "HOME CTRL 3",
    "action": "Changes the selected sound’s third Home control, whose job depends on its engine.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1542",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1542"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1588-1594",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1588-L1594"
     }
    ]
   },
   {
    "mode": "env",
    "gesture": "turn",
    "short_label": "ENV SUSTAIN",
    "action": "Sets its sustain level.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "407",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L407"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "60",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L60"
     }
    ]
   },
   {
    "mode": "env_dest",
    "gesture": "turn",
    "short_label": "ENV SHAPE",
    "action": "Sets how far the main envelope moves shape.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "408",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L408"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "64",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L64"
     }
    ]
   },
   {
    "mode": "env_2",
    "gesture": "turn",
    "short_label": "ENV2 SUSTAIN",
    "action": "Sets the second envelope’s sustain.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "409",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L409"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "135",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L135"
     }
    ]
   },
   {
    "mode": "lfo",
    "gesture": "turn",
    "short_label": "LFO PHASE",
    "action": "Sets its LFO start phase.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "410",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L410"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "68",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L68"
     }
    ]
   },
   {
    "mode": "lfo_dest",
    "gesture": "turn",
    "short_label": "LFO SHAPE",
    "action": "Sets the LFO shape amount.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "411",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L411"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "72",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L72"
     }
    ]
   },
   {
    "mode": "fx",
    "gesture": "turn",
    "short_label": "DELAY",
    "action": "Sets its delay send.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "413",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L413"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "92",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L92"
     }
    ]
   },
   {
    "mode": "drive",
    "gesture": "turn",
    "short_label": "DRIVE TONE",
    "action": "Adjusts the tone after distortion.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "414",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L414"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "132",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L132"
     }
    ]
   },
   {
    "mode": "slicer",
    "gesture": "turn",
    "short_label": "RATE",
    "action": "Chooses the slicer subdivision.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "415",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L415"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "104",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L104"
     }
    ]
   },
   {
    "mode": "duck",
    "gesture": "turn",
    "short_label": "RELEASE",
    "action": "Sets how long the ducked track takes to recover.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "416",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L416"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "130",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L130"
     }
    ]
   },
   {
    "mode": "scale",
    "gesture": "turn",
    "short_label": "QUANTIZE",
    "action": "Chooses chromatic keys, SNAP, WHITE or SEQ scale mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "417",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L417"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "84",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L84"
     }
    ]
   },
   {
    "mode": "chord",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing in the empty column.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-815",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L815"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "418",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L418"
     }
    ]
   },
   {
    "mode": "voice",
    "gesture": "turn",
    "short_label": "GL MODE",
    "action": "Chooses RATE or TIME glide.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "433",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L433"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "96",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L96"
     }
    ]
   },
   {
    "mode": "voice_2",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing in the empty column.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-815",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L815"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "434",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L434"
     }
    ]
   },
   {
    "mode": "delay",
    "gesture": "turn",
    "short_label": "COLOR",
    "action": "Sets the shared delay tone.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "436",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L436"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "150",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L150"
     }
    ]
   },
   {
    "mode": "reverb",
    "gesture": "turn",
    "short_label": "DAMP",
    "action": "Sets shared reverb damping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "437",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L437"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "153",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L153"
     }
    ]
   },
   {
    "mode": "chorus",
    "gesture": "turn",
    "short_label": "MODE",
    "action": "Chooses CHORUS, FLANGER or PHASER for the shared bus.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "438",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L438"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "172",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L172"
     }
    ]
   },
   {
    "mode": "global",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing in the empty column.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-815",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L815"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "439",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L439"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "turn",
    "short_label": "ARP OCTAVE",
    "action": "Sets the arpeggiator span from one to four octaves.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "444",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L444"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "76",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L76"
     }
    ]
   },
   {
    "mode": "arp_2",
    "gesture": "turn",
    "short_label": "ARP HOLD",
    "action": "Turns the arpeggiator’s held chord on or off.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "445",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L445"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "80",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L80"
     }
    ]
   },
   {
    "mode": "pattern",
    "gesture": "turn",
    "short_label": "SWING",
    "action": "Sets this pattern’s swing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "451",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L451"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "88",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L88"
     }
    ]
   },
   {
    "mode": "home_analog",
    "gesture": "turn",
    "short_label": "ENV ATTACK",
    "action": "Changes ANALOG attack for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_analog.c",
      "lines": "127",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_analog.c#L127"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "58",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L58"
     }
    ]
   },
   {
    "mode": "edit_analog_1",
    "gesture": "turn",
    "short_label": "ANALOG MIX",
    "action": "Changes ANALOG mix for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_analog.c",
      "lines": "116",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_analog.c#L116"
     }
    ]
   },
   {
    "mode": "edit_analog_2",
    "gesture": "turn",
    "short_label": "ANALOG DRIVE",
    "action": "Changes ANALOG drive for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_analog.c",
      "lines": "120",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_analog.c#L120"
     }
    ]
   },
   {
    "mode": "home_drum",
    "gesture": "turn",
    "short_label": "DRUM DECAY",
    "action": "Changes DRUM decay for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "343",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L343"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "332",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L332"
     }
    ]
   },
   {
    "mode": "edit_drum_1",
    "gesture": "turn",
    "short_label": "DRUM TONE",
    "action": "Changes DRUM tone for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "331",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L331"
     }
    ]
   },
   {
    "mode": "edit_drum_2",
    "gesture": "turn",
    "short_label": "DRUM KICK",
    "action": "Changes DRUM kick for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "335",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L335"
     }
    ]
   },
   {
    "mode": "home_drumx",
    "gesture": "turn",
    "short_label": "DRUM-X COLOR",
    "action": "Changes DRUM-X color for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drumx.c",
      "lines": "266",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drumx.c#L266"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drumx.c",
      "lines": "254",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drumx.c#L254"
     }
    ]
   },
   {
    "mode": "edit_drumx_1",
    "gesture": "turn",
    "short_label": "DRUM-X COLOR",
    "action": "Changes DRUM-X color for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drumx.c",
      "lines": "254",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drumx.c#L254"
     }
    ]
   },
   {
    "mode": "edit_drumx_2",
    "gesture": "turn",
    "short_label": "DRUM-X FOLD",
    "action": "Changes DRUM-X fold for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drumx.c",
      "lines": "258",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drumx.c#L258"
     }
    ]
   },
   {
    "mode": "home_fm6",
    "gesture": "turn",
    "short_label": "FM6 MOD ENV",
    "action": "Changes FM6 mod env for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_fm6.c",
      "lines": "421",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_fm6.c#L421"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_fm6.c",
      "lines": "412",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_fm6.c#L412"
     }
    ]
   },
   {
    "mode": "edit_fm6_1",
    "gesture": "turn",
    "short_label": "FM6 MOD LVL",
    "action": "Changes FM6 mod lvl for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_fm6.c",
      "lines": "410",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_fm6.c#L410"
     }
    ]
   },
   {
    "mode": "edit_fm6_2",
    "gesture": "turn",
    "short_label": "FM6 DETUNE",
    "action": "Changes FM6 detune for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_fm6.c",
      "lines": "414",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_fm6.c#L414"
     }
    ]
   },
   {
    "mode": "home_voice",
    "gesture": "turn",
    "short_label": "VOICE BREATH",
    "action": "Changes VOICE breath for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_formant.c",
      "lines": "236",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_formant.c#L236"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_formant.c",
      "lines": "228",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_formant.c#L228"
     }
    ]
   },
   {
    "mode": "edit_voice_1",
    "gesture": "turn",
    "short_label": "VOICE TALK",
    "action": "Changes VOICE talk for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_formant.c",
      "lines": "225",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_formant.c#L225"
     }
    ]
   },
   {
    "mode": "edit_voice_2",
    "gesture": "turn",
    "short_label": "VOICE Q",
    "action": "Changes VOICE q for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_formant.c",
      "lines": "229",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_formant.c#L229"
     }
    ]
   },
   {
    "mode": "home_grain",
    "gesture": "turn",
    "short_label": "DENSITY",
    "action": "Changes GRAIN density for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_grain.c",
      "lines": "471",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_grain.c#L471"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_grain.c",
      "lines": "461",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_grain.c#L461"
     }
    ]
   },
   {
    "mode": "edit_grain_1",
    "gesture": "turn",
    "short_label": "GRAIN SIZE",
    "action": "Changes GRAIN size for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_grain.c",
      "lines": "460",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_grain.c#L460"
     }
    ]
   },
   {
    "mode": "edit_grain_2",
    "gesture": "turn",
    "short_label": "GRAIN RANDOM",
    "action": "Changes GRAIN random for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_grain.c",
      "lines": "464",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_grain.c#L464"
     }
    ]
   },
   {
    "mode": "home_lofi",
    "gesture": "turn",
    "short_label": "LOFI CRUSH",
    "action": "Changes LOFI crush for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_lofi.c",
      "lines": "238",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_lofi.c#L238"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_lofi.c",
      "lines": "228",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_lofi.c#L228"
     }
    ]
   },
   {
    "mode": "edit_lofi_1",
    "gesture": "turn",
    "short_label": "LOFI DUTY",
    "action": "Changes LOFI duty for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_lofi.c",
      "lines": "227",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_lofi.c#L227"
     }
    ]
   },
   {
    "mode": "edit_lofi_2",
    "gesture": "turn",
    "short_label": "LOFI ARP",
    "action": "Changes LOFI arp for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_lofi.c",
      "lines": "231",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_lofi.c#L231"
     }
    ]
   },
   {
    "mode": "home_noise",
    "gesture": "turn",
    "short_label": "NOISE COLOR",
    "action": "Changes NOISE color for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_noise.c",
      "lines": "275",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_noise.c#L275"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_noise.c",
      "lines": "263",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_noise.c#L263"
     }
    ]
   },
   {
    "mode": "edit_noise_1",
    "gesture": "turn",
    "short_label": "NOISE CUTOFF",
    "action": "Changes NOISE cutoff for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_noise.c",
      "lines": "264",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_noise.c#L264"
     }
    ]
   },
   {
    "mode": "edit_noise_2",
    "gesture": "turn",
    "short_label": "NOISE DRIFT",
    "action": "Changes NOISE drift for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_noise.c",
      "lines": "268",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_noise.c#L268"
     }
    ]
   },
   {
    "mode": "home_phase",
    "gesture": "turn",
    "short_label": "PHASE DETUNE",
    "action": "Changes PHASE detune for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_phase.c",
      "lines": "205",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phase.c#L205"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_phase.c",
      "lines": "196",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phase.c#L196"
     }
    ]
   },
   {
    "mode": "edit_phase_1",
    "gesture": "turn",
    "short_label": "PHASE DCW",
    "action": "Changes PHASE dcw for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_phase.c",
      "lines": "194",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phase.c#L194"
     }
    ]
   },
   {
    "mode": "edit_phase_2",
    "gesture": "turn",
    "short_label": "PHASE SUB",
    "action": "Changes PHASE sub for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_phase.c",
      "lines": "198",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phase.c#L198"
     }
    ]
   },
   {
    "mode": "home_phys",
    "gesture": "turn",
    "short_label": "PHYS DAMP",
    "action": "Changes PHYS damp for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_phys.c",
      "lines": "251",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phys.c#L251"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_phys.c",
      "lines": "241",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phys.c#L241"
     }
    ]
   },
   {
    "mode": "edit_phys_1",
    "gesture": "turn",
    "short_label": "PHYS BRIGHT",
    "action": "Changes PHYS bright for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_phys.c",
      "lines": "240",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phys.c#L240"
     }
    ]
   },
   {
    "mode": "edit_phys_2",
    "gesture": "turn",
    "short_label": "PHYS BOW",
    "action": "Changes PHYS bow for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_phys.c",
      "lines": "244",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phys.c#L244"
     }
    ]
   },
   {
    "mode": "home_sample",
    "gesture": "turn",
    "short_label": "ENV ATTACK",
    "action": "Changes SAMPLE attack for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_sample.c",
      "lines": "261",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_sample.c#L261"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "58",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L58"
     }
    ]
   },
   {
    "mode": "edit_sample_1",
    "gesture": "turn",
    "short_label": "SAMPLE BITS",
    "action": "Changes SAMPLE bits for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_sample.c",
      "lines": "250",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_sample.c#L250"
     }
    ]
   },
   {
    "mode": "edit_sample_2",
    "gesture": "turn",
    "short_label": "SAMPLE DRIVE",
    "action": "Changes SAMPLE drive for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_sample.c",
      "lines": "254",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_sample.c#L254"
     }
    ]
   },
   {
    "mode": "home_slice",
    "gesture": "turn",
    "short_label": "SLICE PITCH",
    "action": "Changes SLICE pitch for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_slice.c",
      "lines": "655",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_slice.c#L655"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_slice.c",
      "lines": "645",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_slice.c#L645"
     }
    ]
   },
   {
    "mode": "edit_slice_1",
    "gesture": "turn",
    "short_label": "SLICE START",
    "action": "Changes SLICE start for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_slice.c",
      "lines": "644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_slice.c#L644"
     }
    ]
   },
   {
    "mode": "edit_slice_2",
    "gesture": "turn",
    "short_label": "SLICE DECAY",
    "action": "Changes SLICE decay for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_slice.c",
      "lines": "648",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_slice.c#L648"
     }
    ]
   },
   {
    "mode": "home_trio",
    "gesture": "turn",
    "short_label": "TRIO PW",
    "action": "Changes TRIO pw for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_trio.c",
      "lines": "378",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_trio.c#L378"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_trio.c",
      "lines": "372",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_trio.c#L372"
     }
    ]
   },
   {
    "mode": "edit_trio_1",
    "gesture": "turn",
    "short_label": "TRIO PITCH3",
    "action": "Changes TRIO pitch3 for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_trio.c",
      "lines": "367",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_trio.c#L367"
     }
    ]
   },
   {
    "mode": "edit_trio_2",
    "gesture": "turn",
    "short_label": "TRIO RES",
    "action": "Changes TRIO res for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_trio.c",
      "lines": "371",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_trio.c#L371"
     }
    ]
   },
   {
    "mode": "home_wheel",
    "gesture": "turn",
    "short_label": "WHEEL DRIVE",
    "action": "Changes WHEEL drive for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_wheel.c",
      "lines": "299",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_wheel.c#L299"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_wheel.c",
      "lines": "292",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_wheel.c#L292"
     }
    ]
   },
   {
    "mode": "edit_wheel_1",
    "gesture": "turn",
    "short_label": "WHEEL BODY",
    "action": "Changes WHEEL body for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_wheel.c",
      "lines": "288",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_wheel.c#L288"
     }
    ]
   },
   {
    "mode": "edit_wheel_2",
    "gesture": "turn",
    "short_label": "WHEEL DRIVE",
    "action": "Changes WHEEL drive for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_wheel.c",
      "lines": "292",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_wheel.c#L292"
     }
    ]
   },
   {
    "mode": "edit_lofi_1",
    "gesture": "turn",
    "short_label": "LOFI WAV#",
    "action": "With WAVE at WRAM, chooses the wave table instead of pulse duty.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_lofi.c",
      "lines": "47-56",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_lofi.c#L47-L56"
     }
    ]
   },
   {
    "mode": "home_lofi",
    "gesture": "turn",
    "short_label": "LOFI DCY",
    "action": "With CHIP at STEP, chooses a constant, one-shot or repeating chip envelope instead of crush.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_lofi.c",
      "lines": "42-56",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_lofi.c#L42-L56"
     }
    ]
   },
   {
    "mode": "edit_phys_2",
    "gesture": "turn",
    "short_label": "PHYS BEND",
    "action": "With MODEL at MEMB, sets membrane bend instead of bow.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_phys.c",
      "lines": "60-75",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phys.c#L60-L75"
     }
    ]
   },
   {
    "mode": "edit_phys_2",
    "gesture": "turn",
    "short_label": "PHYS BUZZ",
    "action": "With MODEL at SYMP, sets sympathetic-string buzz instead of bow.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_phys.c",
      "lines": "60-75",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phys.c#L60-L75"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn",
    "short_label": "VELOCITY",
    "action": "Sets the cursor step’s velocity.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "610-651",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L610-L651"
     }
    ]
   },
   {
    "mode": "roll",
    "gesture": "turn",
    "short_label": "NOTE TYPE",
    "action": "Chooses NOTE, TIE or REST for the cursor step.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "610-651",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L610-L651"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn",
    "short_label": "HIT",
    "action": "Turns the selected lane’s hit on clockwise or off anticlockwise at the cursor step.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "479-490",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L479-L490"
     }
    ]
   },
   {
    "mode": "chance",
    "gesture": "turn",
    "short_label": "RATCHET",
    "action": "Chooses one to four repeats or FLAM for the cursor step.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "715-725",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L715-L725"
     }
    ]
   },
   {
    "mode": "seq_play",
    "gesture": "turn",
    "short_label": "DIRECTION",
    "action": "Chooses FWD, RVRS, PING or RAND playback direction.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "654-734",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L654-L734"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "turn",
    "short_label": "TRACK REVERB",
    "action": "Sets the selected track’s reverb send.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "382-408",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L382-L408"
     }
    ]
   },
   {
    "mode": "mod",
    "gesture": "turn",
    "short_label": "MOD TARGET",
    "action": "Chooses its modulation destination.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "809-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L809-L820"
     }
    ]
   },
   {
    "mode": "lanes",
    "gesture": "turn",
    "short_label": "LANE TUNE",
    "action": "Moves that drum lane’s pitch up or down from its kit tuning.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "749-752",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L749-L752"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "461-463",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L461-L463"
     }
    ]
   },
   {
    "mode": "presets",
    "gesture": "turn",
    "short_label": "FAVOURITE",
    "action": "Marks the current sound as a favourite clockwise or removes its mark anticlockwise, saving settings at once if stopped or later after stop without a question or undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-778",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L762-L778"
     }
    ]
   },
   {
    "mode": "user",
    "gesture": "turn",
    "short_label": "ERASE / NAME",
    "action": "Selects ERASE then NAME clockwise, or backs out anticlockwise; OCT+ starts the selected action.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "787-802",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L787-L802"
     }
    ]
   },
   {
    "mode": "pool",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing because USED only reports how many entries refer to the pattern.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "794-807",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L794-L807"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "turn",
    "short_label": "LOAD PROJECT",
    "action": "Selects LOAD clockwise or drops it anticlockwise; OCT+ loads that project, asking first only if the current session changed.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "794-797",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L794-L797"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "turn",
    "short_label": "REPEATS",
    "action": "Sets an occupied entry’s repeat count from one to sixteen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "672-707",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L672-L707"
     }
    ]
   },
   {
    "mode": "automation",
    "gesture": "turn",
    "short_label": "EVENT TARGET",
    "action": "Chooses a free parameter for the record and starts it at the sound’s own value, or sets the target for + ADD LOCK.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "737-739",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L737-L739"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_events.c",
      "lines": "122-214",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_events.c#L122-L214"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn",
    "short_label": "STEP LOCK",
    "action": "With one or more editable steps held, adds or changes their lock for this knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern is saved later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "568-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L568-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "609-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L609-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn",
    "short_label": "STEP LOCK",
    "action": "With one or more editable steps held, adds or changes their lock for this knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern is saved later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "568-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L568-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "609-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L609-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "automation",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing on the top settings row.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "737-739",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L737-L739"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_events.c",
      "lines": "134-140",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_events.c#L134-L140"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "turn",
    "short_label": "WAKE",
    "action": "Wakes the display and consumes this gesture; PLAY can still stop a running transport, and MASTER does not wake the screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1198-1201",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1198-L1201"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "turn",
    "short_label": "THROW",
    "action": "Sends more of the mix to delay and reverb.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "541-548",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L541-L548"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "61-62",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L61-L62"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "351-360",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L351-L360"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "636-651",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L636-L651"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "turn",
    "short_label": "THROW",
    "action": "Sends more of the mix to delay and reverb.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "541-548",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L541-L548"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "61-62",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L61-L62"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "351-360",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L351-L360"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "636-651",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L636-L651"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "turn",
    "short_label": "LEVEL 3",
    "action": "Changes the third displayed track’s level and records the move when recording is enabled.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "549-555",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L549-L555"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "turn",
    "short_label": "CHORD",
    "action": "Chooses the chord shape.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "65-69",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L65-L69"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "576-585",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L576-L585"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "turn",
    "short_label": "FAVORITE",
    "action": "Marks or unmarks the sound as a favorite and writes changed preferences immediately, or after playback stops.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "556-563",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L556-L563"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1507-1513",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1507-L1513"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "turn",
    "short_label": "SWING",
    "action": "Changes track swing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "67-69",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L67-L69"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "576-585",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L576-L585"
     }
    ]
   },
   {
    "mode": "layer_seq_drum",
    "gesture": "turn",
    "short_label": "SWING",
    "action": "Changes track swing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "67-69",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L67-L69"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "576-585",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L576-L585"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "turn",
    "short_label": "CLICK LEVEL",
    "action": "Chooses LOW, MID or HIGH click level, saving preferences when the layer closes or after playback stops.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "568-575",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L568-L575"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "151-163",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L151-L163"
     }
    ]
   },
   {
    "mode": "layer_perf_track",
    "gesture": "turn",
    "short_label": "DELAY THROW",
    "action": "Temporarily offsets selected-track delay send and glides back over a bar after the knob rests, without saving the offset.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/throw.c",
      "lines": "59-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/throw.c#L59-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/throw.c",
      "lines": "21-47",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/throw.c#L21-L47"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "turn",
    "short_label": "DELAY THROW",
    "action": "Temporarily offsets selected-track delay send and glides back over a bar after the knob rests, without saving the offset.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/throw.c",
      "lines": "59-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/throw.c#L59-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/throw.c",
      "lines": "21-47",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/throw.c#L21-L47"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing during name entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "267-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L267-L270"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing during name entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "267-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L267-L270"
     }
    ]
   },
   {
    "mode": "fmop_tone",
    "gesture": "turn",
    "short_label": "OP FINE",
    "action": "Adjusts the selected operator's fine ratio or fixed frequency.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "31",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L31"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "174-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L174-L209"
     }
    ]
   },
   {
    "mode": "fmop_env1",
    "gesture": "turn",
    "short_label": "OP RATE 2",
    "action": "Sets the selected operator's second envelope rate in the track’s patch memory; it is saved later with the project or a user sound, without a separate undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "32",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L32"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "174-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L174-L209"
     }
    ]
   },
   {
    "mode": "fmop_env2",
    "gesture": "turn",
    "short_label": "OP RATE 4",
    "action": "Sets the selected operator's fourth envelope rate in the track’s patch memory; it is saved later with the project or a user sound, without a separate undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "33-34",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L33-L34"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "174-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L174-L209"
     }
    ]
   },
   {
    "mode": "fmop_keys",
    "gesture": "turn",
    "short_label": "OP R DEPTH",
    "action": "Sets the level scaling depth above the keyboard breakpoint in the track’s patch memory; it is saved later with the project or a user sound, without a separate undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "35",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L35"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "174-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L174-L209"
     }
    ]
   },
   {
    "mode": "fmop_more",
    "gesture": "turn",
    "short_label": "OP VELOCITY",
    "action": "Sets the selected operator's velocity sensitivity in the track’s patch memory; it is saved later with the project or a user sound, without a separate undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "36",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L36"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "174-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L174-L209"
     }
    ]
   },
   {
    "mode": "fmall_algo",
    "gesture": "turn",
    "short_label": "TRANSP",
    "action": "Transposes the patch in semitones.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "37",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L37"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "174-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L174-L209"
     }
    ]
   },
   {
    "mode": "fmall_pitch1",
    "gesture": "turn",
    "short_label": "PITCH RATE 2",
    "action": "Sets the second pitch envelope rate in the track’s patch memory; it is saved later with the project or a user sound, without a separate undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "38-39",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L38-L39"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "174-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L174-L209"
     }
    ]
   },
   {
    "mode": "fmall_pitch2",
    "gesture": "turn",
    "short_label": "PITCH RATE 4",
    "action": "Sets the fourth pitch envelope rate in the track’s patch memory; it is saved later with the project or a user sound, without a separate undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "40-41",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L40-L41"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "174-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L174-L209"
     }
    ]
   },
   {
    "mode": "fmall_lfo",
    "gesture": "turn",
    "short_label": "FM LFO FADE",
    "action": "Sets the patch LFO delay in the track’s patch memory; it is saved later with the project or a user sound, without a separate undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "174-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L174-L209"
     }
    ]
   },
   {
    "mode": "fmall_depth",
    "gesture": "turn",
    "short_label": "TREMOLO",
    "action": "Sets the patch LFO amplitude depth in the track’s patch memory; it is saved later with the project or a user sound, without a separate undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "43",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L43"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "174-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L174-L209"
     }
    ]
   },
   {
    "mode": "dx_osc",
    "gesture": "turn",
    "short_label": "DX PMOD A",
    "action": "Sets sound A's pitch modulation depth.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "25",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L25"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "51-86",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L51-L86"
     }
    ]
   },
   {
    "mode": "dx_decay",
    "gesture": "turn",
    "short_label": "DX NOIS A",
    "action": "Sets sound A's noise amount.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "26",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L26"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "51-86",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L51-L86"
     }
    ]
   },
   {
    "mode": "dx_color",
    "gesture": "turn",
    "short_label": "DX LEVEL",
    "action": "Sets the chosen drum lane's level and captures it when automation recording is active.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "27",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L27"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "51-86",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L51-L86"
     }
    ]
   },
   {
    "mode": "dx_mode",
    "gesture": "turn",
    "short_label": "DX SNAP",
    "action": "Turns the chosen drum sound's SNAP on clockwise or off anticlockwise.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "28",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L28"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "51-86",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L51-L86"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "turn_cw",
    "short_label": "SPLIT",
    "action": "Selects SPLIT for OCT+ to perform.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "794-797",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L794-L797"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "846-850",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L846-L850"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "turn_ccw",
    "short_label": "CANCEL",
    "action": "Drops SPLIT if it is selected.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "794-797",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L794-L797"
     }
    ]
   },
   {
    "mode": "menu_display",
    "gesture": "turn",
    "short_label": "THEME",
    "action": "When THEME is selected, chooses the screen theme.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "186-190",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L186-L190"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_display",
    "gesture": "turn",
    "short_label": "LARGE",
    "action": "When LARGE is selected, sets larger control labels and values.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "63",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L63"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_display",
    "gesture": "turn",
    "short_label": "ANIM",
    "action": "When ANIM is selected, enables or disables screen animation.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "64",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L64"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_display",
    "gesture": "turn",
    "short_label": "LEDS",
    "action": "When LEDS is selected, chooses OFF, DIM LO, DIM HI or inverted idle lights.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "194",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L194"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_display",
    "gesture": "turn",
    "short_label": "SCREEN OFF",
    "action": "When SCREEN OFF is selected, sets idle screen sleep to never, 5, 15, 30 or 60 minutes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "193",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L193"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_display",
    "gesture": "turn",
    "short_label": "HINTS",
    "action": "When HINTS is selected, shows or hides the short hints and SHIFT map.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "199",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L199"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_control",
    "gesture": "turn",
    "short_label": "HOLD",
    "action": "When HOLD is selected, sets the button hold threshold to 0.3, 0.4, 0.5 or 0.6 seconds.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "192",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L192"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_control",
    "gesture": "turn",
    "short_label": "KNOB ACCEL",
    "action": "When KNOB ACCEL is selected, enables or disables faster changes during a quick knob turn.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "65",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L65"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_control",
    "gesture": "turn",
    "short_label": "BPM LOCK",
    "action": "When BPM LOCK is selected, sets whether unmodified SELECT changes pages rather than tempo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "67",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L67"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_control",
    "gesture": "turn",
    "short_label": "SCALE LEDS",
    "action": "When SCALE LEDS is selected, shows or hides the scale on melodic keys.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "70",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L70"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_control",
    "gesture": "turn",
    "short_label": "CLOCK",
    "action": "When CLOCK is selected, chooses internal, USB or TRS clock for the unit.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "196",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L196"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_control",
    "gesture": "turn",
    "short_label": "MIDI IN",
    "action": "When MIDI IN is selected, routes channels 1–6 to tracks 1–6 or every channel to the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "197",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L197"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_audio",
    "gesture": "turn",
    "short_label": "SPEAKER EQ",
    "action": "When SPEAKER EQ is selected, chooses FLAT, LOWCUT or BASS+ for speaker, headphones and USB audio.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "72-76",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L72-L76"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_audio",
    "gesture": "turn",
    "short_label": "USB LEVEL",
    "action": "When USB LEVEL is selected, makes USB audio follow MASTER or use a fixed full level.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "66",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L66"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_audio",
    "gesture": "turn",
    "short_label": "CLICK",
    "action": "When CLICK is selected, sets the metronome to OFF, REC or ON.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "195",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L195"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_audio",
    "gesture": "turn",
    "short_label": "CLICK LEVEL",
    "action": "When CLICK LEVEL is selected, sets the metronome to LOW, MID or HIGH.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "195",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L195"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_audio",
    "gesture": "turn",
    "short_label": "COUNT-IN",
    "action": "When COUNT-IN is selected, sets recording count-in to OFF, one bar or two bars.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "195",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L195"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_audio",
    "gesture": "turn",
    "short_label": "TUNE",
    "action": "When TUNE is selected, tunes the whole unit by up to 50 cents in either direction.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "198",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L198"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_system",
    "gesture": "turn",
    "short_label": "USB SERIAL",
    "action": "When USB SERIAL is selected, enables or disables the serial console, reconnecting USB after the menu closes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "85-101",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L85-L101"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_system",
    "gesture": "turn",
    "short_label": "RESTORE LAST",
    "action": "When RESTORE LAST is selected, enables or disables the music autosave and its restoration at power-on.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "69",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L69"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_system",
    "gesture": "turn",
    "short_label": "CPU",
    "action": "When CPU is selected, leaves the audio workload display unchanged.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "159-166",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L159-L166"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_system",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing on CALIBRATION, RESET SETTINGS and ABOUT.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-520",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L520"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "turn_cw",
    "short_label": "TEACH",
    "action": "When prompted for this knob, records its position and clockwise direction in the new panel mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1603-1628",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1603-L1628"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_f3",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_g3",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_a3",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_b3",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_c4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_d4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_e4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_f4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_g4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_a4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_b4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_c5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_d5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_e5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_f5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_g5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_f3",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_fs3",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_g3",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_gs3",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_a3",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_as3",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_b3",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_c4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_cs4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_d4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_ds4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_e4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_f4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_fs4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_g4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_gs4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_a4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_as4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_b4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_c5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_cs5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_d5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_ds5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_e5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_f5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_fs5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_g5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   }
  ],
  "encoder_knob4": [
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "HOME CTRL 4",
    "action": "Changes the selected sound’s fourth Home control, whose job depends on its engine.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1542",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1542"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1588-1594",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1588-L1594"
     }
    ]
   },
   {
    "mode": "env",
    "gesture": "turn",
    "short_label": "ENV RELEASE",
    "action": "Sets its release time.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "407",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L407"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "61",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L61"
     }
    ]
   },
   {
    "mode": "env_dest",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing in the empty column.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-815",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L815"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "408",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L408"
     }
    ]
   },
   {
    "mode": "env_2",
    "gesture": "turn",
    "short_label": "ENV2 RELEASE",
    "action": "Sets the second envelope’s release.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "409",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L409"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "136",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L136"
     }
    ]
   },
   {
    "mode": "lfo",
    "gesture": "turn",
    "short_label": "LFO FADE",
    "action": "Sets the LFO fade-in time.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "410",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L410"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "69",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L69"
     }
    ]
   },
   {
    "mode": "lfo_dest",
    "gesture": "turn",
    "short_label": "LFO AMP",
    "action": "Sets the LFO amplitude amount.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "411",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L411"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "73",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L73"
     }
    ]
   },
   {
    "mode": "fx",
    "gesture": "turn",
    "short_label": "REVERB",
    "action": "Sets its reverb send.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "413",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L413"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "93",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L93"
     }
    ]
   },
   {
    "mode": "drive",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing in the empty column.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-815",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L815"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "414",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L414"
     }
    ]
   },
   {
    "mode": "slicer",
    "gesture": "turn",
    "short_label": "SLICER DEPTH",
    "action": "Sets the slicer depth.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "415",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L415"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "105",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L105"
     }
    ]
   },
   {
    "mode": "duck",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing in the empty column.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-815",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L815"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "416",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L416"
     }
    ]
   },
   {
    "mode": "scale",
    "gesture": "turn",
    "short_label": "TRANSP",
    "action": "Transposes the mapped keyboard by up to two octaves each way.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "417",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L417"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "85",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L85"
     }
    ]
   },
   {
    "mode": "chord",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing in the empty column.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-815",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L815"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "418",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L418"
     }
    ]
   },
   {
    "mode": "voice",
    "gesture": "turn",
    "short_label": "PRIORITY",
    "action": "Chooses LAST, LOW or HIGH note priority.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "433",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L433"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "97",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L97"
     }
    ]
   },
   {
    "mode": "voice_2",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing in the empty column.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-815",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L815"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "434",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L434"
     }
    ]
   },
   {
    "mode": "delay",
    "gesture": "turn",
    "short_label": "MIX",
    "action": "Sets the shared delay output mix.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "436",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L436"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "151",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L151"
     }
    ]
   },
   {
    "mode": "reverb",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing in the empty column.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-815",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L815"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "437",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L437"
     }
    ]
   },
   {
    "mode": "chorus",
    "gesture": "turn",
    "short_label": "FEEDBACK",
    "action": "Sets feedback on the shared modulation bus.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "438",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L438"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "173",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L173"
     }
    ]
   },
   {
    "mode": "global",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing in the empty column.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-815",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L815"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "439",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L439"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "turn",
    "short_label": "ARP GATE",
    "action": "Sets the arpeggiator note length.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "444",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L444"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "77",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L77"
     }
    ]
   },
   {
    "mode": "arp_2",
    "gesture": "turn",
    "short_label": "ARP ORDER",
    "action": "Chooses note order by pitch or by the order played.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "445",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L445"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "81",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L81"
     }
    ]
   },
   {
    "mode": "pattern",
    "gesture": "turn",
    "short_label": "GATE",
    "action": "Sets this pattern’s note gate length.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "451",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L451"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "89",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L89"
     }
    ]
   },
   {
    "mode": "home_analog",
    "gesture": "turn",
    "short_label": "ENV RELEASE",
    "action": "Changes ANALOG release for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_analog.c",
      "lines": "127",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_analog.c#L127"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "61",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L61"
     }
    ]
   },
   {
    "mode": "edit_analog_1",
    "gesture": "turn",
    "short_label": "ANALOG NOISE",
    "action": "Changes ANALOG noise for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_analog.c",
      "lines": "117",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_analog.c#L117"
     }
    ]
   },
   {
    "mode": "edit_analog_2",
    "gesture": "turn",
    "short_label": "KEYTRK",
    "action": "Changes ANALOG keytrk for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_analog.c",
      "lines": "121",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_analog.c#L121"
     }
    ]
   },
   {
    "mode": "home_drum",
    "gesture": "turn",
    "short_label": "DRUM SNAP",
    "action": "Changes DRUM snap for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "343",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L343"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "333",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L333"
     }
    ]
   },
   {
    "mode": "edit_drum_1",
    "gesture": "turn",
    "short_label": "DRUM DECAY",
    "action": "Changes DRUM decay for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "332",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L332"
     }
    ]
   },
   {
    "mode": "edit_drum_2",
    "gesture": "turn",
    "short_label": "DRUM DRIVE",
    "action": "Changes DRUM drive for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "336",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L336"
     }
    ]
   },
   {
    "mode": "home_drumx",
    "gesture": "turn",
    "short_label": "DRUM-X DECAY",
    "action": "Changes DRUM-X decay for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drumx.c",
      "lines": "266",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drumx.c#L266"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drumx.c",
      "lines": "255",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drumx.c#L255"
     }
    ]
   },
   {
    "mode": "edit_drumx_1",
    "gesture": "turn",
    "short_label": "DRUM-X DECAY",
    "action": "Changes DRUM-X decay for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drumx.c",
      "lines": "255",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drumx.c#L255"
     }
    ]
   },
   {
    "mode": "edit_drumx_2",
    "gesture": "turn",
    "short_label": "DRUM-X DRIVE",
    "action": "Changes DRUM-X drive for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drumx.c",
      "lines": "259",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drumx.c#L259"
     }
    ]
   },
   {
    "mode": "home_fm6",
    "gesture": "turn",
    "short_label": "FM6 PATCH",
    "action": "Changes FM6 patch for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_fm6.c",
      "lines": "421",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_fm6.c#L421"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_fm6.c",
      "lines": "415",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_fm6.c#L415"
     }
    ]
   },
   {
    "mode": "edit_fm6_1",
    "gesture": "turn",
    "short_label": "FM6 RATIO",
    "action": "Changes FM6 ratio for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_fm6.c",
      "lines": "411",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_fm6.c#L411"
     }
    ]
   },
   {
    "mode": "edit_fm6_2",
    "gesture": "turn",
    "short_label": "FM6 PATCH",
    "action": "Changes FM6 patch for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_fm6.c",
      "lines": "415",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_fm6.c#L415"
     }
    ]
   },
   {
    "mode": "home_voice",
    "gesture": "turn",
    "short_label": "VOICE TALK",
    "action": "Changes VOICE talk for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_formant.c",
      "lines": "236",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_formant.c#L236"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_formant.c",
      "lines": "225",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_formant.c#L225"
     }
    ]
   },
   {
    "mode": "edit_voice_1",
    "gesture": "turn",
    "short_label": "VOICE PITCH",
    "action": "Changes VOICE pitch for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_formant.c",
      "lines": "226",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_formant.c#L226"
     }
    ]
   },
   {
    "mode": "edit_voice_2",
    "gesture": "turn",
    "short_label": "VOICE RANDOM",
    "action": "Changes VOICE random for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_formant.c",
      "lines": "230",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_formant.c#L230"
     }
    ]
   },
   {
    "mode": "home_grain",
    "gesture": "turn",
    "short_label": "GRAIN SPREAD",
    "action": "Changes GRAIN spread for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_grain.c",
      "lines": "471",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_grain.c#L471"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_grain.c",
      "lines": "463",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_grain.c#L463"
     }
    ]
   },
   {
    "mode": "edit_grain_1",
    "gesture": "turn",
    "short_label": "DENSITY",
    "action": "Changes GRAIN density for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_grain.c",
      "lines": "461",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_grain.c#L461"
     }
    ]
   },
   {
    "mode": "edit_grain_2",
    "gesture": "turn",
    "short_label": "GRAIN TONE",
    "action": "Changes GRAIN tone for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_grain.c",
      "lines": "465",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_grain.c#L465"
     }
    ]
   },
   {
    "mode": "home_lofi",
    "gesture": "turn",
    "short_label": "LOFI RELEASE",
    "action": "Changes LOFI release for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_lofi.c",
      "lines": "238",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_lofi.c#L238"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "61",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L61"
     }
    ]
   },
   {
    "mode": "edit_lofi_1",
    "gesture": "turn",
    "short_label": "LOFI CRUSH",
    "action": "Changes LOFI crush for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_lofi.c",
      "lines": "228",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_lofi.c#L228"
     }
    ]
   },
   {
    "mode": "edit_lofi_2",
    "gesture": "turn",
    "short_label": "LOFI TONE",
    "action": "Changes LOFI tone for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_lofi.c",
      "lines": "232",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_lofi.c#L232"
     }
    ]
   },
   {
    "mode": "home_noise",
    "gesture": "turn",
    "short_label": "ENV RELEASE",
    "action": "Changes NOISE release for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_noise.c",
      "lines": "275",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_noise.c#L275"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "61",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L61"
     }
    ]
   },
   {
    "mode": "edit_noise_1",
    "gesture": "turn",
    "short_label": "NOISE RES",
    "action": "Changes NOISE res for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_noise.c",
      "lines": "265",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_noise.c#L265"
     }
    ]
   },
   {
    "mode": "edit_noise_2",
    "gesture": "turn",
    "short_label": "NOISE CRUSH",
    "action": "Changes NOISE crush for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_noise.c",
      "lines": "269",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_noise.c#L269"
     }
    ]
   },
   {
    "mode": "home_phase",
    "gesture": "turn",
    "short_label": "ENV RELEASE",
    "action": "Changes PHASE release for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_phase.c",
      "lines": "205",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phase.c#L205"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "61",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L61"
     }
    ]
   },
   {
    "mode": "edit_phase_1",
    "gesture": "turn",
    "short_label": "PHASE ENV",
    "action": "Changes PHASE env for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_phase.c",
      "lines": "195",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phase.c#L195"
     }
    ]
   },
   {
    "mode": "edit_phase_2",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing in the empty column.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_phase.c",
      "lines": "199",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phase.c#L199"
     }
    ]
   },
   {
    "mode": "home_phys",
    "gesture": "turn",
    "short_label": "PHYS POS",
    "action": "Changes PHYS pos for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_phys.c",
      "lines": "251",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phys.c#L251"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_phys.c",
      "lines": "242",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phys.c#L242"
     }
    ]
   },
   {
    "mode": "edit_phys_1",
    "gesture": "turn",
    "short_label": "PHYS DAMP",
    "action": "Changes PHYS damp for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_phys.c",
      "lines": "241",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phys.c#L241"
     }
    ]
   },
   {
    "mode": "edit_phys_2",
    "gesture": "turn",
    "short_label": "PHYS EXCITE",
    "action": "Changes PHYS excite for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_phys.c",
      "lines": "245",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phys.c#L245"
     }
    ]
   },
   {
    "mode": "home_sample",
    "gesture": "turn",
    "short_label": "ENV RELEASE",
    "action": "Changes SAMPLE release for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_sample.c",
      "lines": "261",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_sample.c#L261"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "61",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L61"
     }
    ]
   },
   {
    "mode": "edit_sample_1",
    "gesture": "turn",
    "short_label": "SAMPLE LOOP",
    "action": "Changes SAMPLE loop for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_sample.c",
      "lines": "251",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_sample.c#L251"
     }
    ]
   },
   {
    "mode": "edit_sample_2",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing in the empty column.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_sample.c",
      "lines": "255",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_sample.c#L255"
     }
    ]
   },
   {
    "mode": "home_slice",
    "gesture": "turn",
    "short_label": "SLICE DECAY",
    "action": "Changes SLICE decay for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_slice.c",
      "lines": "655",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_slice.c#L655"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_slice.c",
      "lines": "648",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_slice.c#L648"
     }
    ]
   },
   {
    "mode": "edit_slice_1",
    "gesture": "turn",
    "short_label": "SLICE PITCH",
    "action": "Changes SLICE pitch for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_slice.c",
      "lines": "645",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_slice.c#L645"
     }
    ]
   },
   {
    "mode": "edit_slice_2",
    "gesture": "turn",
    "short_label": "SLICE CUTOFF",
    "action": "Changes SLICE cutoff for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_slice.c",
      "lines": "649",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_slice.c#L649"
     }
    ]
   },
   {
    "mode": "home_trio",
    "gesture": "turn",
    "short_label": "TRIO PITCH2",
    "action": "Changes TRIO pitch2 for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_trio.c",
      "lines": "378",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_trio.c#L378"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_trio.c",
      "lines": "366",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_trio.c#L366"
     }
    ]
   },
   {
    "mode": "edit_trio_1",
    "gesture": "turn",
    "short_label": "TRIO DETUNE",
    "action": "Changes TRIO detune for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_trio.c",
      "lines": "368",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_trio.c#L368"
     }
    ]
   },
   {
    "mode": "edit_trio_2",
    "gesture": "turn",
    "short_label": "TRIO PW",
    "action": "Changes TRIO pw for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_trio.c",
      "lines": "372",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_trio.c#L372"
     }
    ]
   },
   {
    "mode": "home_wheel",
    "gesture": "turn",
    "short_label": "WHEEL ROTOR",
    "action": "Changes WHEEL rotor for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1536-1540",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1536-L1540"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_wheel.c",
      "lines": "299",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_wheel.c#L299"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_wheel.c",
      "lines": "293",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_wheel.c#L293"
     }
    ]
   },
   {
    "mode": "edit_wheel_1",
    "gesture": "turn",
    "short_label": "WHEEL TOP",
    "action": "Changes WHEEL top for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_wheel.c",
      "lines": "289",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_wheel.c#L289"
     }
    ]
   },
   {
    "mode": "edit_wheel_2",
    "gesture": "turn",
    "short_label": "WHEEL ROTOR",
    "action": "Changes WHEEL rotor for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L813-L820"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_wheel.c",
      "lines": "293",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_wheel.c#L293"
     }
    ]
   },
   {
    "mode": "edit_lofi_1",
    "gesture": "turn",
    "short_label": "LOFI DCY",
    "action": "With CHIP at STEP, chooses a constant, one-shot or repeating chip envelope instead of crush.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_lofi.c",
      "lines": "42-56",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_lofi.c#L42-L56"
     }
    ]
   },
   {
    "mode": "edit_noise_2",
    "gesture": "turn",
    "short_label": "NOISE CLK",
    "action": "With MODE at LFSR or META, sets the register clock above the key instead of crush.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_noise.c",
      "lines": "45-52",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_noise.c#L45-L52"
     }
    ]
   },
   {
    "mode": "home_phys",
    "gesture": "turn",
    "short_label": "PHYS SYMP",
    "action": "With MODEL at SYMP, sets sympathetic-string strength instead of position.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_phys.c",
      "lines": "60-75",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_phys.c#L60-L75"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn",
    "short_label": "STEP CHANCE",
    "action": "Sets the cursor step’s chance from zero to 100 percent.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "610-651",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L610-L651"
     }
    ]
   },
   {
    "mode": "roll",
    "gesture": "turn",
    "short_label": "STEP FLAGS",
    "action": "Chooses no flags, accent, slide or both for the cursor step.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "610-651",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L610-L651"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn",
    "short_label": "ACCENT",
    "action": "Turns that lane’s accent on clockwise or off anticlockwise, adding its hit if needed.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "479-490",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L479-L490"
     }
    ]
   },
   {
    "mode": "chance",
    "gesture": "turn",
    "short_label": "CONDITION",
    "action": "Chooses no condition, FILL, !FILL or a numbered pass condition.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "715-725",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L715-L725"
     }
    ]
   },
   {
    "mode": "seq_play",
    "gesture": "turn",
    "short_label": "STEP GATE",
    "action": "Changes this step’s gate lock in memory without a question, removing the lock at the pattern’s gate value; SAVE held can undo it and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "654-734",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L654-L734"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "turn",
    "short_label": "TRACK MUTE",
    "action": "Mutes the selected track clockwise or unmutes it anticlockwise.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "382-408",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L382-L408"
     }
    ]
   },
   {
    "mode": "mod",
    "gesture": "turn",
    "short_label": "MOD AMOUNT",
    "action": "Sets its signed modulation amount.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "809-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L809-L820"
     }
    ]
   },
   {
    "mode": "lanes",
    "gesture": "turn",
    "short_label": "LANE DECAY",
    "action": "Adjusts that drum lane’s decay from its kit value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "749-752",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L749-L752"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "461-463",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L461-L463"
     }
    ]
   },
   {
    "mode": "presets",
    "gesture": "turn",
    "short_label": "LIST",
    "action": "Chooses ALL, FAV or a sound type and saves that choice at once if stopped or later after stop without a question or undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-778",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L762-L778"
     }
    ]
   },
   {
    "mode": "user",
    "gesture": "turn",
    "short_label": "SAVE SOUND",
    "action": "Selects SAVE clockwise or drops it anticlockwise; OCT+ starts saving this sound into the selected slot.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "787-802",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L787-L802"
     }
    ]
   },
   {
    "mode": "pool",
    "gesture": "turn",
    "short_label": "CANCEL PICK",
    "action": "Turning clockwise makes the next OCT- cancel a hidden choice instead of returning HOME, while turning anticlockwise removes that choice; CLEAR stays selected and OCT+ still asks before clearing an unused pattern while stopped.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "794-807",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L794-L807"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1667-1683",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1667-L1683"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "853-869",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L853-L869"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "794-797",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L794-L797"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1455-1465",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1455-L1465"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_draw.c",
      "lines": "473-479",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_draw.c#L473-L479"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "turn",
    "short_label": "SAVE PROJECT",
    "action": "Selects SAVE clockwise or drops it anticlockwise; OCT+ asks before replacing a used project, then opens naming.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "794-797",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L794-L797"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "turn",
    "short_label": "SONG MODE",
    "action": "Turns SONG on clockwise or off anticlockwise.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "672-707",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L672-L707"
     }
    ]
   },
   {
    "mode": "automation",
    "gesture": "turn",
    "short_label": "EVENT VALUE",
    "action": "Changes the record’s value in memory with SAVE-held undo, or selects DELETE by turning left beyond its lowest value; OCT+ then deletes it without a second question.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "737-739",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L737-L739"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_events.c",
      "lines": "122-214",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_events.c#L122-L214"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn",
    "short_label": "STEP LOCK",
    "action": "With one or more editable steps held, adds or changes their lock for this knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern is saved later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "568-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L568-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "609-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L609-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn",
    "short_label": "STEP LOCK",
    "action": "With one or more editable steps held, adds or changes their lock for this knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern is saved later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "568-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L568-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "609-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L609-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "automation",
    "gesture": "turn",
    "short_label": "CLEAR MOTION",
    "action": "On the top row, selects CLEAR clockwise or drops it anticlockwise; OCT+ asks before clearing the track’s automation and locks in memory with SAVE-held undo and a later pattern save.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "737-739",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L737-L739"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_events.c",
      "lines": "134-140",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_events.c#L134-L140"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1358-1360",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1358-L1360"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "turn",
    "short_label": "WAKE",
    "action": "Wakes the display and consumes this gesture; PLAY can still stop a running transport, and MASTER does not wake the screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1198-1201",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1198-L1201"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "turn",
    "short_label": "FX DEPTH",
    "action": "Sets the effect level or gate depth, becoming feedback shimmer during octave shifting.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "541-548",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L541-L548"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "61-62",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L61-L62"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "351-360",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L351-L360"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "636-651",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L636-L651"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "turn",
    "short_label": "FX DEPTH",
    "action": "Sets the effect level or gate depth, becoming feedback shimmer during octave shifting.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "541-548",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L541-L548"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "61-62",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L61-L62"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "351-360",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L351-L360"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "636-651",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L636-L651"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "turn",
    "short_label": "LEVEL 4",
    "action": "Changes the fourth displayed track’s level and records the move when recording is enabled.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "549-555",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L549-L555"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "turn",
    "short_label": "VOICING",
    "action": "Changes chord voicing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "65-69",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L65-L69"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "576-585",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L576-L585"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "556-563",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L556-L563"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "turn",
    "short_label": "GATE",
    "action": "Changes track gate length.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "67-69",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L67-L69"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "576-585",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L576-L585"
     }
    ]
   },
   {
    "mode": "layer_seq_drum",
    "gesture": "turn",
    "short_label": "GATE",
    "action": "Changes track gate length.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "67-69",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L67-L69"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "576-585",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L576-L585"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "turn",
    "short_label": "FEEL",
    "action": "Turns timing capture on clockwise or off counterclockwise, saving preferences when the layer closes or after playback stops.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "568-575",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L568-L575"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "151-163",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L151-L163"
     }
    ]
   },
   {
    "mode": "layer_perf_track",
    "gesture": "turn",
    "short_label": "DRIVE THROW",
    "action": "Temporarily offsets selected-track distortion send and glides back over a bar after the knob rests, without saving the offset.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/throw.c",
      "lines": "59-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/throw.c#L59-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/throw.c",
      "lines": "21-47",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/throw.c#L21-L47"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "turn",
    "short_label": "DRIVE THROW",
    "action": "Temporarily offsets selected-track distortion send and glides back over a bar after the knob rests, without saving the offset.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/throw.c",
      "lines": "59-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/throw.c#L59-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/throw.c",
      "lines": "21-47",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/throw.c#L21-L47"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing during name entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "267-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L267-L270"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing during name entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "267-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L267-L270"
     }
    ]
   },
   {
    "mode": "fmop_tone",
    "gesture": "turn",
    "short_label": "OP DETUNE",
    "action": "Detunes the selected operator from −7 to +7.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "31",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L31"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "174-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L174-L209"
     }
    ]
   },
   {
    "mode": "fmop_env1",
    "gesture": "turn",
    "short_label": "OP LEVEL 2",
    "action": "Sets the selected operator's second envelope level in the track’s patch memory; it is saved later with the project or a user sound, without a separate undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "32",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L32"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "174-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L174-L209"
     }
    ]
   },
   {
    "mode": "fmop_env2",
    "gesture": "turn",
    "short_label": "OP LEVEL 4",
    "action": "Sets the selected operator's fourth envelope level in the track’s patch memory; it is saved later with the project or a user sound, without a separate undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "33-34",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L33-L34"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "174-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L174-L209"
     }
    ]
   },
   {
    "mode": "fmop_keys",
    "gesture": "turn",
    "short_label": "OP R CURVE",
    "action": "Chooses the level curve above the keyboard breakpoint.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "35",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L35"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "174-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L174-L209"
     }
    ]
   },
   {
    "mode": "fmop_more",
    "gesture": "turn",
    "short_label": "OP LFO AMP",
    "action": "Sets the selected operator's amplitude response to the LFO in the track’s patch memory; it is saved later with the project or a user sound, without a separate undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "36",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L36"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "174-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L174-L209"
     }
    ]
   },
   {
    "mode": "fmall_algo",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "37",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L37"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "174-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L174-L209"
     }
    ]
   },
   {
    "mode": "fmall_pitch1",
    "gesture": "turn",
    "short_label": "PITCH 2",
    "action": "Sets the second pitch envelope level in the track’s patch memory; it is saved later with the project or a user sound, without a separate undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "38-39",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L38-L39"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "174-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L174-L209"
     }
    ]
   },
   {
    "mode": "fmall_pitch2",
    "gesture": "turn",
    "short_label": "PITCH 4",
    "action": "Sets the fourth pitch envelope level in the track’s patch memory; it is saved later with the project or a user sound, without a separate undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "40-41",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L40-L41"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "174-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L174-L209"
     }
    ]
   },
   {
    "mode": "fmall_lfo",
    "gesture": "turn",
    "short_label": "FM KEY SYNC",
    "action": "Sets whether a note restarts the patch LFO in the track’s patch memory; it is saved later with the project or a user sound, without a separate undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "174-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L174-L209"
     }
    ]
   },
   {
    "mode": "fmall_depth",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "43",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L43"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "174-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L174-L209"
     }
    ]
   },
   {
    "mode": "dx_osc",
    "gesture": "turn",
    "short_label": "DX PMOD B",
    "action": "Sets sound B's pitch modulation depth.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "25",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L25"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "51-86",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L51-L86"
     }
    ]
   },
   {
    "mode": "dx_decay",
    "gesture": "turn",
    "short_label": "DX NOIS B",
    "action": "Sets sound B's noise amount.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "26",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L26"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "51-86",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L51-L86"
     }
    ]
   },
   {
    "mode": "dx_color",
    "gesture": "turn",
    "short_label": "DX DRIVE",
    "action": "Turns the chosen drum sound's drive on clockwise or off anticlockwise.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "27",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L27"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "51-86",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L51-L86"
     }
    ]
   },
   {
    "mode": "dx_mode",
    "gesture": "turn",
    "short_label": "DX P SHAPE",
    "action": "Chooses DECAY, LONG, NOISE or SINE for the chosen drum sound's pitch modulation shape.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "28",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L28"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "51-86",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L51-L86"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "turn_cw",
    "short_label": "JOIN",
    "action": "Selects JOIN for OCT+ to perform.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "794-797",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L794-L797"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "846-850",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L846-L850"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "turn_ccw",
    "short_label": "CANCEL",
    "action": "Drops JOIN if it is selected.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "794-797",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L794-L797"
     }
    ]
   },
   {
    "mode": "menu_display",
    "gesture": "turn",
    "short_label": "THEME",
    "action": "When THEME is selected, chooses the screen theme.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "186-190",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L186-L190"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_display",
    "gesture": "turn",
    "short_label": "LARGE",
    "action": "When LARGE is selected, sets larger control labels and values.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "63",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L63"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_display",
    "gesture": "turn",
    "short_label": "ANIM",
    "action": "When ANIM is selected, enables or disables screen animation.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "64",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L64"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_display",
    "gesture": "turn",
    "short_label": "LEDS",
    "action": "When LEDS is selected, chooses OFF, DIM LO, DIM HI or inverted idle lights.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "194",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L194"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_display",
    "gesture": "turn",
    "short_label": "SCREEN OFF",
    "action": "When SCREEN OFF is selected, sets idle screen sleep to never, 5, 15, 30 or 60 minutes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "193",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L193"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_display",
    "gesture": "turn",
    "short_label": "HINTS",
    "action": "When HINTS is selected, shows or hides the short hints and SHIFT map.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "199",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L199"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_control",
    "gesture": "turn",
    "short_label": "HOLD",
    "action": "When HOLD is selected, sets the button hold threshold to 0.3, 0.4, 0.5 or 0.6 seconds.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "192",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L192"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_control",
    "gesture": "turn",
    "short_label": "KNOB ACCEL",
    "action": "When KNOB ACCEL is selected, enables or disables faster changes during a quick knob turn.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "65",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L65"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_control",
    "gesture": "turn",
    "short_label": "BPM LOCK",
    "action": "When BPM LOCK is selected, sets whether unmodified SELECT changes pages rather than tempo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "67",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L67"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_control",
    "gesture": "turn",
    "short_label": "SCALE LEDS",
    "action": "When SCALE LEDS is selected, shows or hides the scale on melodic keys.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "70",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L70"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_control",
    "gesture": "turn",
    "short_label": "CLOCK",
    "action": "When CLOCK is selected, chooses internal, USB or TRS clock for the unit.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "196",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L196"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_control",
    "gesture": "turn",
    "short_label": "MIDI IN",
    "action": "When MIDI IN is selected, routes channels 1–6 to tracks 1–6 or every channel to the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "197",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L197"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_audio",
    "gesture": "turn",
    "short_label": "SPEAKER EQ",
    "action": "When SPEAKER EQ is selected, chooses FLAT, LOWCUT or BASS+ for speaker, headphones and USB audio.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "72-76",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L72-L76"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_audio",
    "gesture": "turn",
    "short_label": "USB LEVEL",
    "action": "When USB LEVEL is selected, makes USB audio follow MASTER or use a fixed full level.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "66",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L66"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_audio",
    "gesture": "turn",
    "short_label": "CLICK",
    "action": "When CLICK is selected, sets the metronome to OFF, REC or ON.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "195",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L195"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_audio",
    "gesture": "turn",
    "short_label": "CLICK LEVEL",
    "action": "When CLICK LEVEL is selected, sets the metronome to LOW, MID or HIGH.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "195",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L195"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_audio",
    "gesture": "turn",
    "short_label": "COUNT-IN",
    "action": "When COUNT-IN is selected, sets recording count-in to OFF, one bar or two bars.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "195",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L195"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_audio",
    "gesture": "turn",
    "short_label": "TUNE",
    "action": "When TUNE is selected, tunes the whole unit by up to 50 cents in either direction.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "198",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L198"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_system",
    "gesture": "turn",
    "short_label": "USB SERIAL",
    "action": "When USB SERIAL is selected, enables or disables the serial console, reconnecting USB after the menu closes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "85-101",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L85-L101"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_system",
    "gesture": "turn",
    "short_label": "RESTORE LAST",
    "action": "When RESTORE LAST is selected, enables or disables the music autosave and its restoration at power-on.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "69",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L69"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_system",
    "gesture": "turn",
    "short_label": "CPU",
    "action": "When CPU is selected, leaves the audio workload display unchanged.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "159-166",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L159-L166"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_system",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing on CALIBRATION, RESET SETTINGS and ABOUT.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-520",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L520"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "turn_cw",
    "short_label": "TEACH",
    "action": "When prompted for this knob, records its position and clockwise direction in the new panel mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1603-1628",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1603-L1628"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_f3",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_g3",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_a3",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_b3",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_c4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_d4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_e4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_f4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_g4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_a4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_b4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_c5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_d5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_e5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_f5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn_while_holding:key_g5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_f3",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_fs3",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_g3",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_gs3",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_a3",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_as3",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_b3",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_c4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_cs4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_d4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_ds4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_e4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_f4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_fs4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_g4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_gs4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_a4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_as4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_b4",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_c5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_cs5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_d5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_ds5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_e5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_f5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_fs5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn_while_holding:key_g5",
    "short_label": "STEP LOCK",
    "action": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "537-590",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L537-L590"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "624-631",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L624-L631"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "570-576",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L570-L576"
     }
    ]
   }
  ],
  "button_fx": [
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "FX PAGES",
    "action": "After a short tap, opens FX’s last available page or advances within that family when already open, unless a dialog, menu, name or held layer owns the controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1103-1135",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1103-L1135"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "772-816",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L772-L816"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "press",
    "short_label": "WAKE",
    "action": "Wakes the display and consumes this gesture; PLAY can still stop a running transport, and MASTER does not wake the screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1198-1201",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1198-L1201"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing during name entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1329-1337",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1329-L1337"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing during name entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1329-1337",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1329-L1337"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "short_label": "TEACH",
    "action": "When prompted for this button, records its physical position in the new panel mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1585-1600",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1585-L1600"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "short_label": "FX HOLD",
    "action": "After HOLD’s 300–600 ms, default 400 ms, opens the fx hold layer until released; a key, knob or button combination opens it immediately, and first use can save settings without a question.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "258-278",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L258-L278"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "226-233",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L226-L233"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/panel.c",
      "lines": "76-81",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/panel.c#L76-L81"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_home",
    "short_label": "LOCK FX",
    "action": "Locks this shortcut layer open, or closes its own existing lock, with no page tap; use its keys without holding the button and tap its button to close it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "192-215",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L192-L215"
     }
    ]
   }
  ],
  "button_sel": [
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "SCL PAGES",
    "action": "After a short tap, opens SCL’s last available page or advances within that family when already open, unless a dialog, menu, name or held layer owns the controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1103-1135",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1103-L1135"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "772-816",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L772-L816"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "press",
    "short_label": "WAKE",
    "action": "Wakes the display and consumes this gesture; PLAY can still stop a running transport, and MASTER does not wake the screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1198-1201",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1198-L1201"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing during name entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1329-1337",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1329-L1337"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing during name entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1329-1337",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1329-L1337"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "short_label": "TEACH",
    "action": "When prompted for this button, records its physical position in the new panel mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1585-1600",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1585-L1600"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "short_label": "SCALE SET",
    "action": "After HOLD’s 300–600 ms, default 400 ms, opens the scale set layer until released; a key, knob or button combination opens it immediately, and first use can save settings without a question.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "258-278",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L258-L278"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "226-233",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L226-L233"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/panel.c",
      "lines": "76-81",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/panel.c#L76-L81"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_home",
    "short_label": "LOCK SCALE",
    "action": "Locks this shortcut layer open, or closes its own existing lock, with no page tap; use its keys without holding the button and tap its button to close it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "192-215",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L192-L215"
     }
    ]
   }
  ],
  "button_env": [
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "ENV PAGES",
    "action": "After a short tap, opens ENV’s last available page or advances within that family when already open, unless a dialog, menu, name or held layer owns the controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1103-1135",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1103-L1135"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "772-816",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L772-L816"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "press",
    "short_label": "WAKE",
    "action": "Wakes the display and consumes this gesture; PLAY can still stop a running transport, and MASTER does not wake the screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1198-1201",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1198-L1201"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing during name entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1329-1337",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1329-L1337"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing during name entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1329-1337",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1329-L1337"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "short_label": "TEACH",
    "action": "When prompted for this button, records its physical position in the new panel mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1585-1600",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1585-L1600"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "short_label": "ENV PAGES",
    "action": "Has no held shortcut layer; outside modal screens its page action waits for release even after a long hold.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1441-1451",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1441-L1451"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "52-63",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L52-L63"
     }
    ]
   }
  ],
  "button_lfo": [
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "LFO PAGES",
    "action": "After a short tap, opens LFO’s last available page or advances within that family when already open, unless a dialog, menu, name or held layer owns the controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1103-1135",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1103-L1135"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "772-816",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L772-L816"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "press",
    "short_label": "WAKE",
    "action": "Wakes the display and consumes this gesture; PLAY can still stop a running transport, and MASTER does not wake the screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1198-1201",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1198-L1201"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing during name entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1329-1337",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1329-L1337"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing during name entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1329-1337",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1329-L1337"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "short_label": "TEACH",
    "action": "When prompted for this button, records its physical position in the new panel mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1585-1600",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1585-L1600"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "short_label": "LFO PAGES",
    "action": "Has no held shortcut layer; outside modal screens its page action waits for release even after a long hold.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1441-1451",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1441-L1451"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "52-63",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L52-L63"
     }
    ]
   }
  ],
  "button_edit": [
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "EDIT PAGES",
    "action": "After a short tap, opens EDIT’s last available page or advances within that family when already open, unless a dialog, menu, name or held layer owns the controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1103-1135",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1103-L1135"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "772-816",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L772-L816"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "short_label": "CLEAR STEP",
    "action": "After a short tap with no note key held, clears the cursor step and its locks in memory and advances without a question; SAVE held can undo it and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1112-1127",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1112-L1127"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "release",
    "short_label": "CLEAR STEP",
    "action": "When REC is armed and no step key is held, clears the whole cursor step and its locks in memory without a question and advances; SAVE held can undo it and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1112-1127",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1112-L1127"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "short_label": "CLEAR LOCKS",
    "action": "With step keys held, clears only their parameter locks in memory without a question, preserving the steps; SAVE held can undo it and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1112-1118",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1112-L1118"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "593-607",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L593-L607"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "release",
    "short_label": "CLEAR LOCKS",
    "action": "With step keys held, clears only their parameter locks in memory without a question, preserving the steps; SAVE held can undo it and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1112-1118",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1112-L1118"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "593-607",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L593-L607"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "press",
    "short_label": "WAKE",
    "action": "Wakes the display and consumes this gesture; PLAY can still stop a running transport, and MASTER does not wake the screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1198-1201",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1198-L1201"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing during name entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1329-1337",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1329-L1337"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing during name entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1329-1337",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1329-L1337"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "short_label": "TEACH",
    "action": "When prompted for this button, records its physical position in the new panel mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1585-1600",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1585-L1600"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "short_label": "SOUND SET",
    "action": "After HOLD’s 300–600 ms, default 400 ms, opens the sound set layer until released; a key, knob or button combination opens it immediately, and first use can save settings without a question.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "258-278",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L258-L278"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "226-233",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L226-L233"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/panel.c",
      "lines": "76-81",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/panel.c#L76-L81"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_home",
    "short_label": "LOCK SOUND",
    "action": "Locks this shortcut layer open, or closes its own existing lock, with no page tap; use its keys without holding the button and tap its button to close it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "192-215",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L192-L215"
     }
    ]
   }
  ],
  "button_glo": [
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "MIXER PAGES",
    "action": "After a short tap, opens MIXER’s last available page or advances within that family when already open, unless a dialog, menu, name or held layer owns the controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1103-1135",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1103-L1135"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "772-816",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L772-L816"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "press",
    "short_label": "WAKE",
    "action": "Wakes the display and consumes this gesture; PLAY can still stop a running transport, and MASTER does not wake the screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1198-1201",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1198-L1201"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing during name entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1329-1337",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1329-L1337"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing during name entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1329-1337",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1329-L1337"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "short_label": "TEACH",
    "action": "When prompted for this button, records its physical position in the new panel mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1585-1600",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1585-L1600"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "short_label": "QUICK MIX",
    "action": "After HOLD’s 300–600 ms, default 400 ms, opens the quick mix layer until released; a key, knob or button combination opens it immediately, and first use can save settings without a question.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "258-278",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L258-L278"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "226-233",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L226-L233"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/panel.c",
      "lines": "76-81",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/panel.c#L76-L81"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_home",
    "short_label": "LOCK MIX",
    "action": "Locks this shortcut layer open, or closes its own existing lock, with no page tap; use its keys without holding the button and tap its button to close it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "192-215",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L192-L215"
     }
    ]
   }
  ],
  "button_arp": [
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "ARP PAGES",
    "action": "After a short tap, opens ARP’s last available page or advances within that family when already open, unless a dialog, menu, name or held layer owns the controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1103-1135",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1103-L1135"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "772-816",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L772-L816"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "press",
    "short_label": "WAKE",
    "action": "Wakes the display and consumes this gesture; PLAY can still stop a running transport, and MASTER does not wake the screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1198-1201",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1198-L1201"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing during name entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1329-1337",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1329-L1337"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing during name entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1329-1337",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1329-L1337"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "short_label": "TEACH",
    "action": "When prompted for this button, records its physical position in the new panel mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1585-1600",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1585-L1600"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "short_label": "PERFORM",
    "action": "After HOLD’s 300–600 ms, default 400 ms, opens the perform layer until released; a key, knob or button combination opens it immediately, and first use can save settings without a question.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "258-278",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L258-L278"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "226-233",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L226-L233"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/panel.c",
      "lines": "76-81",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/panel.c#L76-L81"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_home",
    "short_label": "LOCK PERFORM",
    "action": "Locks this shortcut layer open, or closes its own existing lock, with no page tap; use its keys without holding the button and tap its button to close it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "192-215",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L192-L215"
     }
    ]
   }
  ],
  "button_seq": [
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "STEP PAGES",
    "action": "After a short tap, opens STEP’s last available page or advances within that family when already open, unless a dialog, menu, name or held layer owns the controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1103-1135",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1103-L1135"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "772-816",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L772-L816"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "press",
    "short_label": "WAKE",
    "action": "Wakes the display and consumes this gesture; PLAY can still stop a running transport, and MASTER does not wake the screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1198-1201",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1198-L1201"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing during name entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1329-1337",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1329-L1337"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing during name entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1329-1337",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1329-L1337"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "short_label": "TEACH",
    "action": "When prompted for this button, records its physical position in the new panel mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1585-1600",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1585-L1600"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "short_label": "SEQ TOOLS",
    "action": "After HOLD’s 300–600 ms, default 400 ms, opens the seq tools layer until released; a key, knob or button combination opens it immediately, and first use can save settings without a question.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "258-278",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L258-L278"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "226-233",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L226-L233"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/panel.c",
      "lines": "76-81",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/panel.c#L76-L81"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_home",
    "short_label": "LOCK TOOLS",
    "action": "Locks this shortcut layer open, or closes its own existing lock, with no page tap; use its keys without holding the button and tap its button to close it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "192-215",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L192-L215"
     }
    ]
   }
  ],
  "button_save": [
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "SAVE PAGES",
    "action": "After a short tap, opens the last SAVE page or advances through PRESETS, USER, PATTERNS and PROJECT; its first opening starts at USER.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1339-1342",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1339-L1342"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "784-791",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L784-L791"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "short_label": "UNDO",
    "action": "After the configured HOLD time of 300–600 ms, default 400 ms, undoes one supported in-memory edit without a question and opens the undo window; it cannot recover overwritten or erased flash slots.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1339-1342",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1339-L1342"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1191-1219",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1191-L1219"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/panel.c",
      "lines": "76-81",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/panel.c#L76-L81"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "press",
    "short_label": "WAKE",
    "action": "Wakes the display and consumes this gesture; PLAY can still stop a running transport, and MASTER does not wake the screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1198-1201",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1198-L1201"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_home",
    "short_label": "TAKE",
    "action": "Adds the last completed pass’s notes and knob moves to the selected track in memory without a question while REC is disarmed, replacing a mono step’s note or merging at most four poly notes; SAVE held can undo the TAKE and patterns save later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_take.c",
      "lines": "112-171",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_take.c#L112-L171"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "464-505",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L464-L505"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing during name entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1329-1337",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1329-L1337"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing during name entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1329-1337",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1329-L1337"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "short_label": "TEACH",
    "action": "When prompted for this button, records its physical position in the new panel mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1585-1600",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1585-L1600"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "long_press",
    "short_label": "-",
    "action": "Does not undo while pressed after this active layer’s modifier; leave the layer before holding SAVE for undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1253-1259",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1253-L1259"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "long_press",
    "short_label": "-",
    "action": "Does not undo while pressed after this active layer’s modifier; leave the layer before holding SAVE for undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1253-1259",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1253-L1259"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "long_press",
    "short_label": "-",
    "action": "Does not undo while pressed after this active layer’s modifier; leave the layer before holding SAVE for undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1253-1259",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1253-L1259"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "long_press",
    "short_label": "-",
    "action": "Does not undo while pressed after this active layer’s modifier; leave the layer before holding SAVE for undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1253-1259",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1253-L1259"
     }
    ]
   },
   {
    "mode": "layer_seq_drum",
    "gesture": "long_press",
    "short_label": "-",
    "action": "Does not undo while pressed after this active layer’s modifier; leave the layer before holding SAVE for undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1253-1259",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1253-L1259"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "long_press",
    "short_label": "-",
    "action": "Does not undo while pressed after this active layer’s modifier; leave the layer before holding SAVE for undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1253-1259",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1253-L1259"
     }
    ]
   },
   {
    "mode": "layer_perf_track",
    "gesture": "long_press",
    "short_label": "-",
    "action": "Does not undo while pressed after this active layer’s modifier; leave the layer before holding SAVE for undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1253-1259",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1253-L1259"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "long_press",
    "short_label": "-",
    "action": "Does not undo while pressed after this active layer’s modifier; leave the layer before holding SAVE for undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1253-1259",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1253-L1259"
     }
    ]
   },
   {
    "mode": "menu_display",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing while this modal screen owns the buttons.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1321-1327",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1321-L1327"
     }
    ]
   },
   {
    "mode": "menu_control",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing while this modal screen owns the buttons.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1321-1327",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1321-L1327"
     }
    ]
   },
   {
    "mode": "menu_audio",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing while this modal screen owns the buttons.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1321-1327",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1321-L1327"
     }
    ]
   },
   {
    "mode": "menu_system",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing while this modal screen owns the buttons.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1321-1327",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1321-L1327"
     }
    ]
   },
   {
    "mode": "about",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing while this modal screen owns the buttons.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1321-1327",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1321-L1327"
     }
    ]
   },
   {
    "mode": "dialog",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing while this modal screen owns the buttons.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1343-1394",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1343-L1394"
     }
    ]
   }
  ],
  "button_home": [
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "HOME",
    "action": "After a short tap outside a modal screen, closes a locked layer and returns HOME; on HOME it switches between track view and scope.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1396-1404",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1396-L1404"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "short_label": "SHIFT / MENU",
    "action": "Acts as SHIFT as soon as HOME is down; holding past the configured HOLD time of 300–600 ms, default 400 ms, then releasing without a combination opens MENU and writes nothing by itself.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1203-1213",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1203-L1213"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/panel.c",
      "lines": "76-81",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/panel.c#L76-L81"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1035-1049",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1035-L1049"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1035-1049",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1035-L1049"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1203-1228",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1203-L1228"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "short_label": "SHIFT MAP",
    "action": "After 250 ms alone, shows the page’s control map while HINTS is on; using a SHIFT combination cancels the menu gesture.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1306-1317",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1306-L1317"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "press",
    "short_label": "WAKE",
    "action": "Wakes the display and consumes this gesture; PLAY can still stop a running transport, and MASTER does not wake the screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1198-1201",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1198-L1201"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing during name entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1329-1337",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1329-L1337"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing during name entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1329-1337",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1329-L1337"
     }
    ]
   },
   {
    "mode": "menu_display",
    "gesture": "release",
    "short_label": "CLOSE",
    "action": "Closes the menu and queues changed settings for flash now if stopped, or after the transport stops.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "456-465",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L456-L465"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1297-1299",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1297-L1299"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1409-1440",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1409-L1440"
     }
    ]
   },
   {
    "mode": "menu_control",
    "gesture": "release",
    "short_label": "CLOSE",
    "action": "Closes the menu and queues changed settings for flash now if stopped, or after the transport stops.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "456-465",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L456-L465"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1297-1299",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1297-L1299"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1409-1440",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1409-L1440"
     }
    ]
   },
   {
    "mode": "menu_audio",
    "gesture": "release",
    "short_label": "CLOSE",
    "action": "Closes the menu and queues changed settings for flash now if stopped, or after the transport stops.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "456-465",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L456-L465"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1297-1299",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1297-L1299"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1409-1440",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1409-L1440"
     }
    ]
   },
   {
    "mode": "menu_system",
    "gesture": "release",
    "short_label": "CLOSE",
    "action": "Closes the menu and queues changed settings for flash now if stopped, or after the transport stops.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "456-465",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L456-L465"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1297-1299",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1297-L1299"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1409-1440",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1409-L1440"
     }
    ]
   },
   {
    "mode": "about",
    "gesture": "release",
    "short_label": "CLOSE",
    "action": "Closes the menu and queues changed settings for flash now if stopped, or after the transport stops.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1297-1299",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1297-L1299"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "456-465",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L456-L465"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1409-1440",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1409-L1440"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "short_label": "TEACH",
    "action": "When prompted for this button, records its physical position in the new panel mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1585-1600",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1585-L1600"
     }
    ]
   },
   {
    "mode": "dialog",
    "gesture": "release",
    "short_label": "-",
    "action": "Does nothing while a confirmation is open; answer with OCT- or OCT+.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1343-1394",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1343-L1394"
     }
    ]
   }
  ],
  "button_play_stop": [
   {
    "mode": "any",
    "gesture": "press",
    "short_label": "PLAY / STOP",
    "action": "Starts or stops the transport, cancelling a count-in; it also works over MENU and confirmation dialogs.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "440-447",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L440-L447"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1318-1320",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1318-L1320"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "press",
    "short_label": "WAKE",
    "action": "Wakes the display and consumes this gesture; PLAY can still stop a running transport, and MASTER does not wake the screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1198-1201",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1198-L1201"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press",
    "short_label": "RESTART",
    "action": "Starts playback or restarts from the top, including the first list entries with SONG on, unless an external clock is running.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "588-603",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L588-L603"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "780-795",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L780-L795"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "press",
    "short_label": "STOP TO SAVE",
    "action": "Stops playback or count-in already running, so the name can be saved, and never starts playback here.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1329-1337",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1329-L1337"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "press",
    "short_label": "STOP TO SAVE",
    "action": "Stops playback or count-in already running, so the name can be saved, and never starts playback here.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1329-1337",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1329-L1337"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "short_label": "TEACH",
    "action": "When prompted for this button, records its physical position in the new panel mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1585-1600",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1585-L1600"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "short_label": "PLAY LIVE",
    "action": "Starts live recording from stopped while REC is armed, with the configured internal-clock count-in if enabled.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "416-452",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L416-L452"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "1073-1095",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L1073-L1095"
     }
    ]
   }
  ],
  "button_rec": [
   {
    "mode": "any",
    "gesture": "press",
    "short_label": "RECORD ARM",
    "action": "Arms or disarms the selected track immediately, starting live recording if stopped except on a melodic STEP or ROLL page; MENU, NAME and dialogs intercept it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "416-438",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L416-L438"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1321-1337",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1321-L1337"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "short_label": "RECORD ARM",
    "action": "Disarms the selected track, or rearms step entry without starting playback while stopped.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "416-438",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L416-L438"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "press",
    "short_label": "WAKE",
    "action": "Wakes the display and consumes this gesture; PLAY can still stop a running transport, and MASTER does not wake the screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1198-1201",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1198-L1201"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing during name entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1329-1337",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1329-L1337"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing during name entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1329-1337",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1329-L1337"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "short_label": "TEACH",
    "action": "When prompted for this button, records its physical position in the new panel mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1585-1600",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1585-L1600"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_home",
    "short_label": "REC SETTINGS",
    "action": "Opens or closes the locked REC settings layer without changing recording arming; REC held alone still arms immediately and does not open this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1221-1228",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1221-L1228"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "97-108",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L97-L108"
     }
    ]
   },
   {
    "mode": "menu_display",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing while this modal screen owns the buttons.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1321-1327",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1321-L1327"
     }
    ]
   },
   {
    "mode": "menu_control",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing while this modal screen owns the buttons.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1321-1327",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1321-L1327"
     }
    ]
   },
   {
    "mode": "menu_audio",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing while this modal screen owns the buttons.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1321-1327",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1321-L1327"
     }
    ]
   },
   {
    "mode": "menu_system",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing while this modal screen owns the buttons.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1321-1327",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1321-L1327"
     }
    ]
   },
   {
    "mode": "about",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing while this modal screen owns the buttons.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1321-1327",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1321-L1327"
     }
    ]
   },
   {
    "mode": "dialog",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing while this modal screen owns the buttons.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1343-1394",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1343-L1394"
     }
    ]
   }
  ],
  "button_oct_down": [
   {
    "mode": "any",
    "gesture": "press",
    "short_label": "OCT -",
    "action": "Moves the keyboard one octave down within three octaves each way, outside action pages and other octave overrides.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1426-1438",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1426-L1438"
     }
    ]
   },
   {
    "mode": "undo_window",
    "gesture": "press",
    "short_label": "UNDO BACK",
    "action": "Goes one supported in-memory edit further back without a question.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1431-1433",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1431-L1433"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1191-1219",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1191-L1219"
     }
    ]
   },
   {
    "mode": "dialog",
    "gesture": "release",
    "short_label": "CANCEL",
    "action": "Cancels the displayed operation without applying it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1343-1394",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1343-L1394"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_with:button_oct_up",
    "short_label": "OCTAVE ZERO",
    "action": "Together outside octave overrides, resets the keyboard octave to zero; keeping both held starts the update countdown.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1435-1438",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1435-L1438"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/main.c",
      "lines": "220-246",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/main.c#L220-L246"
     }
    ]
   },
   {
    "mode": "user",
    "gesture": "release",
    "short_label": "BACK",
    "action": "Drops the selected action or delete choice, otherwise returns HOME; SONG also cancels the selected track’s pending entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1455-1465",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1455-L1465"
     }
    ]
   },
   {
    "mode": "pool",
    "gesture": "release",
    "short_label": "BACK",
    "action": "Drops the selected action or delete choice, otherwise returns HOME; SONG also cancels the selected track’s pending entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1455-1465",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1455-L1465"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "release",
    "short_label": "BACK",
    "action": "Drops the selected action or delete choice, otherwise returns HOME; SONG also cancels the selected track’s pending entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1455-1465",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1455-L1465"
     }
    ]
   },
   {
    "mode": "automation",
    "gesture": "release",
    "short_label": "BACK",
    "action": "Drops the selected action or delete choice, otherwise returns HOME; SONG also cancels the selected track’s pending entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1455-1465",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1455-L1465"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "release",
    "short_label": "BACK",
    "action": "Drops the pending pattern choice, or cancels the selected track’s hand-staged entry if no choice is pending, without returning HOME or undoing an entry already launched.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "1123-1133",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L1123-L1133"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "release",
    "short_label": "BACK",
    "action": "Drops the selected action or delete choice, otherwise returns HOME; SONG also cancels the selected track’s pending entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1455-1465",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1455-L1465"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "press",
    "short_label": "WAKE",
    "action": "Wakes the display and consumes this gesture; PLAY can still stop a running transport, and MASTER does not wake the screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1198-1201",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1198-L1201"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "release",
    "short_label": "ALL FX OFF",
    "action": "Clears every toggled effect and resets all four macros without a prompt.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "617-628",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L617-L628"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "release",
    "short_label": "UNDO MIX",
    "action": "Restores all six track levels and mutes plus the tempo captured when this layer opened, without asking.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "654-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L654-L660"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "release",
    "short_label": "UNDO SCALE",
    "action": "Restores the opening root, scale, quantize, transpose, chord and voicing values on the original track without asking.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "662-666",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L662-L666"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "release",
    "short_label": "UNDO SOUND",
    "action": "Restores the sound before the first layer load through the undo history, without asking.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "629-632",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L629-L632"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "release",
    "short_label": "UNDO TOOLS",
    "action": "Restores the opening steps, automation, LEN, DIV, SWING and GATE on the original track without asking.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "633-651",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L633-L651"
     }
    ]
   },
   {
    "mode": "layer_seq_drum",
    "gesture": "release",
    "short_label": "UNDO TOOLS",
    "action": "Restores the opening steps, automation, LEN, DIV, SWING and GATE on the original track without asking.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "633-651",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L633-L651"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "release",
    "short_label": "UNDO REC",
    "action": "Restores the original track’s opening steps and automation plus the opening recording preferences without asking.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "633-651",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L633-L651"
     }
    ]
   },
   {
    "mode": "layer_perf_track",
    "gesture": "release",
    "short_label": "CANCEL STAGE",
    "action": "Cancels all pending hand-triggered pattern launches and mutes, without reversing changes already heard or SONG’s automatic next entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "807-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L807-L820"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "release",
    "short_label": "CANCEL STAGE",
    "action": "Cancels all pending hand-triggered pattern launches and mutes, without reversing changes already heard or SONG’s automatic next entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "807-820",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L807-L820"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "release",
    "short_label": "CANCEL NAME",
    "action": "Closes name entry without writing the draft name or pending save.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "271-274",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L271-L274"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "release",
    "short_label": "CANCEL NAME",
    "action": "Closes name entry without writing the draft name or pending save.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "271-274",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L271-L274"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "release",
    "short_label": "BACK",
    "action": "Drops the selected action or returns HOME when no action is selected.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1455-1465",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1455-L1465"
     }
    ]
   },
   {
    "mode": "menu_display",
    "gesture": "release",
    "short_label": "THEME",
    "action": "When THEME is selected, chooses the screen theme by one previous available value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "186-190",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L186-L190"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_display",
    "gesture": "release",
    "short_label": "LARGE",
    "action": "When LARGE is selected, turns enlarged control labels and values off.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "63",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L63"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "61-64",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L61-L64"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "228-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L228-L237"
     }
    ]
   },
   {
    "mode": "menu_display",
    "gesture": "release",
    "short_label": "ANIM",
    "action": "When ANIM is selected, enables or disables screen animation by one previous available value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "64",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L64"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_display",
    "gesture": "release",
    "short_label": "LEDS",
    "action": "When LEDS is selected, chooses OFF, DIM LO, DIM HI or inverted idle lights by one previous available value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "194",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L194"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_display",
    "gesture": "release",
    "short_label": "SCREEN OFF",
    "action": "When SCREEN OFF is selected, sets idle screen sleep to never, 5, 15, 30 or 60 minutes by one previous available value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "193",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L193"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_display",
    "gesture": "release",
    "short_label": "HINTS",
    "action": "When HINTS is selected, shows or hides the short hints and SHIFT map by one previous available value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "199",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L199"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_control",
    "gesture": "release",
    "short_label": "HOLD",
    "action": "When HOLD is selected, sets the button hold threshold to 0.3, 0.4, 0.5 or 0.6 seconds by one previous available value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "192",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L192"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_control",
    "gesture": "release",
    "short_label": "KNOB ACCEL",
    "action": "When KNOB ACCEL is selected, enables or disables faster changes during a quick knob turn by one previous available value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "65",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L65"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_control",
    "gesture": "release",
    "short_label": "BPM LOCK",
    "action": "When BPM LOCK is selected, sets whether unmodified SELECT changes pages rather than tempo by one previous available value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "67",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L67"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_control",
    "gesture": "release",
    "short_label": "SCALE LEDS",
    "action": "When SCALE LEDS is selected, shows or hides the scale on melodic keys by one previous available value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "70",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L70"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_control",
    "gesture": "release",
    "short_label": "CLOCK",
    "action": "When CLOCK is selected, chooses internal, USB or TRS clock for the unit by one previous available value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "196",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L196"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_control",
    "gesture": "release",
    "short_label": "MIDI IN",
    "action": "When MIDI IN is selected, routes channels 1–6 to tracks 1–6 or every channel to the selected track by one previous available value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "197",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L197"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_audio",
    "gesture": "release",
    "short_label": "SPEAKER EQ",
    "action": "When SPEAKER EQ is selected, chooses FLAT, LOWCUT or BASS+ for speaker, headphones and USB audio by one previous available value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "72-76",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L72-L76"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_audio",
    "gesture": "release",
    "short_label": "USB LEVEL",
    "action": "When USB LEVEL is selected, makes USB audio follow MASTER or use a fixed full level by one previous available value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "66",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L66"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_audio",
    "gesture": "release",
    "short_label": "CLICK",
    "action": "When CLICK is selected, sets the metronome to OFF, REC or ON by one previous available value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "195",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L195"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_audio",
    "gesture": "release",
    "short_label": "CLICK LEVEL",
    "action": "When CLICK LEVEL is selected, sets the metronome to LOW, MID or HIGH by one previous available value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "195",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L195"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_audio",
    "gesture": "release",
    "short_label": "COUNT-IN",
    "action": "When COUNT-IN is selected, sets recording count-in to OFF, one bar or two bars by one previous available value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "195",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L195"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_audio",
    "gesture": "release",
    "short_label": "TUNE",
    "action": "When TUNE is selected, tunes the whole unit by up to 50 cents in either direction by one previous available value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "198",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L198"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_system",
    "gesture": "release",
    "short_label": "USB SERIAL",
    "action": "When USB SERIAL is selected, enables or disables the serial console, reconnecting USB after the menu closes by one previous available value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "85-101",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L85-L101"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_system",
    "gesture": "release",
    "short_label": "RESTORE LAST",
    "action": "When RESTORE LAST is selected, enables or disables the music autosave and its restoration at power-on by one previous available value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "69",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L69"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_system",
    "gesture": "release",
    "short_label": "CPU",
    "action": "When CPU is selected, leaves the audio workload display unchanged.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "159-166",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L159-L166"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_system",
    "gesture": "release",
    "short_label": "-",
    "action": "Does nothing on CALIBRATION, RESET SETTINGS and ABOUT.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "502-520",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L502-L520"
     }
    ]
   },
   {
    "mode": "about",
    "gesture": "release",
    "short_label": "BACK",
    "action": "Returns to the menu tabs.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "488-494",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L488-L494"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "short_label": "TEACH",
    "action": "When prompted for this button, records its physical position in the new panel mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1585-1600",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1585-L1600"
     }
    ]
   },
   {
    "mode": "reset_settings_confirm",
    "gesture": "release",
    "short_label": "CANCEL",
    "action": "Dismisses the reset question without resetting settings.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1388-1392",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1388-L1392"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press",
    "short_label": "OCT -",
    "action": "Shifts the normal keyboard octave while FX is held; this is not the locked layer’s ALL OFF control.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1426-1438",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1426-L1438"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "617-628",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L617-L628"
     }
    ]
   },
   {
    "mode": "confirm_user_erase",
    "gesture": "release",
    "short_label": "CANCEL",
    "action": "Cancels this action before its confirming change.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1388-1390",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1388-L1390"
     }
    ]
   },
   {
    "mode": "confirm_user_replace",
    "gesture": "release",
    "short_label": "CANCEL",
    "action": "Cancels this action before its confirming change.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1388-1390",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1388-L1390"
     }
    ]
   },
   {
    "mode": "confirm_project_replace",
    "gesture": "release",
    "short_label": "CANCEL",
    "action": "Cancels this action before its confirming change.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1388-1390",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1388-L1390"
     }
    ]
   },
   {
    "mode": "confirm_project_load",
    "gesture": "release",
    "short_label": "CANCEL",
    "action": "Cancels this action before its confirming change.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1388-1390",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1388-L1390"
     }
    ]
   },
   {
    "mode": "confirm_pool_clear",
    "gesture": "release",
    "short_label": "CANCEL",
    "action": "Cancels this action before its confirming change.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1388-1390",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1388-L1390"
     }
    ]
   },
   {
    "mode": "confirm_entry_clear",
    "gesture": "release",
    "short_label": "CANCEL",
    "action": "Cancels this action before its confirming change.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1388-1390",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1388-L1390"
     }
    ]
   },
   {
    "mode": "confirm_sound_init",
    "gesture": "release",
    "short_label": "CANCEL",
    "action": "Cancels this action before its confirming change.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1388-1390",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1388-L1390"
     }
    ]
   },
   {
    "mode": "confirm_motion_clear",
    "gesture": "release",
    "short_label": "CANCEL",
    "action": "Cancels this action before its confirming change.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1388-1390",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1388-L1390"
     }
    ]
   },
   {
    "mode": "confirm_scene_replace",
    "gesture": "release",
    "short_label": "CANCEL",
    "action": "Cancels this action before its confirming change.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1388-1390",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1388-L1390"
     }
    ]
   },
   {
    "mode": "name_user_save",
    "gesture": "release",
    "short_label": "CANCEL NAME",
    "action": "Cancels the pending save or rename without writing its draft name.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "271-274",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L271-L274"
     }
    ]
   },
   {
    "mode": "name_user_rename",
    "gesture": "release",
    "short_label": "CANCEL NAME",
    "action": "Cancels the pending save or rename without writing its draft name.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "271-274",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L271-L274"
     }
    ]
   },
   {
    "mode": "name_project_save",
    "gesture": "release",
    "short_label": "CANCEL NAME",
    "action": "Cancels the pending save or rename without writing its draft name.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "271-274",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L271-L274"
     }
    ]
   },
   {
    "mode": "name_project_rename",
    "gesture": "release",
    "short_label": "CANCEL NAME",
    "action": "Cancels the pending save or rename without writing its draft name.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "271-274",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L271-L274"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_with:button_oct_up",
    "short_label": "UPDATE MODE",
    "action": "Holding OCT- and OCT+ together for more than five seconds stops audio and enters UPDATE MODE without saving the current session or asking; releasing either before the deadline cancels it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/main.c",
      "lines": "220-246",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/main.c#L220-L246"
     }
    ]
   }
  ],
  "button_oct_up": [
   {
    "mode": "any",
    "gesture": "press",
    "short_label": "OCT +",
    "action": "Moves the keyboard one octave up within three octaves each way, outside action pages and other octave overrides.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1426-1438",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1426-L1438"
     }
    ]
   },
   {
    "mode": "undo_window",
    "gesture": "press",
    "short_label": "REDO",
    "action": "Reapplies one undone in-memory edit without a question.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1431-1433",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1431-L1433"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1191-1219",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1191-L1219"
     }
    ]
   },
   {
    "mode": "dialog",
    "gesture": "release",
    "short_label": "CONFIRM",
    "action": "Accepts the displayed operation; the action-specific entries state its scope and save timing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1343-1394",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1343-L1394"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_with:button_oct_down",
    "short_label": "UPDATE MODE",
    "action": "Holding OCT- and OCT+ together for more than five seconds stops audio and enters UPDATE MODE without saving the current session or asking; releasing either before the deadline cancels it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/main.c",
      "lines": "220-246",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/main.c#L220-L246"
     }
    ]
   },
   {
    "mode": "user",
    "gesture": "release",
    "short_label": "USER ACTION",
    "action": "Runs the chosen USER action, with LOAD retaining steps but removing old engine-control and drum-lane-level automation and locks if the engine changes and offering SAVE-held undo; ERASE asks, then immediately rewrites the sound bank while stopped without undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "871-889",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L871-L889"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/upreset.c",
      "lines": "244-289",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/upreset.c#L244-L289"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/upreset.c",
      "lines": "458-482",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/upreset.c#L458-L482"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/motion.c",
      "lines": "374-398",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/motion.c#L374-L398"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1042-1049",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1042-L1049"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "release",
    "short_label": "PROJECT GO",
    "action": "Runs LOAD, NAME or SAVE for the selected project, asking before a changed session is replaced or a used project is overwritten; naming confirms the actual flash write and project load has no undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "891-914",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L891-L914"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "915",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L915"
     }
    ]
   },
   {
    "mode": "pool",
    "gesture": "release",
    "short_label": "CLEAR POOL",
    "action": "While stopped, asks before clearing a stored pattern that no project entry uses; confirmation deletes it from the pool in flash and undo cannot recover it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "853-869",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L853-L869"
     }
    ]
   },
   {
    "mode": "automation",
    "gesture": "release",
    "short_label": "EVENT ACTION",
    "action": "Adds a lock, changes LOCK to AUTO or back, or deletes the selected record without another question; these memory edits have SAVE-held undo and are saved later with the pattern.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "833-835",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L833-L835"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_events.c",
      "lines": "217-264",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_events.c#L217-L264"
     }
    ]
   },
   {
    "mode": "automation",
    "gesture": "release",
    "short_label": "CLEAR MOTION",
    "action": "With CLEAR selected on the top row, asks before removing the selected track’s automation and locks in memory; SAVE held can undo it and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1358-1360",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1358-L1360"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_events.c",
      "lines": "221-232",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_events.c#L221-L232"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "release",
    "short_label": "ENTRY ACTION",
    "action": "Plays the chosen entry or commits PATTERN, COPY or CLEAR; CLEAR asks while stopped, and changing an entry affects project memory while pattern copies and unused-pattern removal write the pool without a separate undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "837-844",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L837-L844"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "999-1080",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L999-L1080"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "press",
    "short_label": "WAKE",
    "action": "Wakes the display and consumes this gesture; PLAY can still stop a running transport, and MASTER does not wake the screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1198-1201",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1198-L1201"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "release",
    "short_label": "-",
    "action": "Does nothing and does not shift the octave in this settings layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "617-671",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L617-L671"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "release",
    "short_label": "-",
    "action": "Does nothing and does not shift the octave in this settings layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "617-671",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L617-L671"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "release",
    "short_label": "-",
    "action": "Does nothing and does not shift the octave in this settings layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "617-671",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L617-L671"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "release",
    "short_label": "-",
    "action": "Does nothing and does not shift the octave in this settings layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "617-671",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L617-L671"
     }
    ]
   },
   {
    "mode": "layer_seq_drum",
    "gesture": "release",
    "short_label": "-",
    "action": "Does nothing and does not shift the octave in this settings layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "617-671",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L617-L671"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "release",
    "short_label": "-",
    "action": "Does nothing and does not shift the octave in this settings layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "617-671",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L617-L671"
     }
    ]
   },
   {
    "mode": "layer_perf_track",
    "gesture": "release",
    "short_label": "-",
    "action": "Does nothing and does not shift the octave in this settings layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "617-671",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L617-L671"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "release",
    "short_label": "-",
    "action": "Does nothing and does not shift the octave in this settings layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "617-671",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L617-L671"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "release",
    "short_label": "WRITE NAME",
    "action": "While stopped, commits the pending sound or project save or rename to flash without another question and without undo; the save-target entries name its contents and bank effects.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "207-238",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L207-L238"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "release",
    "short_label": "WRITE NAME",
    "action": "While stopped, commits the pending sound or project save or rename to flash without another question and without undo; the save-target entries name its contents and bank effects.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "207-238",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L207-L238"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "release",
    "short_label": "-",
    "action": "Does nothing and does not shift the octave while FX is locked.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "617-671",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L617-L671"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "release",
    "short_label": "DO",
    "action": "Splits the chosen user slice at its midpoint or joins it to the previous slice, applying it now and saving after leaving SLICES with the transport stopped, without a question or slice undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_slice.c",
      "lines": "167-198",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_slice.c#L167-L198"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_slice.c",
      "lines": "379-410",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_slice.c#L379-L410"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/slice_store.c",
      "lines": "88-105",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/slice_store.c#L88-L105"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "846-850",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L846-L850"
     }
    ]
   },
   {
    "mode": "menu_display",
    "gesture": "release",
    "short_label": "THEME",
    "action": "When THEME is selected, chooses the screen theme by one next available value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "186-190",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L186-L190"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_display",
    "gesture": "release",
    "short_label": "LARGE",
    "action": "When LARGE is selected, sets larger control labels and values by one next available value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "63",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L63"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_display",
    "gesture": "release",
    "short_label": "ANIM",
    "action": "When ANIM is selected, enables or disables screen animation by one next available value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "64",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L64"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_display",
    "gesture": "release",
    "short_label": "LEDS",
    "action": "When LEDS is selected, chooses OFF, DIM LO, DIM HI or inverted idle lights by one next available value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "194",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L194"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_display",
    "gesture": "release",
    "short_label": "SCREEN OFF",
    "action": "When SCREEN OFF is selected, sets idle screen sleep to never, 5, 15, 30 or 60 minutes by one next available value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "193",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L193"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_display",
    "gesture": "release",
    "short_label": "HINTS",
    "action": "When HINTS is selected, shows or hides the short hints and SHIFT map by one next available value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "199",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L199"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_control",
    "gesture": "release",
    "short_label": "HOLD",
    "action": "When HOLD is selected, sets the button hold threshold to 0.3, 0.4, 0.5 or 0.6 seconds by one next available value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "192",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L192"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_control",
    "gesture": "release",
    "short_label": "KNOB ACCEL",
    "action": "When KNOB ACCEL is selected, enables or disables faster changes during a quick knob turn by one next available value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "65",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L65"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_control",
    "gesture": "release",
    "short_label": "BPM LOCK",
    "action": "When BPM LOCK is selected, sets whether unmodified SELECT changes pages rather than tempo by one next available value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "67",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L67"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_control",
    "gesture": "release",
    "short_label": "SCALE LEDS",
    "action": "When SCALE LEDS is selected, shows or hides the scale on melodic keys by one next available value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "70",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L70"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_control",
    "gesture": "release",
    "short_label": "CLOCK",
    "action": "When CLOCK is selected, chooses internal, USB or TRS clock for the unit by one next available value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "196",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L196"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_control",
    "gesture": "release",
    "short_label": "MIDI IN",
    "action": "When MIDI IN is selected, routes channels 1–6 to tracks 1–6 or every channel to the selected track by one next available value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "197",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L197"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_audio",
    "gesture": "release",
    "short_label": "SPEAKER EQ",
    "action": "When SPEAKER EQ is selected, chooses FLAT, LOWCUT or BASS+ for speaker, headphones and USB audio by one next available value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "72-76",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L72-L76"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_audio",
    "gesture": "release",
    "short_label": "USB LEVEL",
    "action": "When USB LEVEL is selected, makes USB audio follow MASTER or use a fixed full level by one next available value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "66",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L66"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_audio",
    "gesture": "release",
    "short_label": "CLICK",
    "action": "When CLICK is selected, sets the metronome to OFF, REC or ON by one next available value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "195",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L195"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_audio",
    "gesture": "release",
    "short_label": "CLICK LEVEL",
    "action": "When CLICK LEVEL is selected, sets the metronome to LOW, MID or HIGH by one next available value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "195",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L195"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_audio",
    "gesture": "release",
    "short_label": "COUNT-IN",
    "action": "When COUNT-IN is selected, sets recording count-in to OFF, one bar or two bars by one next available value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "195",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L195"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_audio",
    "gesture": "release",
    "short_label": "TUNE",
    "action": "When TUNE is selected, tunes the whole unit by up to 50 cents in either direction by one next available value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "198",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L198"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_system",
    "gesture": "release",
    "short_label": "USB SERIAL",
    "action": "When USB SERIAL is selected, enables or disables the serial console, reconnecting USB after the menu closes by one next available value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "85-101",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L85-L101"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_system",
    "gesture": "release",
    "short_label": "RESTORE LAST",
    "action": "When RESTORE LAST is selected, enables or disables the music autosave and its restoration at power-on by one next available value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "69",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L69"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_system",
    "gesture": "release",
    "short_label": "CPU",
    "action": "When CPU is selected, leaves the audio workload display unchanged.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "159-166",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L159-L166"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "500-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L500-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "224-237",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L224-L237"
     }
    ]
   },
   {
    "mode": "menu_system",
    "gesture": "release",
    "short_label": "CALIBRATION",
    "action": "With CALIBRATION selected, starts panel teaching; a complete sequence applies the new mapping in memory and menu close writes settings when stopped without another question or calibration undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "508-512",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L508-L512"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1575-1634",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1575-L1634"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "456-465",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L456-L465"
     }
    ]
   },
   {
    "mode": "menu_system",
    "gesture": "release",
    "short_label": "RESET",
    "action": "When RESET SETTINGS is selected, saves current menu changes and opens a confirmation before resetting settings.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "513-515",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L513-L515"
     }
    ]
   },
   {
    "mode": "menu_system",
    "gesture": "release",
    "short_label": "ABOUT",
    "action": "When ABOUT is selected, opens the version, credits and repository QR code.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "516-519",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L516-L519"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "120-151",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L120-L151"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "short_label": "TEACH",
    "action": "When prompted for this button, records its physical position in the new panel mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1585-1600",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1585-L1600"
     }
    ]
   },
   {
    "mode": "reset_settings_confirm",
    "gesture": "release",
    "short_label": "RESET",
    "action": "Resets MENU settings immediately and queues their flash save now if stopped, or after the transport stops, keeping calibration, favourites and music without settings undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "202-223",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L202-L223"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1365-1367",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1365-L1367"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1409-1440",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1409-L1440"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press",
    "short_label": "OCT +",
    "action": "Shifts the normal keyboard octave while FX is held; this is not the locked layer’s ALL OFF control.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1426-1438",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1426-L1438"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "617-628",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L617-L628"
     }
    ]
   },
   {
    "mode": "confirm_user_erase",
    "gesture": "release",
    "short_label": "ERASE SOUND",
    "action": "Erases the chosen sound record and its favourite mark and rewrites its sixteen-slot bank in flash while stopped without another question or undo; an old FM6 companion patch can remain but is no longer a listed sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/upreset.c",
      "lines": "244-289",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/upreset.c#L244-L289"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1352-1353",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1352-L1353"
     }
    ]
   },
   {
    "mode": "confirm_user_replace",
    "gesture": "release",
    "short_label": "REPLACE USER",
    "action": "Opens NAME for the selected used sound slot without writing yet; OCT+ in NAME commits the new sound and has no flash undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1348-1351",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1348-L1351"
     }
    ]
   },
   {
    "mode": "confirm_project_replace",
    "gesture": "release",
    "short_label": "REPLACE PROJ",
    "action": "Opens NAME for the selected used project without writing yet; OCT+ in NAME commits the project and has no flash undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1348-1351",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1348-L1351"
     }
    ]
   },
   {
    "mode": "confirm_project_load",
    "gesture": "release",
    "short_label": "LOAD PROJECT",
    "action": "Loads the chosen project after keeping current patterns to the shared pool, stopping transport and replacing the session without undo; CLOCK, MIDI IN and TUNE remain the unit’s.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1341-1370",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1341-L1370"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1267-1312",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1267-L1312"
     }
    ]
   },
   {
    "mode": "confirm_pool_clear",
    "gesture": "release",
    "short_label": "CLEAR POOL",
    "action": "While stopped, erases the unused selected pool pattern in flash without a further question and without undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "1033-1062",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L1033-L1062"
     }
    ]
   },
   {
    "mode": "confirm_entry_clear",
    "gesture": "release",
    "short_label": "CLEAR ENTRY",
    "action": "While stopped, empties the chosen list entry and clears its active track if on it, erasing its pool pattern in flash only if no other current or saved entry refers to it; the list edit saves later and none of this has undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "563-604",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L563-L604"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "617-621",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L617-L621"
     }
    ]
   },
   {
    "mode": "confirm_sound_init",
    "gesture": "release",
    "short_label": "INIT SOUND",
    "action": "Resets the selected track’s sound in memory, making FM6 a bare sine or resetting the shared DRUM-X kit too, without another question; SAVE held can undo it and the session is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1396-1411",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1396-L1411"
     }
    ]
   },
   {
    "mode": "confirm_motion_clear",
    "gesture": "release",
    "short_label": "CLEAR MOTION",
    "action": "Clears the selected track’s automation and parameter locks in memory without another question while retaining its notes; SAVE held can undo it and the pattern saves later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1358-1360",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1358-L1360"
     }
    ]
   },
   {
    "mode": "confirm_scene_replace",
    "gesture": "release",
    "short_label": "STORE SCENE",
    "action": "Replaces the selected scene’s six entry choices and mutes in project memory without another question or undo; it reaches flash through project save or the later session autosave.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "906-988",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L906-L988"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1368-1369",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1368-L1369"
     }
    ]
   },
   {
    "mode": "name_user_save",
    "gesture": "release",
    "short_label": "WRITE SOUND",
    "action": "While stopped, writes the selected track’s sound into its user slot and rewrites that sixteen-slot sound bank in flash without another question or undo, plus its FM6 patch when relevant; it stores no steps, samples or shared DRUM-X kit.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/upreset.c",
      "lines": "332-368",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/upreset.c#L332-L368"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/upreset.c",
      "lines": "244-279",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/upreset.c#L244-L279"
     }
    ]
   },
   {
    "mode": "name_user_rename",
    "gesture": "release",
    "short_label": "RENAME SOUND",
    "action": "While stopped, changes the stored sound’s name by rewriting its sixteen-slot bank immediately without another question or undo, keeping the sound and other bank slots.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/upreset.c",
      "lines": "371-379",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/upreset.c#L371-L379"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/upreset.c",
      "lines": "244-279",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/upreset.c#L244-L279"
     }
    ]
   },
   {
    "mode": "name_project_save",
    "gesture": "release",
    "short_label": "WRITE PROJ",
    "action": "While stopped, flushes pending shared patterns then writes this project’s six sounds, song lists, scenes and shared DRUM-X kit to the chosen flash slot immediately without another question or undo; pattern numbers refer to the common pool.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1163-1194",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1163-L1194"
     }
    ]
   },
   {
    "mode": "name_project_rename",
    "gesture": "release",
    "short_label": "RENAME PROJ",
    "action": "While stopped, rewrites only the selected stored project’s name immediately in flash without another question or undo, keeping its saved music.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1220-1249",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1220-L1249"
     }
    ]
   }
  ],
  "switch_power": [
   {
    "mode": "startup",
    "gesture": "power_on_holding:button_oct_down+button_oct_up",
    "short_label": "CALIBRATE",
    "action": "Starts panel calibration, then saves the resulting or retained button and encoder mapping without another question; no musical data is cleared and undo cannot restore an earlier mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/main.c",
      "lines": "184-187",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/main.c#L184-L187"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1575-1634",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1575-L1634"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press",
    "short_label": "POWER",
    "action": "Powering off performs no final save; let pending automatic writes finish while stopped before removing power.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/main.c",
      "lines": "280-282",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/main.c#L280-L282"
     }
    ]
   }
  ],
  "knob_master": [
   {
    "mode": "any",
    "gesture": "turn",
    "short_label": "MASTER",
    "action": "Sets speaker and headphone volume, and USB recording volume when USB LEVEL is MASTER; FIXED leaves USB audio at full level.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/master.c",
      "lines": "8-27",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/master.c#L8-L27"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/audio.c",
      "lines": "29-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/audio.c#L29-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/fx.c",
      "lines": "550",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/fx.c#L550"
     }
    ]
   }
  ],
  "jack_usb_c": [
   {
    "mode": "any",
    "gesture": "shows",
    "short_label": "USB",
    "action": "Carries USB MIDI, stereo audio from the unit to a computer, and the editor and updater connection.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/usb.c",
      "lines": "1-28",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/usb.c#L1-L28"
     }
    ]
   }
  ],
  "jack_midi_in": [
   {
    "mode": "any",
    "gesture": "shows",
    "short_label": "MIDI IN",
    "action": "Receives TRS MIDI notes, controls and external clock, using the unit’s CLOCK and MIDI IN choices.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "1065-1071",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L1065-L1071"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "28-31",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L28-L31"
     }
    ]
   }
  ],
  "jack_audio_out": [
   {
    "mode": "any",
    "gesture": "shows",
    "short_label": "AUDIO OUT",
    "action": "Outputs the mix after MASTER and speaker EQ; plugging in headphones silences the hardware speaker.",
    "evidence": "vendor-doc",
    "source": [
     {
      "kind": "doc",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "README.md",
      "lines": "454-458",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/README.md#L454-L458"
     }
    ]
   }
  ],
  "encoder_algorithm": [
   {
    "mode": "any",
    "gesture": "turn",
    "short_label": "TRACK",
    "action": "Selects track 1–6 without wrapping, except where MENU, naming, dialogs or a layer takes it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1494-1497",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1494-L1497"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1597-1607",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1597-L1607"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "turn",
    "short_label": "WAKE",
    "action": "Wakes the display and consumes this gesture; PLAY can still stop a running transport, and MASTER does not wake the screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1198-1201",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1198-L1201"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "turn",
    "short_label": "TRACK",
    "action": "Selects one of the six tracks.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1273-1277",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1273-L1277"
     }
    ]
   },
   {
    "mode": "layer_perf_track",
    "gesture": "turn",
    "short_label": "TRACK",
    "action": "Selects one of the six tracks.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1273-1277",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1273-L1277"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "turn",
    "short_label": "TRACK",
    "action": "Selects one of the six tracks.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1273-1277",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1273-L1277"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing while this layer owns the controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1273-1277",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1273-L1277"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing while this layer owns the controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1273-1277",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1273-L1277"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing while this layer owns the controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1273-1277",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1273-L1277"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing while this layer owns the controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1273-1277",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1273-L1277"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing while this layer owns the controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1273-1277",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1273-L1277"
     }
    ]
   },
   {
    "mode": "layer_seq_drum",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing while this layer owns the controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1273-1277",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1273-L1277"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing while this layer owns the controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1273-1277",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1273-L1277"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing during name entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "267-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L267-L270"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing during name entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "267-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L267-L270"
     }
    ]
   },
   {
    "mode": "menu_display",
    "gesture": "turn",
    "short_label": "TAB",
    "action": "Moves between menu tabs and returns to the last row selected in each tab.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "476-482",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L476-L482"
     }
    ]
   },
   {
    "mode": "menu_control",
    "gesture": "turn",
    "short_label": "TAB",
    "action": "Moves between menu tabs and returns to the last row selected in each tab.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "476-482",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L476-L482"
     }
    ]
   },
   {
    "mode": "menu_audio",
    "gesture": "turn",
    "short_label": "TAB",
    "action": "Moves between menu tabs and returns to the last row selected in each tab.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "476-482",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L476-L482"
     }
    ]
   },
   {
    "mode": "menu_system",
    "gesture": "turn",
    "short_label": "TAB",
    "action": "Moves between menu tabs and returns to the last row selected in each tab.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "476-482",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L476-L482"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "turn_cw",
    "short_label": "TEACH",
    "action": "When prompted for this knob, records its position and clockwise direction in the new panel mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1603-1628",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1603-L1628"
     }
    ]
   }
  ],
  "encoder_select": [
   {
    "mode": "any",
    "gesture": "turn",
    "short_label": "FAMILY PAGE",
    "action": "With BPM LOCK on, moves through available pages in the current family without wrapping; a sound sheet moves through its rows before changing pages.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1498-1513",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1513"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1012-1029",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1012-L1029"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn",
    "short_label": "TEMPO",
    "action": "With BPM LOCK off, sets tempo on ordinary pages and HOME; sound sheets still use SELECT for their rows.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1498-1508",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1508"
     }
    ]
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "BPM LOCKED",
    "action": "With BPM LOCK on, leaves the tempo unchanged and points to GLO plus SELECT.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1509-1513",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1509-L1513"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_glo",
    "short_label": "TEMPO",
    "action": "Changes tempo while GLO is held; the GLO layer’s OCT- can restore its opening tempo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1279-1280",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1279-L1280"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1498-1504",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1504"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "turn",
    "short_label": "WAKE",
    "action": "Wakes the display and consumes this gesture; PLAY can still stop a running transport, and MASTER does not wake the screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1198-1201",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1198-L1201"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "turn",
    "short_label": "TEMPO",
    "action": "Changes the tempo while GLO is held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1279-1280",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1279-L1280"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1498-1506",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1506"
     }
    ]
   },
   {
    "mode": "layer_perf_track",
    "gesture": "turn",
    "short_label": "LAUNCH",
    "action": "Selects when launches arrive: LOOP, BAR, BEAT or NOW, with the preference stored when this layer closes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "446-463",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L446-L463"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "turn",
    "short_label": "LAUNCH",
    "action": "Selects when launches arrive: LOOP, BAR, BEAT or NOW, with the preference stored when this layer closes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "446-463",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L446-L463"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing during name entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "267-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L267-L270"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing during name entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "267-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L267-L270"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "turn",
    "short_label": "BPM LOCK",
    "action": "Changes the tempo only with BPM LOCK off; with BPM LOCK on it does nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1498-1506",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1506"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "turn",
    "short_label": "BPM LOCK",
    "action": "Changes the tempo only with BPM LOCK off; with BPM LOCK on it does nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1498-1506",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1506"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "turn",
    "short_label": "BPM LOCK",
    "action": "Changes the tempo only with BPM LOCK off; with BPM LOCK on it does nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1498-1506",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1506"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "turn",
    "short_label": "BPM LOCK",
    "action": "Changes the tempo only with BPM LOCK off; with BPM LOCK on it does nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1498-1506",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1506"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "turn",
    "short_label": "BPM LOCK",
    "action": "Changes the tempo only with BPM LOCK off; with BPM LOCK on it does nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1498-1506",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1506"
     }
    ]
   },
   {
    "mode": "layer_seq_drum",
    "gesture": "turn",
    "short_label": "BPM LOCK",
    "action": "Changes the tempo only with BPM LOCK off; with BPM LOCK on it does nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1498-1506",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1506"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "turn",
    "short_label": "BPM LOCK",
    "action": "Changes the tempo only with BPM LOCK off; with BPM LOCK on it does nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1498-1506",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1498-L1506"
     }
    ]
   },
   {
    "mode": "fmop_tone",
    "gesture": "turn",
    "short_label": "WINDOW",
    "action": "Moves through the sheet's windows, then continues to the neighbouring EDIT page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1012-1029",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1012-L1029"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "392-400",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L392-L400"
     }
    ]
   },
   {
    "mode": "fmop_env1",
    "gesture": "turn",
    "short_label": "WINDOW",
    "action": "Moves through the sheet's windows, then continues to the neighbouring EDIT page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1012-1029",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1012-L1029"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "392-400",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L392-L400"
     }
    ]
   },
   {
    "mode": "fmop_env2",
    "gesture": "turn",
    "short_label": "WINDOW",
    "action": "Moves through the sheet's windows, then continues to the neighbouring EDIT page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1012-1029",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1012-L1029"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "392-400",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L392-L400"
     }
    ]
   },
   {
    "mode": "fmop_keys",
    "gesture": "turn",
    "short_label": "WINDOW",
    "action": "Moves through the sheet's windows, then continues to the neighbouring EDIT page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1012-1029",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1012-L1029"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "392-400",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L392-L400"
     }
    ]
   },
   {
    "mode": "fmop_more",
    "gesture": "turn",
    "short_label": "WINDOW",
    "action": "Moves through the sheet's windows, then continues to the neighbouring EDIT page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1012-1029",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1012-L1029"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "392-400",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L392-L400"
     }
    ]
   },
   {
    "mode": "fmall_algo",
    "gesture": "turn",
    "short_label": "WINDOW",
    "action": "Moves through the sheet's windows, then continues to the neighbouring EDIT page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1012-1029",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1012-L1029"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "392-400",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L392-L400"
     }
    ]
   },
   {
    "mode": "fmall_pitch1",
    "gesture": "turn",
    "short_label": "WINDOW",
    "action": "Moves through the sheet's windows, then continues to the neighbouring EDIT page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1012-1029",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1012-L1029"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "392-400",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L392-L400"
     }
    ]
   },
   {
    "mode": "fmall_pitch2",
    "gesture": "turn",
    "short_label": "WINDOW",
    "action": "Moves through the sheet's windows, then continues to the neighbouring EDIT page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1012-1029",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1012-L1029"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "392-400",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L392-L400"
     }
    ]
   },
   {
    "mode": "fmall_lfo",
    "gesture": "turn",
    "short_label": "WINDOW",
    "action": "Moves through the sheet's windows, then continues to the neighbouring EDIT page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1012-1029",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1012-L1029"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "392-400",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L392-L400"
     }
    ]
   },
   {
    "mode": "fmall_depth",
    "gesture": "turn",
    "short_label": "WINDOW",
    "action": "Moves through the sheet's windows, then continues to the neighbouring EDIT page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1012-1029",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1012-L1029"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "392-400",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L392-L400"
     }
    ]
   },
   {
    "mode": "dx_osc",
    "gesture": "turn",
    "short_label": "WINDOW",
    "action": "Moves through four SOUND windows, then continues to the neighbouring EDIT page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1012-1029",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1012-L1029"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "23-29",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L23-L29"
     }
    ]
   },
   {
    "mode": "dx_decay",
    "gesture": "turn",
    "short_label": "WINDOW",
    "action": "Moves through four SOUND windows, then continues to the neighbouring EDIT page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1012-1029",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1012-L1029"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "23-29",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L23-L29"
     }
    ]
   },
   {
    "mode": "dx_color",
    "gesture": "turn",
    "short_label": "WINDOW",
    "action": "Moves through four SOUND windows, then continues to the neighbouring EDIT page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1012-1029",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1012-L1029"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "23-29",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L23-L29"
     }
    ]
   },
   {
    "mode": "dx_mode",
    "gesture": "turn",
    "short_label": "WINDOW",
    "action": "Moves through four SOUND windows, then continues to the neighbouring EDIT page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1012-1029",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1012-L1029"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "23-29",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L23-L29"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "turn_cw",
    "short_label": "TEACH",
    "action": "When prompted for this knob, records its position and clockwise direction in the new panel mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1603-1628",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1603-L1628"
     }
    ]
   },
   {
    "mode": "menu_display",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing while this modal screen owns the encoders.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "484-523",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L484-L523"
     }
    ]
   },
   {
    "mode": "menu_control",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing while this modal screen owns the encoders.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "484-523",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L484-L523"
     }
    ]
   },
   {
    "mode": "menu_audio",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing while this modal screen owns the encoders.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "484-523",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L484-L523"
     }
    ]
   },
   {
    "mode": "menu_system",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing while this modal screen owns the encoders.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "484-523",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L484-L523"
     }
    ]
   },
   {
    "mode": "about",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing while this modal screen owns the encoders.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "484-523",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L484-L523"
     }
    ]
   },
   {
    "mode": "dialog",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing while this modal screen owns the encoders.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "449-454",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L449-L454"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1392-1394",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1392-L1394"
     }
    ]
   }
  ],
  "encoder_presets": [
   {
    "mode": "any",
    "gesture": "turn",
    "short_label": "BROWSE SOUND",
    "action": "Browses LIST sounds across allowed engines, keeping steps and mix but removing old engine-control and drum-lane-level automation and locks if the engine changes, while factory DRUM-X kit sounds replace the shared kit except OWN KIT and HADRON KIT; SAVE held can undo the load.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "980-1009",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L980-L1009"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1234-1238",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1234-L1238"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1323-1324",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1323-L1324"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1354-1355",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1354-L1355"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drumx.c",
      "lines": "167-170",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drumx.c#L167-L170"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drumx.c",
      "lines": "244-245",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drumx.c#L244-L245"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/motion.c",
      "lines": "374-398",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/motion.c#L374-L398"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1042-1049",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1042-L1049"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn",
    "short_label": "STEP CURSOR",
    "action": "Moves the step cursor without loading a sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "987-1000",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L987-L1000"
     }
    ]
   },
   {
    "mode": "roll",
    "gesture": "turn",
    "short_label": "STEP CURSOR",
    "action": "Moves the step cursor without loading a sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "987-1000",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L987-L1000"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "turn",
    "short_label": "STEP CURSOR",
    "action": "Moves the step cursor without loading a sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "987-1000",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L987-L1000"
     }
    ]
   },
   {
    "mode": "chance",
    "gesture": "turn",
    "short_label": "STEP CURSOR",
    "action": "Moves the step cursor without loading a sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "987-1000",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L987-L1000"
     }
    ]
   },
   {
    "mode": "seq_play",
    "gesture": "turn",
    "short_label": "STEP CURSOR",
    "action": "Moves the step cursor without loading a sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "987-1000",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L987-L1000"
     }
    ]
   },
   {
    "mode": "pattern",
    "gesture": "turn",
    "short_label": "STEP CURSOR",
    "action": "Moves the step cursor without loading a sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "987-1000",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L987-L1000"
     }
    ]
   },
   {
    "mode": "user",
    "gesture": "turn",
    "short_label": "USER SLOT",
    "action": "Chooses a user sound slot.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "993-1001",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L993-L1001"
     }
    ]
   },
   {
    "mode": "pool",
    "gesture": "turn",
    "short_label": "POOL PATTERN",
    "action": "Chooses a pool pattern from 01 to 64.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "993-1001",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L993-L1001"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "turn",
    "short_label": "PROJECT SLOT",
    "action": "Chooses project A, B, C or D.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "993-1001",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L993-L1001"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "turn",
    "short_label": "SONG ENTRY",
    "action": "Chooses the track’s entry A through P.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "993-1001",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L993-L1001"
     }
    ]
   },
   {
    "mode": "automation",
    "gesture": "turn",
    "short_label": "EVENT ROW",
    "action": "Chooses the top settings row, a record or + ADD LOCK.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "993-1001",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L993-L1001"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "turn",
    "short_label": "WAKE",
    "action": "Wakes the display and consumes this gesture; PLAY can still stop a running transport, and MASTER does not wake the screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1198-1201",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1198-L1201"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "layer_perf_track",
    "gesture": "turn",
    "short_label": "KEYS",
    "action": "Selects track entries counterclockwise or scenes clockwise, storing the preference when this layer closes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "446-463",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L446-L463"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "turn",
    "short_label": "KEYS",
    "action": "Selects track entries counterclockwise or scenes clockwise, storing the preference when this layer closes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "446-463",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L446-L463"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing while this layer owns the controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1270-1272",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1270-L1272"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing while this layer owns the controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1270-1272",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1270-L1272"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing while this layer owns the controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1270-1272",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1270-L1272"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing while this layer owns the controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1270-1272",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1270-L1272"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing while this layer owns the controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1270-1272",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1270-L1272"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing while this layer owns the controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1270-1272",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1270-L1272"
     }
    ]
   },
   {
    "mode": "layer_seq_drum",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing while this layer owns the controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1270-1272",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1270-L1272"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing while this layer owns the controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1270-1272",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1270-L1272"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing during name entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "267-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L267-L270"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing during name entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "267-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L267-L270"
     }
    ]
   },
   {
    "mode": "fmop_tone",
    "gesture": "turn",
    "short_label": "OPERATOR",
    "action": "Selects operator 1–6 without loading a sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "234-241",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L234-L241"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1000-1001",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1000-L1001"
     }
    ]
   },
   {
    "mode": "fmop_env1",
    "gesture": "turn",
    "short_label": "OPERATOR",
    "action": "Selects operator 1–6 without loading a sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "234-241",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L234-L241"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1000-1001",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1000-L1001"
     }
    ]
   },
   {
    "mode": "fmop_env2",
    "gesture": "turn",
    "short_label": "OPERATOR",
    "action": "Selects operator 1–6 without loading a sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "234-241",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L234-L241"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1000-1001",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1000-L1001"
     }
    ]
   },
   {
    "mode": "fmop_keys",
    "gesture": "turn",
    "short_label": "OPERATOR",
    "action": "Selects operator 1–6 without loading a sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "234-241",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L234-L241"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1000-1001",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1000-L1001"
     }
    ]
   },
   {
    "mode": "fmop_more",
    "gesture": "turn",
    "short_label": "OPERATOR",
    "action": "Selects operator 1–6 without loading a sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "234-241",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L234-L241"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1000-1001",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1000-L1001"
     }
    ]
   },
   {
    "mode": "fmall_algo",
    "gesture": "turn",
    "short_label": "OPERATOR",
    "action": "Selects operator 1–6 without loading a sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "234-241",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L234-L241"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1000-1001",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1000-L1001"
     }
    ]
   },
   {
    "mode": "fmall_pitch1",
    "gesture": "turn",
    "short_label": "OPERATOR",
    "action": "Selects operator 1–6 without loading a sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "234-241",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L234-L241"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1000-1001",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1000-L1001"
     }
    ]
   },
   {
    "mode": "fmall_pitch2",
    "gesture": "turn",
    "short_label": "OPERATOR",
    "action": "Selects operator 1–6 without loading a sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "234-241",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L234-L241"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1000-1001",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1000-L1001"
     }
    ]
   },
   {
    "mode": "fmall_lfo",
    "gesture": "turn",
    "short_label": "OPERATOR",
    "action": "Selects operator 1–6 without loading a sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "234-241",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L234-L241"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1000-1001",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1000-L1001"
     }
    ]
   },
   {
    "mode": "fmall_depth",
    "gesture": "turn",
    "short_label": "OPERATOR",
    "action": "Selects operator 1–6 without loading a sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_fm6.c",
      "lines": "234-241",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_fm6.c#L234-L241"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1000-1001",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1000-L1001"
     }
    ]
   },
   {
    "mode": "dx_osc",
    "gesture": "turn",
    "short_label": "DRUM",
    "action": "Chooses BD, SD, CP, CH, OH, TM, RS or CB without loading a sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "17",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L17"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-48",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L48"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1000-1001",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1000-L1001"
     }
    ]
   },
   {
    "mode": "dx_decay",
    "gesture": "turn",
    "short_label": "DRUM",
    "action": "Chooses BD, SD, CP, CH, OH, TM, RS or CB without loading a sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "17",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L17"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-48",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L48"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1000-1001",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1000-L1001"
     }
    ]
   },
   {
    "mode": "dx_color",
    "gesture": "turn",
    "short_label": "DRUM",
    "action": "Chooses BD, SD, CP, CH, OH, TM, RS or CB without loading a sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "17",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L17"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-48",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L48"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1000-1001",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1000-L1001"
     }
    ]
   },
   {
    "mode": "dx_mode",
    "gesture": "turn",
    "short_label": "DRUM",
    "action": "Chooses BD, SD, CP, CH, OH, TM, RS or CB without loading a sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "17",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L17"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-48",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L48"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1000-1001",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1000-L1001"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "turn",
    "short_label": "SLICE",
    "action": "Chooses a slice start or the final END marker.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1002-1005",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1002-L1005"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_slice.c",
      "lines": "125-137",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_slice.c#L125-L137"
     }
    ]
   },
   {
    "mode": "menu_display",
    "gesture": "turn",
    "short_label": "ROW",
    "action": "Moves between rows in this tab, wrapping at either end.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "470-474",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L470-L474"
     }
    ]
   },
   {
    "mode": "menu_control",
    "gesture": "turn",
    "short_label": "ROW",
    "action": "Moves between rows in this tab, wrapping at either end.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "470-474",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L470-L474"
     }
    ]
   },
   {
    "mode": "menu_audio",
    "gesture": "turn",
    "short_label": "ROW",
    "action": "Moves between rows in this tab, wrapping at either end.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "470-474",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L470-L474"
     }
    ]
   },
   {
    "mode": "menu_system",
    "gesture": "turn",
    "short_label": "ROW",
    "action": "Moves between rows in this tab, wrapping at either end.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "470-474",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L470-L474"
     }
    ]
   },
   {
    "mode": "about",
    "gesture": "turn",
    "short_label": "SCROLL",
    "action": "Scrolls the credits with a stop at each end.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "488-494",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L488-L494"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "turn_cw",
    "short_label": "TEACH",
    "action": "When prompted for this knob, records its position and clockwise direction in the new panel mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1603-1628",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1603-L1628"
     }
    ]
   }
  ],
  "key_f3": [
   {
    "mode": "any",
    "gesture": "press",
    "short_label": "F3",
    "action": "With chromatic mapping, octave zero and no transpose, plays F3 on the selected track; engine key maps, scales, chords and active grid, layer, naming or wake gestures can change the result.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "709-735",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L709-L735"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "81-115",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L81-L115"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/core.h",
      "lines": "413-429",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/core.h#L413-L429"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "84-85",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L84-L85"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases the notes this key began on its original track unless another held key still owns them; the arpeggiator’s HOLD can retain its chord.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "663-674",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L663-L674"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "739-747",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L739-L747"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "short_label": "WRITE NOTE",
    "action": "Writes the mapped note or chord into the cursor step in memory while REC is armed and stopped, replacing its previous note list on the first press; SAVE held can undo the recording pass and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-975",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L938-L975"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "When all note keys are released, advances one step after writing the chord; an ignored black key in WHITE mapping writes nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "954-977",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L954-L977"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "short_label": "STEP 1",
    "action": "Selects step 1 of the displayed bank and adds the selected lane’s hit if empty, or marks its existing hit for removal on release.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "494-520",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L494-L520"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "release",
    "short_label": "TOGGLE HIT",
    "action": "Removes the hit marked on press unless a lock turn or lock clear kept it, without a question or a separate undo copy; a preceding REC snapshot may recover it and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "553-565",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L553-L565"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press_while_holding:key_cs5",
    "short_label": "STEP ACCENT",
    "action": "At step 1 of the bank, adds the selected lane’s accent and hit if absent, or marks its existing accent for removal on release.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "505-518",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L505-L518"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "723-739",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L723-L739"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "release",
    "short_label": "END ACCENT",
    "action": "If pressed with C#5 held on an existing accent, removes only that accent on release unless a lock action kept it, leaving the hit; it asks nothing and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "553-565",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L553-L565"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "press",
    "short_label": "WAKE",
    "action": "Wakes the display and consumes this gesture; PLAY can still stop a running transport, and MASTER does not wake the screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1198-1201",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1198-L1201"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press",
    "short_label": "REPEAT 1/8",
    "action": "When available at this tempo, repeats the recent mix at an eighth-note length from the next sixteenth while playing, or immediately while stopped while the key stays held; starting it discards every track’s SLICER capture without asking or undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "118-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L118-L146"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "152-176",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L152-L176"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "117-127",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L117-L127"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "short_label": "END EFFECT",
    "action": "Ends this held effect, returning to an earlier buffer effect if one remains held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "739-743",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L739-L743"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "159-170",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L159-L170"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "press",
    "short_label": "REPEAT 1/8",
    "action": "When available at this tempo, repeats the recent mix at an eighth-note length when toggled on, with another press turning it off; starting it discards every track’s SLICER capture without asking or undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "152-176",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L152-L176"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "117-127",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L117-L127"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "release",
    "short_label": "KEEP EFFECT",
    "action": "Leaves the toggled effect as it is.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press",
    "short_label": "SOLO T1",
    "action": "Solos track 1 with any other held solo keys.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "472-500",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L472-L500"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "release",
    "short_label": "END SOLO",
    "action": "Removes track 1 from the held solos.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "525-538",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L525-L538"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press",
    "short_label": "ROOT F",
    "action": "Sets the root to this key’s pitch class, regardless of octave.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "501-502",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L501-L502"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press",
    "short_label": "ANALOG",
    "action": "Keeps the edited sound unchanged if ANALOG is already selected; otherwise selects ANALOG and loads its first sound in memory, preserving steps but removing old engine-control and drum-lane-level automation and locks, with SAVE-held undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "503-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L503-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/engines.c",
      "lines": "127-164",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/engines.c#L127-L164"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "314-330",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L314-L330"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/motion.c",
      "lines": "374-398",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/motion.c#L374-L398"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1042-1049",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1042-L1049"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "317-330",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L317-L330"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press",
    "short_label": "CLEAR",
    "action": "Clears steps within LEN immediately, removing their locks while keeping other automation, without asking; SAVE-held can undo it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "351-357",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L351-L357"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "25",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L25"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "30-47",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L30-L47"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "59-65",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L59-L65"
     }
    ]
   },
   {
    "mode": "layer_seq_drum",
    "gesture": "press",
    "short_label": "CLEAR",
    "action": "Clears steps within LEN immediately, removing their locks while keeping other automation, without asking; SAVE-held can undo it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "351-357",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L351-L357"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "25",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L25"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "30-47",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L30-L47"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "59-65",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L59-L65"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press",
    "short_label": "CLEAR TRACK",
    "action": "Starts the clear hold; a short press leaves the sequence unchanged.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "433-439",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L433-L439"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "long_press",
    "short_label": "CLEAR TRACK",
    "action": "After the configured HOLD time, clears all selected-track steps, automation and held arpeggiator notes immediately without asking, with SAVE-held undo; the pattern is saved later automatically.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "381-415",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L381-L415"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1221-1227",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1221-L1227"
     }
    ]
   },
   {
    "mode": "layer_perf_track",
    "gesture": "press",
    "short_label": "ENTRY A",
    "action": "Launches list entry A on the selected track immediately while stopped or at LAUNCH while playing, without taking an undo copy.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "999-1021",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L999-L1021"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "press",
    "short_label": "SCENE 1",
    "action": "Recalls scene 1’s entries and mutes immediately while stopped or stages them for LAUNCH while playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "930-953",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L930-L953"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "press_while_holding:button_save",
    "short_label": "STORE 1",
    "action": "Keeps current entries and mutes in scene 1, asking before replacing a used scene and offering no undo; it reaches flash through project saving or the enabled session autosave after the usual quiet stopped delay.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "955-988",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L955-L988"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "906-928",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L906-L928"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1148-1152",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1148-L1152"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1498-1507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1498-L1507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1580-1621",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1580-L1621"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "press",
    "short_label": "AB",
    "action": "Types from AB, advancing within that group when tapped again within 0.8 seconds.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "139-159",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L139-L159"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "29-32",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L29-L32"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "press",
    "short_label": "1",
    "action": "Types 1.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "139-159",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L139-L159"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "29-32",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L29-L32"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "press",
    "short_label": "SLICE",
    "action": "Plays the mapped slice and selects its start marker.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_slice.c",
      "lines": "200-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_slice.c#L200-L209"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1468-1470",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1468-L1470"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "short_label": "CANCEL",
    "action": "Cancels calibration and keeps the previous panel mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1548-1552",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1548-L1552"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1630-1634",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1630-L1634"
     }
    ]
   },
   {
    "mode": "dx_osc",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_decay",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_color",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_mode",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   }
  ],
  "key_fs3": [
   {
    "mode": "any",
    "gesture": "press",
    "short_label": "F#3",
    "action": "With chromatic mapping, octave zero and no transpose, plays F#3 on the selected track; engine key maps, scales, chords and active grid, layer, naming or wake gestures can change the result.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "709-735",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L709-L735"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "81-115",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L81-L115"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/core.h",
      "lines": "413-429",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/core.h#L413-L429"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "84-85",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L84-L85"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases the notes this key began on its original track unless another held key still owns them; the arpeggiator’s HOLD can retain its chord.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "663-674",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L663-L674"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "739-747",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L739-L747"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "short_label": "WRITE NOTE",
    "action": "Unless WHITE mapping silences this black key, writes its mapped note or chord into the cursor step in memory while REC is armed and stopped; the first press replaces the previous note list, SAVE held can undo the pass and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-975",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L938-L975"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "When all note keys are released, advances one step after writing the chord; an ignored black key in WHITE mapping writes nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "954-977",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L954-L977"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "short_label": "KICK",
    "action": "Selects drum lane 1 and sounds its kit note, which can also record live while armed.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "521-522",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L521-L522"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "727-735",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L727-L735"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "press",
    "short_label": "WAKE",
    "action": "Wakes the display and consumes this gesture; PLAY can still stop a running transport, and MASTER does not wake the screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1198-1201",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1198-L1201"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press",
    "short_label": "CUT T1",
    "action": "Cuts track 1 until this key is released without changing its stored mute.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "short_label": "END CUT",
    "action": "Ends this temporary cut of track 1.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "press",
    "short_label": "CUT T1",
    "action": "Cuts track 1 until another press toggles the cut off, without changing its stored mute.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "release",
    "short_label": "KEEP CUT",
    "action": "Leaves the toggled cut of track 1 as it is.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press",
    "short_label": "MUTE T1",
    "action": "Toggles track 1’s mute immediately.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "483-495",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L483-L495"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press",
    "short_label": "ROOT F#",
    "action": "Sets the root to this key’s pitch class, regardless of octave.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "501-502",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L501-L502"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "483-524",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L483-L524"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "518-523",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L518-L523"
     }
    ]
   },
   {
    "mode": "layer_seq_drum",
    "gesture": "press",
    "short_label": "LANE 1",
    "action": "Selects drum lane 1 for lane tools without playing it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "518-522",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L518-L522"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "508-510",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L508-L510"
     }
    ]
   },
   {
    "mode": "layer_perf_track",
    "gesture": "press",
    "short_label": "STAGE T1",
    "action": "Toggles track 1’s mute immediately while stopped or stages it for LAUNCH while playing; another press cancels a pending mute.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "822-859",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L822-L859"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "press",
    "short_label": "STAGE T1",
    "action": "Toggles track 1’s mute immediately while stopped or stages it for LAUNCH while playing; another press cancels a pending mute.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "822-859",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L822-L859"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "press",
    "short_label": "CURSOR LEFT",
    "action": "Moves the cursor one place left.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "160-189",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L160-L189"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "65-74",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L65-L74"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "hold",
    "short_label": "CURSOR LEFT",
    "action": "Repeats cursor movement after 0.45 seconds, then every 0.09 seconds, while held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "240-265",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L240-L265"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "press",
    "short_label": "CURSOR LEFT",
    "action": "Moves the cursor one place left.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "160-189",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L160-L189"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "65-74",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L65-L74"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "hold",
    "short_label": "CURSOR LEFT",
    "action": "Repeats cursor movement after 0.45 seconds, then every 0.09 seconds, while held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "240-265",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L240-L265"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "press",
    "short_label": "SLICE",
    "action": "Plays the mapped slice and selects its start marker.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_slice.c",
      "lines": "200-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_slice.c#L200-L209"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1468-1470",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1468-L1470"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "short_label": "CANCEL",
    "action": "Cancels calibration and keeps the previous panel mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1548-1552",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1548-L1552"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1630-1634",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1630-L1634"
     }
    ]
   },
   {
    "mode": "dx_osc",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_decay",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_color",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_mode",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   }
  ],
  "key_g3": [
   {
    "mode": "any",
    "gesture": "press",
    "short_label": "G3",
    "action": "With chromatic mapping, octave zero and no transpose, plays G3 on the selected track; engine key maps, scales, chords and active grid, layer, naming or wake gestures can change the result.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "709-735",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L709-L735"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "81-115",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L81-L115"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/core.h",
      "lines": "413-429",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/core.h#L413-L429"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "84-85",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L84-L85"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases the notes this key began on its original track unless another held key still owns them; the arpeggiator’s HOLD can retain its chord.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "663-674",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L663-L674"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "739-747",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L739-L747"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "short_label": "WRITE NOTE",
    "action": "Writes the mapped note or chord into the cursor step in memory while REC is armed and stopped, replacing its previous note list on the first press; SAVE held can undo the recording pass and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-975",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L938-L975"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "When all note keys are released, advances one step after writing the chord; an ignored black key in WHITE mapping writes nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "954-977",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L954-L977"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "short_label": "STEP 2",
    "action": "Selects step 2 of the displayed bank and adds the selected lane’s hit if empty, or marks its existing hit for removal on release.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "494-520",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L494-L520"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "release",
    "short_label": "TOGGLE HIT",
    "action": "Removes the hit marked on press unless a lock turn or lock clear kept it, without a question or a separate undo copy; a preceding REC snapshot may recover it and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "553-565",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L553-L565"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press_while_holding:key_cs5",
    "short_label": "STEP ACCENT",
    "action": "At step 2 of the bank, adds the selected lane’s accent and hit if absent, or marks its existing accent for removal on release.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "505-518",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L505-L518"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "723-739",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L723-L739"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "release",
    "short_label": "END ACCENT",
    "action": "If pressed with C#5 held on an existing accent, removes only that accent on release unless a lock action kept it, leaving the hit; it asks nothing and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "553-565",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L553-L565"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "press",
    "short_label": "WAKE",
    "action": "Wakes the display and consumes this gesture; PLAY can still stop a running transport, and MASTER does not wake the screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1198-1201",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1198-L1201"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press",
    "short_label": "REPEAT 1/16",
    "action": "When available at this tempo, repeats the recent mix at a sixteenth-note length from the next sixteenth while playing, or immediately while stopped while the key stays held; starting it discards every track’s SLICER capture without asking or undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "118-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L118-L146"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "152-176",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L152-L176"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "117-127",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L117-L127"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "short_label": "END EFFECT",
    "action": "Ends this held effect, returning to an earlier buffer effect if one remains held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "739-743",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L739-L743"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "159-170",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L159-L170"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "press",
    "short_label": "REPEAT 1/16",
    "action": "When available at this tempo, repeats the recent mix at a sixteenth-note length when toggled on, with another press turning it off; starting it discards every track’s SLICER capture without asking or undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "152-176",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L152-L176"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "117-127",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L117-L127"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "release",
    "short_label": "KEEP EFFECT",
    "action": "Leaves the toggled effect as it is.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press",
    "short_label": "SOLO T2",
    "action": "Solos track 2 with any other held solo keys.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "472-500",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L472-L500"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "release",
    "short_label": "END SOLO",
    "action": "Removes track 2 from the held solos.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "525-538",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L525-L538"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press",
    "short_label": "ROOT G",
    "action": "Sets the root to this key’s pitch class, regardless of octave.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "501-502",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L501-L502"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press",
    "short_label": "FM6",
    "action": "Keeps the edited sound unchanged if FM6 is already selected; otherwise selects FM6 and loads its first sound in memory, preserving steps but removing old engine-control and drum-lane-level automation and locks, with SAVE-held undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "503-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L503-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/engines.c",
      "lines": "127-164",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/engines.c#L127-L164"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "314-330",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L314-L330"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/motion.c",
      "lines": "374-398",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/motion.c#L374-L398"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1042-1049",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1042-L1049"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "317-330",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L317-L330"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press",
    "short_label": "REVERSE",
    "action": "Reverses steps within LEN with their automation and locks, preserving the direction of tied notes; SAVE-held can undo it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "85-105",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L85-L105"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "25",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L25"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "30-47",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L30-L47"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "59-65",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L59-L65"
     }
    ]
   },
   {
    "mode": "layer_seq_drum",
    "gesture": "press",
    "short_label": "REVERSE",
    "action": "Reverses steps within LEN with their automation and locks, preserving the direction of tied notes; SAVE-held can undo it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "85-105",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L85-L105"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "25",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L25"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "30-47",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L30-L47"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "59-65",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L59-L65"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press",
    "short_label": "CLICK",
    "action": "Cycles the click through OFF, REC and ON.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "417-443",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L417-L443"
     }
    ]
   },
   {
    "mode": "layer_perf_track",
    "gesture": "press",
    "short_label": "ENTRY B",
    "action": "Launches list entry B on the selected track immediately while stopped or at LAUNCH while playing, without taking an undo copy.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "999-1021",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L999-L1021"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "press",
    "short_label": "SCENE 2",
    "action": "Recalls scene 2’s entries and mutes immediately while stopped or stages them for LAUNCH while playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "930-953",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L930-L953"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "press_while_holding:button_save",
    "short_label": "STORE 2",
    "action": "Keeps current entries and mutes in scene 2, asking before replacing a used scene and offering no undo; it reaches flash through project saving or the enabled session autosave after the usual quiet stopped delay.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "955-988",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L955-L988"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "906-928",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L906-L928"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1148-1152",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1148-L1152"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1498-1507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1498-L1507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1580-1621",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1580-L1621"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "press",
    "short_label": "CD",
    "action": "Types from CD, advancing within that group when tapped again within 0.8 seconds.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "139-159",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L139-L159"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "29-32",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L29-L32"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "press",
    "short_label": "2",
    "action": "Types 2.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "139-159",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L139-L159"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "29-32",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L29-L32"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "press",
    "short_label": "SLICE",
    "action": "Plays the mapped slice and selects its start marker.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_slice.c",
      "lines": "200-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_slice.c#L200-L209"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1468-1470",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1468-L1470"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "short_label": "CANCEL",
    "action": "Cancels calibration and keeps the previous panel mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1548-1552",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1548-L1552"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1630-1634",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1630-L1634"
     }
    ]
   },
   {
    "mode": "dx_osc",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_decay",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_color",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_mode",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   }
  ],
  "key_gs3": [
   {
    "mode": "any",
    "gesture": "press",
    "short_label": "G#3",
    "action": "With chromatic mapping, octave zero and no transpose, plays G#3 on the selected track; engine key maps, scales, chords and active grid, layer, naming or wake gestures can change the result.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "709-735",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L709-L735"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "81-115",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L81-L115"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/core.h",
      "lines": "413-429",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/core.h#L413-L429"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "84-85",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L84-L85"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases the notes this key began on its original track unless another held key still owns them; the arpeggiator’s HOLD can retain its chord.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "663-674",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L663-L674"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "739-747",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L739-L747"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "short_label": "WRITE NOTE",
    "action": "Unless WHITE mapping silences this black key, writes its mapped note or chord into the cursor step in memory while REC is armed and stopped; the first press replaces the previous note list, SAVE held can undo the pass and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-975",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L938-L975"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "When all note keys are released, advances one step after writing the chord; an ignored black key in WHITE mapping writes nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "954-977",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L954-L977"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "short_label": "SNARE",
    "action": "Selects drum lane 2 and sounds its kit note, which can also record live while armed.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "521-522",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L521-L522"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "727-735",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L727-L735"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "press",
    "short_label": "WAKE",
    "action": "Wakes the display and consumes this gesture; PLAY can still stop a running transport, and MASTER does not wake the screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1198-1201",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1198-L1201"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press",
    "short_label": "CUT T2",
    "action": "Cuts track 2 until this key is released without changing its stored mute.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "short_label": "END CUT",
    "action": "Ends this temporary cut of track 2.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "press",
    "short_label": "CUT T2",
    "action": "Cuts track 2 until another press toggles the cut off, without changing its stored mute.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "release",
    "short_label": "KEEP CUT",
    "action": "Leaves the toggled cut of track 2 as it is.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press",
    "short_label": "MUTE T2",
    "action": "Toggles track 2’s mute immediately.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "483-495",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L483-L495"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press",
    "short_label": "ROOT G#",
    "action": "Sets the root to this key’s pitch class, regardless of octave.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "501-502",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L501-L502"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "483-524",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L483-L524"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "518-523",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L518-L523"
     }
    ]
   },
   {
    "mode": "layer_seq_drum",
    "gesture": "press",
    "short_label": "LANE 2",
    "action": "Selects drum lane 2 for lane tools without playing it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "518-522",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L518-L522"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "508-510",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L508-L510"
     }
    ]
   },
   {
    "mode": "layer_perf_track",
    "gesture": "press",
    "short_label": "STAGE T2",
    "action": "Toggles track 2’s mute immediately while stopped or stages it for LAUNCH while playing; another press cancels a pending mute.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "822-859",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L822-L859"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "press",
    "short_label": "STAGE T2",
    "action": "Toggles track 2’s mute immediately while stopped or stages it for LAUNCH while playing; another press cancels a pending mute.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "822-859",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L822-L859"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "press",
    "short_label": "SPACE",
    "action": "Inserts a space at the cursor.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "160-189",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L160-L189"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "65-74",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L65-L74"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "press",
    "short_label": "SPACE",
    "action": "Inserts a space at the cursor.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "160-189",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L160-L189"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "65-74",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L65-L74"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "press",
    "short_label": "SLICE",
    "action": "Plays the mapped slice and selects its start marker.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_slice.c",
      "lines": "200-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_slice.c#L200-L209"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1468-1470",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1468-L1470"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "short_label": "CANCEL",
    "action": "Cancels calibration and keeps the previous panel mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1548-1552",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1548-L1552"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1630-1634",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1630-L1634"
     }
    ]
   },
   {
    "mode": "dx_osc",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_decay",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_color",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_mode",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   }
  ],
  "key_a3": [
   {
    "mode": "any",
    "gesture": "press",
    "short_label": "A3",
    "action": "With chromatic mapping, octave zero and no transpose, plays A3 on the selected track; engine key maps, scales, chords and active grid, layer, naming or wake gestures can change the result.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "709-735",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L709-L735"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "81-115",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L81-L115"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/core.h",
      "lines": "413-429",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/core.h#L413-L429"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "84-85",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L84-L85"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases the notes this key began on its original track unless another held key still owns them; the arpeggiator’s HOLD can retain its chord.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "663-674",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L663-L674"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "739-747",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L739-L747"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "short_label": "WRITE NOTE",
    "action": "Writes the mapped note or chord into the cursor step in memory while REC is armed and stopped, replacing its previous note list on the first press; SAVE held can undo the recording pass and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-975",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L938-L975"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "When all note keys are released, advances one step after writing the chord; an ignored black key in WHITE mapping writes nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "954-977",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L954-L977"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "short_label": "STEP 3",
    "action": "Selects step 3 of the displayed bank and adds the selected lane’s hit if empty, or marks its existing hit for removal on release.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "494-520",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L494-L520"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "release",
    "short_label": "TOGGLE HIT",
    "action": "Removes the hit marked on press unless a lock turn or lock clear kept it, without a question or a separate undo copy; a preceding REC snapshot may recover it and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "553-565",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L553-L565"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press_while_holding:key_cs5",
    "short_label": "STEP ACCENT",
    "action": "At step 3 of the bank, adds the selected lane’s accent and hit if absent, or marks its existing accent for removal on release.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "505-518",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L505-L518"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "723-739",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L723-L739"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "release",
    "short_label": "END ACCENT",
    "action": "If pressed with C#5 held on an existing accent, removes only that accent on release unless a lock action kept it, leaving the hit; it asks nothing and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "553-565",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L553-L565"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "press",
    "short_label": "WAKE",
    "action": "Wakes the display and consumes this gesture; PLAY can still stop a running transport, and MASTER does not wake the screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1198-1201",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1198-L1201"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press",
    "short_label": "REPEAT 1/32",
    "action": "When available at this tempo, repeats the recent mix at a thirty-second-note length from the next sixteenth while playing, or immediately while stopped while the key stays held; starting it discards every track’s SLICER capture without asking or undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "118-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L118-L146"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "152-176",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L152-L176"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "117-127",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L117-L127"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "short_label": "END EFFECT",
    "action": "Ends this held effect, returning to an earlier buffer effect if one remains held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "739-743",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L739-L743"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "159-170",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L159-L170"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "press",
    "short_label": "REPEAT 1/32",
    "action": "When available at this tempo, repeats the recent mix at a thirty-second-note length when toggled on, with another press turning it off; starting it discards every track’s SLICER capture without asking or undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "152-176",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L152-L176"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "117-127",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L117-L127"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "release",
    "short_label": "KEEP EFFECT",
    "action": "Leaves the toggled effect as it is.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press",
    "short_label": "SOLO T3",
    "action": "Solos track 3 with any other held solo keys.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "472-500",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L472-L500"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "release",
    "short_label": "END SOLO",
    "action": "Removes track 3 from the held solos.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "525-538",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L525-L538"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press",
    "short_label": "ROOT A",
    "action": "Sets the root to this key’s pitch class, regardless of octave.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "501-502",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L501-L502"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press",
    "short_label": "PHASE",
    "action": "Keeps the edited sound unchanged if PHASE is already selected; otherwise selects PHASE and loads its first sound in memory, preserving steps but removing old engine-control and drum-lane-level automation and locks, with SAVE-held undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "503-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L503-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/engines.c",
      "lines": "127-164",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/engines.c#L127-L164"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "314-330",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L314-L330"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/motion.c",
      "lines": "374-398",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/motion.c#L374-L398"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1042-1049",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1042-L1049"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "317-330",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L317-L330"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press",
    "short_label": "SHIFT LEFT",
    "action": "Rotates steps within LEN one place earlier with their automation and locks; SAVE-held can undo it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "107-115",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L107-L115"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "25",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L25"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "30-47",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L30-L47"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "59-65",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L59-L65"
     }
    ]
   },
   {
    "mode": "layer_seq_drum",
    "gesture": "press",
    "short_label": "SHIFT LEFT",
    "action": "Rotates steps within LEN one place earlier with their automation and locks; SAVE-held can undo it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "107-115",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L107-L115"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "25",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L25"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "30-47",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L30-L47"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "59-65",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L59-L65"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press",
    "short_label": "COUNT-IN",
    "action": "Cycles count-in through OFF, one bar and two bars.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "417-443",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L417-L443"
     }
    ]
   },
   {
    "mode": "layer_perf_track",
    "gesture": "press",
    "short_label": "ENTRY C",
    "action": "Launches list entry C on the selected track immediately while stopped or at LAUNCH while playing, without taking an undo copy.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "999-1021",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L999-L1021"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "press",
    "short_label": "SCENE 3",
    "action": "Recalls scene 3’s entries and mutes immediately while stopped or stages them for LAUNCH while playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "930-953",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L930-L953"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "press_while_holding:button_save",
    "short_label": "STORE 3",
    "action": "Keeps current entries and mutes in scene 3, asking before replacing a used scene and offering no undo; it reaches flash through project saving or the enabled session autosave after the usual quiet stopped delay.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "955-988",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L955-L988"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "906-928",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L906-L928"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1148-1152",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1148-L1152"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1498-1507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1498-L1507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1580-1621",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1580-L1621"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "press",
    "short_label": "EF",
    "action": "Types from EF, advancing within that group when tapped again within 0.8 seconds.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "139-159",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L139-L159"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "29-32",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L29-L32"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "press",
    "short_label": "3",
    "action": "Types 3.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "139-159",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L139-L159"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "29-32",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L29-L32"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "press",
    "short_label": "SLICE",
    "action": "Plays the mapped slice and selects its start marker.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_slice.c",
      "lines": "200-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_slice.c#L200-L209"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1468-1470",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1468-L1470"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "short_label": "CANCEL",
    "action": "Cancels calibration and keeps the previous panel mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1548-1552",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1548-L1552"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1630-1634",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1630-L1634"
     }
    ]
   },
   {
    "mode": "dx_osc",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_decay",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_color",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_mode",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   }
  ],
  "key_as3": [
   {
    "mode": "any",
    "gesture": "press",
    "short_label": "A#3",
    "action": "With chromatic mapping, octave zero and no transpose, plays A#3 on the selected track; engine key maps, scales, chords and active grid, layer, naming or wake gestures can change the result.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "709-735",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L709-L735"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "81-115",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L81-L115"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/core.h",
      "lines": "413-429",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/core.h#L413-L429"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "84-85",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L84-L85"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases the notes this key began on its original track unless another held key still owns them; the arpeggiator’s HOLD can retain its chord.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "663-674",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L663-L674"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "739-747",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L739-L747"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "short_label": "WRITE NOTE",
    "action": "Unless WHITE mapping silences this black key, writes its mapped note or chord into the cursor step in memory while REC is armed and stopped; the first press replaces the previous note list, SAVE held can undo the pass and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-975",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L938-L975"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "When all note keys are released, advances one step after writing the chord; an ignored black key in WHITE mapping writes nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "954-977",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L954-L977"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "short_label": "CLAP",
    "action": "Selects drum lane 3 and sounds its kit note, which can also record live while armed.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "521-522",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L521-L522"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "727-735",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L727-L735"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "press",
    "short_label": "WAKE",
    "action": "Wakes the display and consumes this gesture; PLAY can still stop a running transport, and MASTER does not wake the screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1198-1201",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1198-L1201"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press",
    "short_label": "CUT T3",
    "action": "Cuts track 3 until this key is released without changing its stored mute.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "short_label": "END CUT",
    "action": "Ends this temporary cut of track 3.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "press",
    "short_label": "CUT T3",
    "action": "Cuts track 3 until another press toggles the cut off, without changing its stored mute.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "release",
    "short_label": "KEEP CUT",
    "action": "Leaves the toggled cut of track 3 as it is.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press",
    "short_label": "MUTE T3",
    "action": "Toggles track 3’s mute immediately.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "483-495",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L483-L495"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press",
    "short_label": "ROOT A#",
    "action": "Sets the root to this key’s pitch class, regardless of octave.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "501-502",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L501-L502"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "483-524",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L483-L524"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "518-523",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L518-L523"
     }
    ]
   },
   {
    "mode": "layer_seq_drum",
    "gesture": "press",
    "short_label": "LANE 3",
    "action": "Selects drum lane 3 for lane tools without playing it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "518-522",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L518-L522"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "508-510",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L508-L510"
     }
    ]
   },
   {
    "mode": "layer_perf_track",
    "gesture": "press",
    "short_label": "STAGE T3",
    "action": "Toggles track 3’s mute immediately while stopped or stages it for LAUNCH while playing; another press cancels a pending mute.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "822-859",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L822-L859"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "press",
    "short_label": "STAGE T3",
    "action": "Toggles track 3’s mute immediately while stopped or stages it for LAUNCH while playing; another press cancels a pending mute.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "822-859",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L822-L859"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "press",
    "short_label": "CURSOR RIGHT",
    "action": "Moves the cursor one place right.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "160-189",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L160-L189"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "65-74",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L65-L74"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "hold",
    "short_label": "CURSOR RIGHT",
    "action": "Repeats cursor movement after 0.45 seconds, then every 0.09 seconds, while held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "240-265",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L240-L265"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "press",
    "short_label": "CURSOR RIGHT",
    "action": "Moves the cursor one place right.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "160-189",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L160-L189"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "65-74",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L65-L74"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "hold",
    "short_label": "CURSOR RIGHT",
    "action": "Repeats cursor movement after 0.45 seconds, then every 0.09 seconds, while held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "240-265",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L240-L265"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "press",
    "short_label": "SLICE",
    "action": "Plays the mapped slice and selects its start marker.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_slice.c",
      "lines": "200-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_slice.c#L200-L209"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1468-1470",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1468-L1470"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "short_label": "CANCEL",
    "action": "Cancels calibration and keeps the previous panel mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1548-1552",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1548-L1552"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1630-1634",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1630-L1634"
     }
    ]
   },
   {
    "mode": "dx_osc",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_decay",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_color",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_mode",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   }
  ],
  "key_b3": [
   {
    "mode": "any",
    "gesture": "press",
    "short_label": "B3",
    "action": "With chromatic mapping, octave zero and no transpose, plays B3 on the selected track; engine key maps, scales, chords and active grid, layer, naming or wake gestures can change the result.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "709-735",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L709-L735"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "81-115",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L81-L115"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/core.h",
      "lines": "413-429",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/core.h#L413-L429"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "84-85",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L84-L85"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases the notes this key began on its original track unless another held key still owns them; the arpeggiator’s HOLD can retain its chord.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "663-674",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L663-L674"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "739-747",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L739-L747"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "short_label": "WRITE NOTE",
    "action": "Writes the mapped note or chord into the cursor step in memory while REC is armed and stopped, replacing its previous note list on the first press; SAVE held can undo the recording pass and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-975",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L938-L975"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "When all note keys are released, advances one step after writing the chord; an ignored black key in WHITE mapping writes nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "954-977",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L954-L977"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "short_label": "STEP 4",
    "action": "Selects step 4 of the displayed bank and adds the selected lane’s hit if empty, or marks its existing hit for removal on release.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "494-520",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L494-L520"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "release",
    "short_label": "TOGGLE HIT",
    "action": "Removes the hit marked on press unless a lock turn or lock clear kept it, without a question or a separate undo copy; a preceding REC snapshot may recover it and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "553-565",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L553-L565"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press_while_holding:key_cs5",
    "short_label": "STEP ACCENT",
    "action": "At step 4 of the bank, adds the selected lane’s accent and hit if absent, or marks its existing accent for removal on release.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "505-518",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L505-L518"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "723-739",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L723-L739"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "release",
    "short_label": "END ACCENT",
    "action": "If pressed with C#5 held on an existing accent, removes only that accent on release unless a lock action kept it, leaving the hit; it asks nothing and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "553-565",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L553-L565"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "press",
    "short_label": "WAKE",
    "action": "Wakes the display and consumes this gesture; PLAY can still stop a running transport, and MASTER does not wake the screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1198-1201",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1198-L1201"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press",
    "short_label": "REVERSE",
    "action": "When available at this tempo, reverses a recent slice of the mix from the next sixteenth while playing, or immediately while stopped while the key stays held; starting it discards every track’s SLICER capture without asking or undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "118-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L118-L146"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "152-176",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L152-L176"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "117-127",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L117-L127"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "short_label": "END REVERSE",
    "action": "Ends this held effect, returning to an earlier buffer effect if one remains held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "739-743",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L739-L743"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "159-170",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L159-L170"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "press",
    "short_label": "REVERSE",
    "action": "When available at this tempo, reverses a recent slice of the mix when toggled on, with another press turning it off; starting it discards every track’s SLICER capture without asking or undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "152-176",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L152-L176"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "117-127",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L117-L127"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "release",
    "short_label": "KEEP EFFECT",
    "action": "Leaves the toggled effect as it is.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press",
    "short_label": "SOLO T4",
    "action": "Solos track 4 with any other held solo keys.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "472-500",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L472-L500"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "release",
    "short_label": "END SOLO",
    "action": "Removes track 4 from the held solos.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "525-538",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L525-L538"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press",
    "short_label": "ROOT B",
    "action": "Sets the root to this key’s pitch class, regardless of octave.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "501-502",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L501-L502"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press",
    "short_label": "LOFI",
    "action": "Keeps the edited sound unchanged if LOFI is already selected; otherwise selects LOFI and loads its first sound in memory, preserving steps but removing old engine-control and drum-lane-level automation and locks, with SAVE-held undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "503-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L503-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/engines.c",
      "lines": "127-164",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/engines.c#L127-L164"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "314-330",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L314-L330"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/motion.c",
      "lines": "374-398",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/motion.c#L374-L398"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1042-1049",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1042-L1049"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "317-330",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L317-L330"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press",
    "short_label": "SHIFT RIGHT",
    "action": "Rotates steps within LEN one place later with their automation and locks; SAVE-held can undo it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "107-115",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L107-L115"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "25",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L25"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "30-47",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L30-L47"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "59-65",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L59-L65"
     }
    ]
   },
   {
    "mode": "layer_seq_drum",
    "gesture": "press",
    "short_label": "SHIFT RIGHT",
    "action": "Rotates steps within LEN one place later with their automation and locks; SAVE-held can undo it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "107-115",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L107-L115"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "25",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L25"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "30-47",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L30-L47"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "59-65",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L59-L65"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press",
    "short_label": "CLICK LEVEL",
    "action": "Cycles click level through LOW, MID and HIGH.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "417-443",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L417-L443"
     }
    ]
   },
   {
    "mode": "layer_perf_track",
    "gesture": "press",
    "short_label": "ENTRY D",
    "action": "Launches list entry D on the selected track immediately while stopped or at LAUNCH while playing, without taking an undo copy.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "999-1021",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L999-L1021"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "press",
    "short_label": "SCENE 4",
    "action": "Recalls scene 4’s entries and mutes immediately while stopped or stages them for LAUNCH while playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "930-953",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L930-L953"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "press_while_holding:button_save",
    "short_label": "STORE 4",
    "action": "Keeps current entries and mutes in scene 4, asking before replacing a used scene and offering no undo; it reaches flash through project saving or the enabled session autosave after the usual quiet stopped delay.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "955-988",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L955-L988"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "906-928",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L906-L928"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1148-1152",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1148-L1152"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1498-1507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1498-L1507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1580-1621",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1580-L1621"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "press",
    "short_label": "GH",
    "action": "Types from GH, advancing within that group when tapped again within 0.8 seconds.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "139-159",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L139-L159"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "29-32",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L29-L32"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "press",
    "short_label": "4",
    "action": "Types 4.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "139-159",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L139-L159"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "29-32",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L29-L32"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "press",
    "short_label": "SLICE",
    "action": "Plays the mapped slice and selects its start marker.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_slice.c",
      "lines": "200-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_slice.c#L200-L209"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1468-1470",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1468-L1470"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "short_label": "CANCEL",
    "action": "Cancels calibration and keeps the previous panel mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1548-1552",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1548-L1552"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1630-1634",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1630-L1634"
     }
    ]
   },
   {
    "mode": "dx_osc",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_decay",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_color",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_mode",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   }
  ],
  "key_c4": [
   {
    "mode": "any",
    "gesture": "press",
    "short_label": "C4",
    "action": "With chromatic mapping, octave zero and no transpose, plays C4 on the selected track; engine key maps, scales, chords and active grid, layer, naming or wake gestures can change the result.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "709-735",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L709-L735"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "81-115",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L81-L115"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/core.h",
      "lines": "413-429",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/core.h#L413-L429"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "84-85",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L84-L85"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases the notes this key began on its original track unless another held key still owns them; the arpeggiator’s HOLD can retain its chord.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "663-674",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L663-L674"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "739-747",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L739-L747"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "short_label": "WRITE NOTE",
    "action": "Writes the mapped note or chord into the cursor step in memory while REC is armed and stopped, replacing its previous note list on the first press; SAVE held can undo the recording pass and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-975",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L938-L975"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "When all note keys are released, advances one step after writing the chord; an ignored black key in WHITE mapping writes nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "954-977",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L954-L977"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "short_label": "STEP 5",
    "action": "Selects step 5 of the displayed bank and adds the selected lane’s hit if empty, or marks its existing hit for removal on release.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "494-520",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L494-L520"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "release",
    "short_label": "TOGGLE HIT",
    "action": "Removes the hit marked on press unless a lock turn or lock clear kept it, without a question or a separate undo copy; a preceding REC snapshot may recover it and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "553-565",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L553-L565"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press_while_holding:key_cs5",
    "short_label": "STEP ACCENT",
    "action": "At step 5 of the bank, adds the selected lane’s accent and hit if absent, or marks its existing accent for removal on release.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "505-518",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L505-L518"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "723-739",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L723-L739"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "release",
    "short_label": "END ACCENT",
    "action": "If pressed with C#5 held on an existing accent, removes only that accent on release unless a lock action kept it, leaving the hit; it asks nothing and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "553-565",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L553-L565"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "press",
    "short_label": "WAKE",
    "action": "Wakes the display and consumes this gesture; PLAY can still stop a running transport, and MASTER does not wake the screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1198-1201",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1198-L1201"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press",
    "short_label": "LPF",
    "action": "Sweeps a low-pass filter down over a bar immediately while the key stays held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "118-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L118-L146"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "short_label": "END LPF",
    "action": "Ends this key’s low-pass sweep while any FILTER macro setting and buffer effect continue.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "739-743",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L739-L743"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "159-170",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L159-L170"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "32-38",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L32-L38"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "131-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L131-L146"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "161-168",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L161-L168"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "282-302",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L282-L302"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "press",
    "short_label": "LPF",
    "action": "Sweeps a low-pass filter down over a bar when toggled on, with another press turning it off.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "release",
    "short_label": "KEEP EFFECT",
    "action": "Leaves the toggled effect as it is.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press",
    "short_label": "UNMUTE ALL",
    "action": "Unmutes all six tracks immediately.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "493-495",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L493-L495"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press",
    "short_label": "ROOT C",
    "action": "Sets the root to this key’s pitch class, regardless of octave.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "501-502",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L501-L502"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press",
    "short_label": "SAMPLE",
    "action": "Keeps the edited sound unchanged if SAMPLE is already selected; otherwise selects SAMPLE and loads its first sound in memory, preserving steps but removing old engine-control and drum-lane-level automation and locks, with SAVE-held undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "503-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L503-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/engines.c",
      "lines": "127-164",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/engines.c#L127-L164"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "314-330",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L314-L330"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/motion.c",
      "lines": "374-398",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/motion.c#L374-L398"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1042-1049",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1042-L1049"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "317-330",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L317-L330"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press",
    "short_label": "RANDOM",
    "action": "Replaces the in-range drum beat or chooses new in-scale melody pitches, keeping an existing melody’s rhythm; SAVE-held can undo it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "361-371",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L361-L371"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "25",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L25"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "30-47",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L30-L47"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "59-65",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L59-L65"
     }
    ]
   },
   {
    "mode": "layer_seq_drum",
    "gesture": "press",
    "short_label": "RANDOM",
    "action": "Replaces the in-range drum beat or chooses new in-scale melody pitches, keeping an existing melody’s rhythm; SAVE-held can undo it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "361-371",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L361-L371"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "25",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L25"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "30-47",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L30-L47"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "59-65",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L59-L65"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "508-510",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L508-L510"
     }
    ]
   },
   {
    "mode": "layer_perf_track",
    "gesture": "press",
    "short_label": "ENTRY E",
    "action": "Launches list entry E on the selected track immediately while stopped or at LAUNCH while playing, without taking an undo copy.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "999-1021",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L999-L1021"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "press",
    "short_label": "SCENE 5",
    "action": "Recalls scene 5’s entries and mutes immediately while stopped or stages them for LAUNCH while playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "930-953",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L930-L953"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "press_while_holding:button_save",
    "short_label": "STORE 5",
    "action": "Keeps current entries and mutes in scene 5, asking before replacing a used scene and offering no undo; it reaches flash through project saving or the enabled session autosave after the usual quiet stopped delay.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "955-988",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L955-L988"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "906-928",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L906-L928"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1148-1152",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1148-L1152"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1498-1507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1498-L1507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1580-1621",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1580-L1621"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "press",
    "short_label": "IJK",
    "action": "Types from IJK, advancing within that group when tapped again within 0.8 seconds.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "139-159",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L139-L159"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "29-32",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L29-L32"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "press",
    "short_label": "5",
    "action": "Types 5.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "139-159",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L139-L159"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "29-32",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L29-L32"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "press",
    "short_label": "SLICE",
    "action": "Plays the mapped slice and selects its start marker.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_slice.c",
      "lines": "200-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_slice.c#L200-L209"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1468-1470",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1468-L1470"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "short_label": "CANCEL",
    "action": "Cancels calibration and keeps the previous panel mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1548-1552",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1548-L1552"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1630-1634",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1630-L1634"
     }
    ]
   },
   {
    "mode": "dx_osc",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_decay",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_color",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_mode",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   }
  ],
  "key_cs4": [
   {
    "mode": "any",
    "gesture": "press",
    "short_label": "C#4",
    "action": "With chromatic mapping, octave zero and no transpose, plays C#4 on the selected track; engine key maps, scales, chords and active grid, layer, naming or wake gestures can change the result.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "709-735",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L709-L735"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "81-115",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L81-L115"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/core.h",
      "lines": "413-429",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/core.h#L413-L429"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "84-85",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L84-L85"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases the notes this key began on its original track unless another held key still owns them; the arpeggiator’s HOLD can retain its chord.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "663-674",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L663-L674"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "739-747",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L739-L747"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "short_label": "WRITE NOTE",
    "action": "Unless WHITE mapping silences this black key, writes its mapped note or chord into the cursor step in memory while REC is armed and stopped; the first press replaces the previous note list, SAVE held can undo the pass and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-975",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L938-L975"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "When all note keys are released, advances one step after writing the chord; an ignored black key in WHITE mapping writes nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "954-977",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L954-L977"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "short_label": "CL HAT",
    "action": "Selects drum lane 4 and sounds its kit note, which can also record live while armed.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "521-522",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L521-L522"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "727-735",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L727-L735"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "press",
    "short_label": "WAKE",
    "action": "Wakes the display and consumes this gesture; PLAY can still stop a running transport, and MASTER does not wake the screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1198-1201",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1198-L1201"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press",
    "short_label": "CUT T4",
    "action": "Cuts track 4 until this key is released without changing its stored mute.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "short_label": "END CUT",
    "action": "Ends this temporary cut of track 4.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "press",
    "short_label": "CUT T4",
    "action": "Cuts track 4 until another press toggles the cut off, without changing its stored mute.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "release",
    "short_label": "KEEP CUT",
    "action": "Leaves the toggled cut of track 4 as it is.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press",
    "short_label": "MUTE T4",
    "action": "Toggles track 4’s mute immediately.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "483-495",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L483-L495"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press",
    "short_label": "ROOT C#",
    "action": "Sets the root to this key’s pitch class, regardless of octave.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "501-502",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L501-L502"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "483-524",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L483-L524"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "518-523",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L518-L523"
     }
    ]
   },
   {
    "mode": "layer_seq_drum",
    "gesture": "press",
    "short_label": "LANE 4",
    "action": "Selects drum lane 4 for lane tools without playing it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "518-522",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L518-L522"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "508-510",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L508-L510"
     }
    ]
   },
   {
    "mode": "layer_perf_track",
    "gesture": "press",
    "short_label": "STAGE T4",
    "action": "Toggles track 4’s mute immediately while stopped or stages it for LAUNCH while playing; another press cancels a pending mute.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "822-859",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L822-L859"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "press",
    "short_label": "STAGE T4",
    "action": "Toggles track 4’s mute immediately while stopped or stages it for LAUNCH while playing; another press cancels a pending mute.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "822-859",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L822-L859"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "press",
    "short_label": "DELETE",
    "action": "Removes the character before the cursor from this draft name.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "160-189",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L160-L189"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "65-74",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L65-L74"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "hold",
    "short_label": "DELETE",
    "action": "Repeats deletion after 0.45 seconds, then every 0.09 seconds, while held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "240-265",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L240-L265"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "press",
    "short_label": "DELETE",
    "action": "Removes the character before the cursor from this draft name.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "160-189",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L160-L189"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "65-74",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L65-L74"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "hold",
    "short_label": "DELETE",
    "action": "Repeats deletion after 0.45 seconds, then every 0.09 seconds, while held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "240-265",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L240-L265"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "press",
    "short_label": "SLICE",
    "action": "Plays the mapped slice and selects its start marker.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_slice.c",
      "lines": "200-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_slice.c#L200-L209"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1468-1470",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1468-L1470"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "short_label": "CANCEL",
    "action": "Cancels calibration and keeps the previous panel mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1548-1552",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1548-L1552"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1630-1634",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1630-L1634"
     }
    ]
   },
   {
    "mode": "dx_osc",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_decay",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_color",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_mode",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   }
  ],
  "key_d4": [
   {
    "mode": "any",
    "gesture": "press",
    "short_label": "D4",
    "action": "With chromatic mapping, octave zero and no transpose, plays D4 on the selected track; engine key maps, scales, chords and active grid, layer, naming or wake gestures can change the result.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "709-735",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L709-L735"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "81-115",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L81-L115"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/core.h",
      "lines": "413-429",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/core.h#L413-L429"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "84-85",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L84-L85"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases the notes this key began on its original track unless another held key still owns them; the arpeggiator’s HOLD can retain its chord.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "663-674",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L663-L674"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "739-747",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L739-L747"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "short_label": "WRITE NOTE",
    "action": "Writes the mapped note or chord into the cursor step in memory while REC is armed and stopped, replacing its previous note list on the first press; SAVE held can undo the recording pass and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-975",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L938-L975"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "When all note keys are released, advances one step after writing the chord; an ignored black key in WHITE mapping writes nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "954-977",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L954-L977"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "short_label": "STEP 6",
    "action": "Selects step 6 of the displayed bank and adds the selected lane’s hit if empty, or marks its existing hit for removal on release.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "494-520",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L494-L520"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "release",
    "short_label": "TOGGLE HIT",
    "action": "Removes the hit marked on press unless a lock turn or lock clear kept it, without a question or a separate undo copy; a preceding REC snapshot may recover it and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "553-565",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L553-L565"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press_while_holding:key_cs5",
    "short_label": "STEP ACCENT",
    "action": "At step 6 of the bank, adds the selected lane’s accent and hit if absent, or marks its existing accent for removal on release.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "505-518",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L505-L518"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "723-739",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L723-L739"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "release",
    "short_label": "END ACCENT",
    "action": "If pressed with C#5 held on an existing accent, removes only that accent on release unless a lock action kept it, leaving the hit; it asks nothing and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "553-565",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L553-L565"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "press",
    "short_label": "WAKE",
    "action": "Wakes the display and consumes this gesture; PLAY can still stop a running transport, and MASTER does not wake the screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1198-1201",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1198-L1201"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press",
    "short_label": "HPF",
    "action": "Sweeps a high-pass filter up over a bar immediately while the key stays held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "118-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L118-L146"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "short_label": "END HPF",
    "action": "Ends this key’s high-pass sweep while any FILTER macro setting and buffer effect continue.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "739-743",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L739-L743"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "159-170",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L159-L170"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "32-38",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L32-L38"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "131-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L131-L146"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "161-168",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L161-L168"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "282-302",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L282-L302"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "press",
    "short_label": "HPF",
    "action": "Sweeps a high-pass filter up over a bar when toggled on, with another press turning it off.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "release",
    "short_label": "KEEP EFFECT",
    "action": "Leaves the toggled effect as it is.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press",
    "short_label": "FILL",
    "action": "Activates the fill condition while held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "496-497",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L496-L497"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "release",
    "short_label": "END FILL",
    "action": "Ends the held fill condition.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "525-538",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L525-L538"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press",
    "short_label": "ROOT D",
    "action": "Sets the root to this key’s pitch class, regardless of octave.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "501-502",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L501-L502"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press",
    "short_label": "VOICE",
    "action": "Keeps the edited sound unchanged if VOICE is already selected; otherwise selects VOICE and loads its first sound in memory, preserving steps but removing old engine-control and drum-lane-level automation and locks, with SAVE-held undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "503-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L503-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/engines.c",
      "lines": "127-164",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/engines.c#L127-L164"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "314-330",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L314-L330"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/motion.c",
      "lines": "374-398",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/motion.c#L374-L398"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1042-1049",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1042-L1049"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "317-330",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L317-L330"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press",
    "short_label": "COOK",
    "action": "Makes a small random change to existing hits or melodic notes within LEN; SAVE-held can undo the latest change.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "373-379",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L373-L379"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "25",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L25"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "30-47",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L30-L47"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "59-65",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L59-L65"
     }
    ]
   },
   {
    "mode": "layer_seq_drum",
    "gesture": "press",
    "short_label": "COOK",
    "action": "Makes a small random change to existing hits or melodic notes within LEN; SAVE-held can undo the latest change.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "373-379",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L373-L379"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "25",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L25"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "30-47",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L30-L47"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "59-65",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L59-L65"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "508-510",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L508-L510"
     }
    ]
   },
   {
    "mode": "layer_perf_track",
    "gesture": "press",
    "short_label": "ENTRY F",
    "action": "Launches list entry F on the selected track immediately while stopped or at LAUNCH while playing, without taking an undo copy.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "999-1021",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L999-L1021"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "press",
    "short_label": "SCENE 6",
    "action": "Recalls scene 6’s entries and mutes immediately while stopped or stages them for LAUNCH while playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "930-953",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L930-L953"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "press_while_holding:button_save",
    "short_label": "STORE 6",
    "action": "Keeps current entries and mutes in scene 6, asking before replacing a used scene and offering no undo; it reaches flash through project saving or the enabled session autosave after the usual quiet stopped delay.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "955-988",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L955-L988"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "906-928",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L906-L928"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1148-1152",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1148-L1152"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1498-1507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1498-L1507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1580-1621",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1580-L1621"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "press",
    "short_label": "LM",
    "action": "Types from LM, advancing within that group when tapped again within 0.8 seconds.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "139-159",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L139-L159"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "29-32",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L29-L32"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "press",
    "short_label": "6",
    "action": "Types 6.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "139-159",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L139-L159"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "29-32",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L29-L32"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "press",
    "short_label": "SLICE",
    "action": "Plays the mapped slice and selects its start marker.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_slice.c",
      "lines": "200-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_slice.c#L200-L209"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1468-1470",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1468-L1470"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "short_label": "CANCEL",
    "action": "Cancels calibration and keeps the previous panel mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1548-1552",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1548-L1552"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1630-1634",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1630-L1634"
     }
    ]
   },
   {
    "mode": "dx_osc",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_decay",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_color",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_mode",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   }
  ],
  "key_ds4": [
   {
    "mode": "any",
    "gesture": "press",
    "short_label": "D#4",
    "action": "With chromatic mapping, octave zero and no transpose, plays D#4 on the selected track; engine key maps, scales, chords and active grid, layer, naming or wake gestures can change the result.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "709-735",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L709-L735"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "81-115",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L81-L115"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/core.h",
      "lines": "413-429",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/core.h#L413-L429"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "84-85",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L84-L85"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases the notes this key began on its original track unless another held key still owns them; the arpeggiator’s HOLD can retain its chord.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "663-674",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L663-L674"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "739-747",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L739-L747"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "short_label": "WRITE NOTE",
    "action": "Unless WHITE mapping silences this black key, writes its mapped note or chord into the cursor step in memory while REC is armed and stopped; the first press replaces the previous note list, SAVE held can undo the pass and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-975",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L938-L975"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "When all note keys are released, advances one step after writing the chord; an ignored black key in WHITE mapping writes nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "954-977",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L954-L977"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "short_label": "OP HAT",
    "action": "Selects drum lane 5 and sounds its kit note, which can also record live while armed.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "521-522",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L521-L522"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "727-735",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L727-L735"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "press",
    "short_label": "WAKE",
    "action": "Wakes the display and consumes this gesture; PLAY can still stop a running transport, and MASTER does not wake the screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1198-1201",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1198-L1201"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press",
    "short_label": "CUT T5",
    "action": "Cuts track 5 until this key is released without changing its stored mute.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "short_label": "END CUT",
    "action": "Ends this temporary cut of track 5.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "press",
    "short_label": "CUT T5",
    "action": "Cuts track 5 until another press toggles the cut off, without changing its stored mute.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "release",
    "short_label": "KEEP CUT",
    "action": "Leaves the toggled cut of track 5 as it is.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press",
    "short_label": "MUTE T5",
    "action": "Toggles track 5’s mute immediately.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "483-495",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L483-L495"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press",
    "short_label": "ROOT D#",
    "action": "Sets the root to this key’s pitch class, regardless of octave.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "501-502",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L501-L502"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "483-524",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L483-L524"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "518-523",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L518-L523"
     }
    ]
   },
   {
    "mode": "layer_seq_drum",
    "gesture": "press",
    "short_label": "LANE 5",
    "action": "Selects drum lane 5 for lane tools without playing it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "518-522",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L518-L522"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "508-510",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L508-L510"
     }
    ]
   },
   {
    "mode": "layer_perf_track",
    "gesture": "press",
    "short_label": "STAGE T5",
    "action": "Toggles track 5’s mute immediately while stopped or stages it for LAUNCH while playing; another press cancels a pending mute.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "822-859",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L822-L859"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "press",
    "short_label": "STAGE T5",
    "action": "Toggles track 5’s mute immediately while stopped or stages it for LAUNCH while playing; another press cancels a pending mute.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "822-859",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L822-L859"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "press",
    "short_label": "123",
    "action": "Switches between letter groups and single-character typing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "160-189",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L160-L189"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "65-74",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L65-L74"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "press",
    "short_label": "ABC",
    "action": "Switches between letter groups and single-character typing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "160-189",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L160-L189"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "65-74",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L65-L74"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "press",
    "short_label": "SLICE",
    "action": "Plays the mapped slice and selects its start marker.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_slice.c",
      "lines": "200-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_slice.c#L200-L209"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1468-1470",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1468-L1470"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "short_label": "CANCEL",
    "action": "Cancels calibration and keeps the previous panel mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1548-1552",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1548-L1552"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1630-1634",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1630-L1634"
     }
    ]
   },
   {
    "mode": "dx_osc",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_decay",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_color",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_mode",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   }
  ],
  "key_e4": [
   {
    "mode": "any",
    "gesture": "press",
    "short_label": "E4",
    "action": "With chromatic mapping, octave zero and no transpose, plays E4 on the selected track; engine key maps, scales, chords and active grid, layer, naming or wake gestures can change the result.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "709-735",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L709-L735"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "81-115",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L81-L115"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/core.h",
      "lines": "413-429",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/core.h#L413-L429"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "84-85",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L84-L85"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases the notes this key began on its original track unless another held key still owns them; the arpeggiator’s HOLD can retain its chord.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "663-674",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L663-L674"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "739-747",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L739-L747"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "short_label": "WRITE NOTE",
    "action": "Writes the mapped note or chord into the cursor step in memory while REC is armed and stopped, replacing its previous note list on the first press; SAVE held can undo the recording pass and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-975",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L938-L975"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "When all note keys are released, advances one step after writing the chord; an ignored black key in WHITE mapping writes nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "954-977",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L954-L977"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "short_label": "STEP 7",
    "action": "Selects step 7 of the displayed bank and adds the selected lane’s hit if empty, or marks its existing hit for removal on release.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "494-520",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L494-L520"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "release",
    "short_label": "TOGGLE HIT",
    "action": "Removes the hit marked on press unless a lock turn or lock clear kept it, without a question or a separate undo copy; a preceding REC snapshot may recover it and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "553-565",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L553-L565"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press_while_holding:key_cs5",
    "short_label": "STEP ACCENT",
    "action": "At step 7 of the bank, adds the selected lane’s accent and hit if absent, or marks its existing accent for removal on release.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "505-518",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L505-L518"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "723-739",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L723-L739"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "release",
    "short_label": "END ACCENT",
    "action": "If pressed with C#5 held on an existing accent, removes only that accent on release unless a lock action kept it, leaving the hit; it asks nothing and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "553-565",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L553-L565"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "press",
    "short_label": "WAKE",
    "action": "Wakes the display and consumes this gesture; PLAY can still stop a running transport, and MASTER does not wake the screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1198-1201",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1198-L1201"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press",
    "short_label": "TAPE STOP",
    "action": "Slows the recent mix toward a stop immediately while the key stays held; starting it discards every track’s SLICER capture without asking or undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "118-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L118-L146"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "152-176",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L152-L176"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "short_label": "END EFFECT",
    "action": "Ends this held effect, returning to an earlier buffer effect if one remains held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "739-743",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L739-L743"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "159-170",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L159-L170"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "press",
    "short_label": "TAPE STOP",
    "action": "Slows the recent mix toward a stop when toggled on, with another press turning it off; starting it discards every track’s SLICER capture without asking or undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "152-176",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L152-L176"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "release",
    "short_label": "KEEP EFFECT",
    "action": "Leaves the toggled effect as it is.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press",
    "short_label": "SOLO T5",
    "action": "Solos track 5 with any other held solo keys.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "472-500",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L472-L500"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "release",
    "short_label": "END SOLO",
    "action": "Removes track 5 from the held solos.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "525-538",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L525-L538"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press",
    "short_label": "ROOT E",
    "action": "Sets the root to this key’s pitch class, regardless of octave.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "501-502",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L501-L502"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press",
    "short_label": "TRIO",
    "action": "Keeps the edited sound unchanged if TRIO is already selected; otherwise selects TRIO and loads its first sound in memory, preserving steps but removing old engine-control and drum-lane-level automation and locks, with SAVE-held undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "503-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L503-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/engines.c",
      "lines": "127-164",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/engines.c#L127-L164"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "314-330",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L314-L330"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/motion.c",
      "lines": "374-398",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/motion.c#L374-L398"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1042-1049",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1042-L1049"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "317-330",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L317-L330"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "518-523",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L518-L523"
     }
    ]
   },
   {
    "mode": "layer_seq_drum",
    "gesture": "press",
    "short_label": "BEAT",
    "action": "Replaces steps within LEN with a kick, backbeat and eighth-note hat pattern without asking; SAVE-held can undo it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "380-388",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L380-L388"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "25",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L25"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "30-47",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L30-L47"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "59-65",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L59-L65"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "508-510",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L508-L510"
     }
    ]
   },
   {
    "mode": "layer_perf_track",
    "gesture": "press",
    "short_label": "ENTRY G",
    "action": "Launches list entry G on the selected track immediately while stopped or at LAUNCH while playing, without taking an undo copy.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "999-1021",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L999-L1021"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "press",
    "short_label": "SCENE 7",
    "action": "Recalls scene 7’s entries and mutes immediately while stopped or stages them for LAUNCH while playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "930-953",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L930-L953"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "press_while_holding:button_save",
    "short_label": "STORE 7",
    "action": "Keeps current entries and mutes in scene 7, asking before replacing a used scene and offering no undo; it reaches flash through project saving or the enabled session autosave after the usual quiet stopped delay.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "955-988",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L955-L988"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "906-928",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L906-L928"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1148-1152",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1148-L1152"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1498-1507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1498-L1507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1580-1621",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1580-L1621"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "press",
    "short_label": "NO",
    "action": "Types from NO, advancing within that group when tapped again within 0.8 seconds.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "139-159",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L139-L159"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "29-32",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L29-L32"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "press",
    "short_label": "7",
    "action": "Types 7.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "139-159",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L139-L159"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "29-32",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L29-L32"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "press",
    "short_label": "SLICE",
    "action": "Plays the mapped slice and selects its start marker.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_slice.c",
      "lines": "200-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_slice.c#L200-L209"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1468-1470",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1468-L1470"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "short_label": "CANCEL",
    "action": "Cancels calibration and keeps the previous panel mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1548-1552",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1548-L1552"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1630-1634",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1630-L1634"
     }
    ]
   },
   {
    "mode": "dx_osc",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_decay",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_color",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_mode",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   }
  ],
  "key_f4": [
   {
    "mode": "any",
    "gesture": "press",
    "short_label": "F4",
    "action": "With chromatic mapping, octave zero and no transpose, plays F4 on the selected track; engine key maps, scales, chords and active grid, layer, naming or wake gestures can change the result.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "709-735",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L709-L735"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "81-115",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L81-L115"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/core.h",
      "lines": "413-429",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/core.h#L413-L429"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "84-85",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L84-L85"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases the notes this key began on its original track unless another held key still owns them; the arpeggiator’s HOLD can retain its chord.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "663-674",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L663-L674"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "739-747",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L739-L747"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "short_label": "WRITE NOTE",
    "action": "Writes the mapped note or chord into the cursor step in memory while REC is armed and stopped, replacing its previous note list on the first press; SAVE held can undo the recording pass and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-975",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L938-L975"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "When all note keys are released, advances one step after writing the chord; an ignored black key in WHITE mapping writes nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "954-977",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L954-L977"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "short_label": "STEP 8",
    "action": "Selects step 8 of the displayed bank and adds the selected lane’s hit if empty, or marks its existing hit for removal on release.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "494-520",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L494-L520"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "release",
    "short_label": "TOGGLE HIT",
    "action": "Removes the hit marked on press unless a lock turn or lock clear kept it, without a question or a separate undo copy; a preceding REC snapshot may recover it and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "553-565",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L553-L565"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press_while_holding:key_cs5",
    "short_label": "STEP ACCENT",
    "action": "At step 8 of the bank, adds the selected lane’s accent and hit if absent, or marks its existing accent for removal on release.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "505-518",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L505-L518"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "723-739",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L723-L739"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "release",
    "short_label": "END ACCENT",
    "action": "If pressed with C#5 held on an existing accent, removes only that accent on release unless a lock action kept it, leaving the hit; it asks nothing and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "553-565",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L553-L565"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "press",
    "short_label": "WAKE",
    "action": "Wakes the display and consumes this gesture; PLAY can still stop a running transport, and MASTER does not wake the screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1198-1201",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1198-L1201"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press",
    "short_label": "FREEZE",
    "action": "Holds a short slice of the mix immediately while the key stays held; starting it discards every track’s SLICER capture without asking or undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "118-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L118-L146"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "152-176",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L152-L176"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "short_label": "END FREEZE",
    "action": "Ends this held effect, returning to an earlier buffer effect if one remains held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "739-743",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L739-L743"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "159-170",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L159-L170"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "press",
    "short_label": "FREEZE",
    "action": "Holds a short slice of the mix when toggled on, with another press turning it off; starting it discards every track’s SLICER capture without asking or undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "152-176",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L152-L176"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "release",
    "short_label": "KEEP EFFECT",
    "action": "Leaves the toggled effect as it is.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press",
    "short_label": "TAP TEMPO",
    "action": "Sets the internal tempo from at least three taps, using the latest four taps and restarting after a two-second gap.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "333-357",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L333-L357"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press",
    "short_label": "ROOT F",
    "action": "Sets the root to this key’s pitch class, regardless of octave.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "501-502",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L501-L502"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press",
    "short_label": "WHEEL",
    "action": "Keeps the edited sound unchanged if WHEEL is already selected; otherwise selects WHEEL and loads its first sound in memory, preserving steps but removing old engine-control and drum-lane-level automation and locks, with SAVE-held undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "503-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L503-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/engines.c",
      "lines": "127-164",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/engines.c#L127-L164"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "314-330",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L314-L330"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/motion.c",
      "lines": "374-398",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/motion.c#L374-L398"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1042-1049",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1042-L1049"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "317-330",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L317-L330"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "518-523",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L518-L523"
     }
    ]
   },
   {
    "mode": "layer_seq_drum",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "518-523",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L518-L523"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "508-510",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L508-L510"
     }
    ]
   },
   {
    "mode": "layer_perf_track",
    "gesture": "press",
    "short_label": "ENTRY H",
    "action": "Launches list entry H on the selected track immediately while stopped or at LAUNCH while playing, without taking an undo copy.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "999-1021",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L999-L1021"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "press",
    "short_label": "SCENE 8",
    "action": "Recalls scene 8’s entries and mutes immediately while stopped or stages them for LAUNCH while playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "930-953",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L930-L953"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "press_while_holding:button_save",
    "short_label": "STORE 8",
    "action": "Keeps current entries and mutes in scene 8, asking before replacing a used scene and offering no undo; it reaches flash through project saving or the enabled session autosave after the usual quiet stopped delay.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "955-988",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L955-L988"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "906-928",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L906-L928"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1148-1152",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1148-L1152"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1498-1507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1498-L1507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1580-1621",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1580-L1621"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "press",
    "short_label": "PQ",
    "action": "Types from PQ, advancing within that group when tapped again within 0.8 seconds.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "139-159",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L139-L159"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "29-32",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L29-L32"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "press",
    "short_label": "8",
    "action": "Types 8.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "139-159",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L139-L159"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "29-32",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L29-L32"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "press",
    "short_label": "SLICE",
    "action": "Plays the mapped slice and selects its start marker.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_slice.c",
      "lines": "200-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_slice.c#L200-L209"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1468-1470",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1468-L1470"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "short_label": "CANCEL",
    "action": "Cancels calibration and keeps the previous panel mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1548-1552",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1548-L1552"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1630-1634",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1630-L1634"
     }
    ]
   },
   {
    "mode": "dx_osc",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_decay",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_color",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_mode",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   }
  ],
  "key_fs4": [
   {
    "mode": "any",
    "gesture": "press",
    "short_label": "F#4",
    "action": "With chromatic mapping, octave zero and no transpose, plays F#4 on the selected track; engine key maps, scales, chords and active grid, layer, naming or wake gestures can change the result.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "709-735",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L709-L735"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "81-115",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L81-L115"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/core.h",
      "lines": "413-429",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/core.h#L413-L429"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "84-85",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L84-L85"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases the notes this key began on its original track unless another held key still owns them; the arpeggiator’s HOLD can retain its chord.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "663-674",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L663-L674"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "739-747",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L739-L747"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "short_label": "WRITE NOTE",
    "action": "Unless WHITE mapping silences this black key, writes its mapped note or chord into the cursor step in memory while REC is armed and stopped; the first press replaces the previous note list, SAVE held can undo the pass and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-975",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L938-L975"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "When all note keys are released, advances one step after writing the chord; an ignored black key in WHITE mapping writes nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "954-977",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L954-L977"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "short_label": "TOM",
    "action": "Selects drum lane 6 and sounds its kit note, which can also record live while armed.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "521-522",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L521-L522"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "727-735",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L727-L735"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "press",
    "short_label": "WAKE",
    "action": "Wakes the display and consumes this gesture; PLAY can still stop a running transport, and MASTER does not wake the screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1198-1201",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1198-L1201"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press",
    "short_label": "CUT T6",
    "action": "Cuts track 6 until this key is released without changing its stored mute.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "short_label": "END CUT",
    "action": "Ends this temporary cut of track 6.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "press",
    "short_label": "CUT T6",
    "action": "Cuts track 6 until another press toggles the cut off, without changing its stored mute.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "release",
    "short_label": "KEEP CUT",
    "action": "Leaves the toggled cut of track 6 as it is.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press",
    "short_label": "MUTE T6",
    "action": "Toggles track 6’s mute immediately.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "483-495",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L483-L495"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press",
    "short_label": "ROOT F#",
    "action": "Sets the root to this key’s pitch class, regardless of octave.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "501-502",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L501-L502"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "483-524",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L483-L524"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "518-523",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L518-L523"
     }
    ]
   },
   {
    "mode": "layer_seq_drum",
    "gesture": "press",
    "short_label": "LANE 6",
    "action": "Selects drum lane 6 for lane tools without playing it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "518-522",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L518-L522"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "508-510",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L508-L510"
     }
    ]
   },
   {
    "mode": "layer_perf_track",
    "gesture": "press",
    "short_label": "STAGE T6",
    "action": "Toggles track 6’s mute immediately while stopped or stages it for LAUNCH while playing; another press cancels a pending mute.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "822-859",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L822-L859"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "press",
    "short_label": "STAGE T6",
    "action": "Toggles track 6’s mute immediately while stopped or stages it for LAUNCH while playing; another press cancels a pending mute.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "822-859",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L822-L859"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "press",
    "short_label": "CURSOR LEFT",
    "action": "Moves the cursor one place left.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "160-189",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L160-L189"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "65-74",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L65-L74"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "hold",
    "short_label": "CURSOR LEFT",
    "action": "Repeats cursor movement after 0.45 seconds, then every 0.09 seconds, while held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "240-265",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L240-L265"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "press",
    "short_label": "CURSOR LEFT",
    "action": "Moves the cursor one place left.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "160-189",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L160-L189"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "65-74",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L65-L74"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "hold",
    "short_label": "CURSOR LEFT",
    "action": "Repeats cursor movement after 0.45 seconds, then every 0.09 seconds, while held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "240-265",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L240-L265"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "press",
    "short_label": "SLICE",
    "action": "Plays the mapped slice and selects its start marker.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_slice.c",
      "lines": "200-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_slice.c#L200-L209"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1468-1470",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1468-L1470"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "short_label": "CANCEL",
    "action": "Cancels calibration and keeps the previous panel mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1548-1552",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1548-L1552"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1630-1634",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1630-L1634"
     }
    ]
   },
   {
    "mode": "dx_osc",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_decay",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_color",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_mode",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   }
  ],
  "key_g4": [
   {
    "mode": "any",
    "gesture": "press",
    "short_label": "G4",
    "action": "With chromatic mapping, octave zero and no transpose, plays G4 on the selected track; engine key maps, scales, chords and active grid, layer, naming or wake gestures can change the result.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "709-735",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L709-L735"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "81-115",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L81-L115"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/core.h",
      "lines": "413-429",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/core.h#L413-L429"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "84-85",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L84-L85"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases the notes this key began on its original track unless another held key still owns them; the arpeggiator’s HOLD can retain its chord.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "663-674",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L663-L674"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "739-747",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L739-L747"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "short_label": "WRITE NOTE",
    "action": "Writes the mapped note or chord into the cursor step in memory while REC is armed and stopped, replacing its previous note list on the first press; SAVE held can undo the recording pass and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-975",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L938-L975"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "When all note keys are released, advances one step after writing the chord; an ignored black key in WHITE mapping writes nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "954-977",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L954-L977"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "short_label": "STEP 9",
    "action": "Selects step 9 of the displayed bank and adds the selected lane’s hit if empty, or marks its existing hit for removal on release.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "494-520",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L494-L520"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "release",
    "short_label": "TOGGLE HIT",
    "action": "Removes the hit marked on press unless a lock turn or lock clear kept it, without a question or a separate undo copy; a preceding REC snapshot may recover it and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "553-565",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L553-L565"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press_while_holding:key_cs5",
    "short_label": "STEP ACCENT",
    "action": "At step 9 of the bank, adds the selected lane’s accent and hit if absent, or marks its existing accent for removal on release.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "505-518",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L505-L518"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "723-739",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L723-L739"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "release",
    "short_label": "END ACCENT",
    "action": "If pressed with C#5 held on an existing accent, removes only that accent on release unless a lock action kept it, leaving the hit; it asks nothing and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "553-565",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L553-L565"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "press",
    "short_label": "WAKE",
    "action": "Wakes the display and consumes this gesture; PLAY can still stop a running transport, and MASTER does not wake the screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1198-1201",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1198-L1201"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press",
    "short_label": "OCT UP",
    "action": "Adds an octave-up version of the mix immediately while the key stays held; starting it discards every track’s SLICER capture without asking or undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "118-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L118-L146"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "152-176",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L152-L176"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "short_label": "END OCT UP",
    "action": "Ends this held effect, returning to an earlier buffer effect if one remains held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "739-743",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L739-L743"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "159-170",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L159-L170"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "press",
    "short_label": "OCT UP",
    "action": "Adds an octave-up version of the mix when toggled on, with another press turning it off; starting it discards every track’s SLICER capture without asking or undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "152-176",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L152-L176"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "release",
    "short_label": "KEEP EFFECT",
    "action": "Leaves the toggled effect as it is.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press",
    "short_label": "SOLO T6",
    "action": "Solos track 6 with any other held solo keys.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "472-500",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L472-L500"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "release",
    "short_label": "END SOLO",
    "action": "Removes track 6 from the held solos.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "525-538",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L525-L538"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press",
    "short_label": "ROOT G",
    "action": "Sets the root to this key’s pitch class, regardless of octave.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "501-502",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L501-L502"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press",
    "short_label": "GRAIN",
    "action": "Keeps the edited sound unchanged if GRAIN is already selected; otherwise selects GRAIN on tracks 1–4 and loads its first sound in memory, preserving steps but removing old engine-control and drum-lane-level automation and locks, with SAVE-held undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "503-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L503-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/engines.c",
      "lines": "127-164",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/engines.c#L127-L164"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "314-330",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L314-L330"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/motion.c",
      "lines": "374-398",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/motion.c#L374-L398"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1042-1049",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1042-L1049"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "317-330",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L317-L330"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "518-523",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L518-L523"
     }
    ]
   },
   {
    "mode": "layer_seq_drum",
    "gesture": "press",
    "short_label": "LANE CLEAR",
    "action": "Removes selected-lane hits within LEN immediately without asking; SAVE-held can undo it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "389-394",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L389-L394"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "25",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L25"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "30-47",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L30-L47"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "59-65",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L59-L65"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "508-510",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L508-L510"
     }
    ]
   },
   {
    "mode": "layer_perf_track",
    "gesture": "press",
    "short_label": "ENTRY I",
    "action": "Launches list entry I on the selected track immediately while stopped or at LAUNCH while playing, without taking an undo copy.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "999-1021",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L999-L1021"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "press",
    "short_label": "SCENE 9",
    "action": "Recalls scene 9’s entries and mutes immediately while stopped or stages them for LAUNCH while playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "930-953",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L930-L953"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "press_while_holding:button_save",
    "short_label": "STORE 9",
    "action": "Keeps current entries and mutes in scene 9, asking before replacing a used scene and offering no undo; it reaches flash through project saving or the enabled session autosave after the usual quiet stopped delay.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "955-988",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L955-L988"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "906-928",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L906-L928"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1148-1152",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1148-L1152"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1498-1507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1498-L1507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1580-1621",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1580-L1621"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "press",
    "short_label": "RS",
    "action": "Types from RS, advancing within that group when tapped again within 0.8 seconds.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "139-159",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L139-L159"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "29-32",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L29-L32"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "press",
    "short_label": "9",
    "action": "Types 9.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "139-159",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L139-L159"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "29-32",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L29-L32"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "press",
    "short_label": "SLICE",
    "action": "Plays the mapped slice and selects its start marker.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_slice.c",
      "lines": "200-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_slice.c#L200-L209"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1468-1470",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1468-L1470"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "short_label": "CANCEL",
    "action": "Cancels calibration and keeps the previous panel mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1548-1552",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1548-L1552"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1630-1634",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1630-L1634"
     }
    ]
   },
   {
    "mode": "dx_osc",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_decay",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_color",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_mode",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   }
  ],
  "key_gs4": [
   {
    "mode": "any",
    "gesture": "press",
    "short_label": "G#4",
    "action": "With chromatic mapping, octave zero and no transpose, plays G#4 on the selected track; engine key maps, scales, chords and active grid, layer, naming or wake gestures can change the result.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "709-735",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L709-L735"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "81-115",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L81-L115"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/core.h",
      "lines": "413-429",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/core.h#L413-L429"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "84-85",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L84-L85"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases the notes this key began on its original track unless another held key still owns them; the arpeggiator’s HOLD can retain its chord.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "663-674",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L663-L674"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "739-747",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L739-L747"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "short_label": "WRITE NOTE",
    "action": "Unless WHITE mapping silences this black key, writes its mapped note or chord into the cursor step in memory while REC is armed and stopped; the first press replaces the previous note list, SAVE held can undo the pass and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-975",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L938-L975"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "When all note keys are released, advances one step after writing the chord; an ignored black key in WHITE mapping writes nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "954-977",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L954-L977"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "short_label": "RIM",
    "action": "Selects drum lane 7 and sounds its kit note, which can also record live while armed.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "521-522",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L521-L522"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "727-735",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L727-L735"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "press",
    "short_label": "WAKE",
    "action": "Wakes the display and consumes this gesture; PLAY can still stop a running transport, and MASTER does not wake the screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1198-1201",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1198-L1201"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "483-524",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L483-L524"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press",
    "short_label": "ROOT G#",
    "action": "Sets the root to this key’s pitch class, regardless of octave.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "501-502",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L501-L502"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "483-524",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L483-L524"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "518-523",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L518-L523"
     }
    ]
   },
   {
    "mode": "layer_seq_drum",
    "gesture": "press",
    "short_label": "LANE 7",
    "action": "Selects drum lane 7 for lane tools without playing it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "518-522",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L518-L522"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "508-510",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L508-L510"
     }
    ]
   },
   {
    "mode": "layer_perf_track",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "511-517",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L511-L517"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "511-517",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L511-L517"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "press",
    "short_label": "SPACE",
    "action": "Inserts a space at the cursor.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "160-189",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L160-L189"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "65-74",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L65-L74"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "press",
    "short_label": "SPACE",
    "action": "Inserts a space at the cursor.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "160-189",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L160-L189"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "65-74",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L65-L74"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "press",
    "short_label": "SLICE",
    "action": "Plays the mapped slice and selects its start marker.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_slice.c",
      "lines": "200-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_slice.c#L200-L209"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1468-1470",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1468-L1470"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "short_label": "CANCEL",
    "action": "Cancels calibration and keeps the previous panel mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1548-1552",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1548-L1552"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1630-1634",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1630-L1634"
     }
    ]
   },
   {
    "mode": "dx_osc",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_decay",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_color",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_mode",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   }
  ],
  "key_a4": [
   {
    "mode": "any",
    "gesture": "press",
    "short_label": "A4",
    "action": "With chromatic mapping, octave zero and no transpose, plays A4 on the selected track; engine key maps, scales, chords and active grid, layer, naming or wake gestures can change the result.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "709-735",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L709-L735"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "81-115",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L81-L115"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/core.h",
      "lines": "413-429",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/core.h#L413-L429"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "84-85",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L84-L85"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases the notes this key began on its original track unless another held key still owns them; the arpeggiator’s HOLD can retain its chord.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "663-674",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L663-L674"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "739-747",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L739-L747"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "short_label": "WRITE NOTE",
    "action": "Writes the mapped note or chord into the cursor step in memory while REC is armed and stopped, replacing its previous note list on the first press; SAVE held can undo the recording pass and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-975",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L938-L975"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "When all note keys are released, advances one step after writing the chord; an ignored black key in WHITE mapping writes nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "954-977",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L954-L977"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "short_label": "STEP 10",
    "action": "Selects step 10 of the displayed bank and adds the selected lane’s hit if empty, or marks its existing hit for removal on release.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "494-520",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L494-L520"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "release",
    "short_label": "TOGGLE HIT",
    "action": "Removes the hit marked on press unless a lock turn or lock clear kept it, without a question or a separate undo copy; a preceding REC snapshot may recover it and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "553-565",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L553-L565"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press_while_holding:key_cs5",
    "short_label": "STEP ACCENT",
    "action": "At step 10 of the bank, adds the selected lane’s accent and hit if absent, or marks its existing accent for removal on release.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "505-518",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L505-L518"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "723-739",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L723-L739"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "release",
    "short_label": "END ACCENT",
    "action": "If pressed with C#5 held on an existing accent, removes only that accent on release unless a lock action kept it, leaving the hit; it asks nothing and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "553-565",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L553-L565"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "press",
    "short_label": "WAKE",
    "action": "Wakes the display and consumes this gesture; PLAY can still stop a running transport, and MASTER does not wake the screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1198-1201",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1198-L1201"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press",
    "short_label": "OCT DOWN",
    "action": "Adds an octave-down version of the mix immediately while the key stays held; starting it discards every track’s SLICER capture without asking or undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "118-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L118-L146"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "152-176",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L152-L176"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "short_label": "END OCT DOWN",
    "action": "Ends this held effect, returning to an earlier buffer effect if one remains held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "739-743",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L739-L743"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "159-170",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L159-L170"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "press",
    "short_label": "OCT DOWN",
    "action": "Adds an octave-down version of the mix when toggled on, with another press turning it off; starting it discards every track’s SLICER capture without asking or undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "152-176",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L152-L176"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "release",
    "short_label": "KEEP EFFECT",
    "action": "Leaves the toggled effect as it is.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "483-524",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L483-L524"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press",
    "short_label": "ROOT A",
    "action": "Sets the root to this key’s pitch class, regardless of octave.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "501-502",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L501-L502"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press",
    "short_label": "PHYS",
    "action": "Keeps the edited sound unchanged if PHYS is already selected; otherwise selects PHYS on tracks 1–4 and loads its first sound in memory, preserving steps but removing old engine-control and drum-lane-level automation and locks, with SAVE-held undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "503-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L503-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/engines.c",
      "lines": "127-164",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/engines.c#L127-L164"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "314-330",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L314-L330"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/motion.c",
      "lines": "374-398",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/motion.c#L374-L398"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1042-1049",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1042-L1049"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "317-330",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L317-L330"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "518-523",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L518-L523"
     }
    ]
   },
   {
    "mode": "layer_seq_drum",
    "gesture": "press",
    "short_label": "LANE REVERSE",
    "action": "Mirrors selected-lane hits and accents within LEN while leaving other lanes in place; SAVE-held can undo it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "394-401",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L394-L401"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "25",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L25"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "30-47",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L30-L47"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "59-65",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L59-L65"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "508-510",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L508-L510"
     }
    ]
   },
   {
    "mode": "layer_perf_track",
    "gesture": "press",
    "short_label": "ENTRY J",
    "action": "Launches list entry J on the selected track immediately while stopped or at LAUNCH while playing, without taking an undo copy.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "999-1021",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L999-L1021"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "press",
    "short_label": "SCENE 10",
    "action": "Recalls scene 10’s entries and mutes immediately while stopped or stages them for LAUNCH while playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "930-953",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L930-L953"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "press_while_holding:button_save",
    "short_label": "STORE 10",
    "action": "Keeps current entries and mutes in scene 10, asking before replacing a used scene and offering no undo; it reaches flash through project saving or the enabled session autosave after the usual quiet stopped delay.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "955-988",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L955-L988"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "906-928",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L906-L928"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1148-1152",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1148-L1152"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1498-1507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1498-L1507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1580-1621",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1580-L1621"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "press",
    "short_label": "TU",
    "action": "Types from TU, advancing within that group when tapped again within 0.8 seconds.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "139-159",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L139-L159"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "29-32",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L29-L32"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "press",
    "short_label": "0",
    "action": "Types 0.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "139-159",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L139-L159"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "29-32",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L29-L32"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "press",
    "short_label": "SLICE",
    "action": "Plays the mapped slice and selects its start marker.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_slice.c",
      "lines": "200-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_slice.c#L200-L209"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1468-1470",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1468-L1470"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "short_label": "CANCEL",
    "action": "Cancels calibration and keeps the previous panel mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1548-1552",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1548-L1552"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1630-1634",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1630-L1634"
     }
    ]
   },
   {
    "mode": "dx_osc",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_decay",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_color",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_mode",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   }
  ],
  "key_as4": [
   {
    "mode": "any",
    "gesture": "press",
    "short_label": "A#4",
    "action": "With chromatic mapping, octave zero and no transpose, plays A#4 on the selected track; engine key maps, scales, chords and active grid, layer, naming or wake gestures can change the result.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "709-735",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L709-L735"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "81-115",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L81-L115"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/core.h",
      "lines": "413-429",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/core.h#L413-L429"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "84-85",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L84-L85"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases the notes this key began on its original track unless another held key still owns them; the arpeggiator’s HOLD can retain its chord.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "663-674",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L663-L674"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "739-747",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L739-L747"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "short_label": "WRITE NOTE",
    "action": "Unless WHITE mapping silences this black key, writes its mapped note or chord into the cursor step in memory while REC is armed and stopped; the first press replaces the previous note list, SAVE held can undo the pass and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-975",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L938-L975"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "When all note keys are released, advances one step after writing the chord; an ignored black key in WHITE mapping writes nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "954-977",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L954-L977"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "short_label": "BELL",
    "action": "Selects drum lane 8 and sounds its kit note, which can also record live while armed.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "521-522",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L521-L522"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "727-735",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L727-L735"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "press",
    "short_label": "WAKE",
    "action": "Wakes the display and consumes this gesture; PLAY can still stop a running transport, and MASTER does not wake the screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1198-1201",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1198-L1201"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "483-524",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L483-L524"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press",
    "short_label": "ROOT A#",
    "action": "Sets the root to this key’s pitch class, regardless of octave.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "501-502",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L501-L502"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "483-524",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L483-L524"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "518-523",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L518-L523"
     }
    ]
   },
   {
    "mode": "layer_seq_drum",
    "gesture": "press",
    "short_label": "LANE 8",
    "action": "Selects drum lane 8 for lane tools without playing it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "518-522",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L518-L522"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "508-510",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L508-L510"
     }
    ]
   },
   {
    "mode": "layer_perf_track",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "511-517",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L511-L517"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "511-517",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L511-L517"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "press",
    "short_label": "CURSOR RIGHT",
    "action": "Moves the cursor one place right.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "160-189",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L160-L189"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "65-74",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L65-L74"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "hold",
    "short_label": "CURSOR RIGHT",
    "action": "Repeats cursor movement after 0.45 seconds, then every 0.09 seconds, while held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "240-265",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L240-L265"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "press",
    "short_label": "CURSOR RIGHT",
    "action": "Moves the cursor one place right.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "160-189",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L160-L189"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "65-74",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L65-L74"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "hold",
    "short_label": "CURSOR RIGHT",
    "action": "Repeats cursor movement after 0.45 seconds, then every 0.09 seconds, while held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "240-265",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L240-L265"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "press",
    "short_label": "SLICE",
    "action": "Plays the mapped slice and selects its start marker.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_slice.c",
      "lines": "200-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_slice.c#L200-L209"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1468-1470",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1468-L1470"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "short_label": "CANCEL",
    "action": "Cancels calibration and keeps the previous panel mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1548-1552",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1548-L1552"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1630-1634",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1630-L1634"
     }
    ]
   },
   {
    "mode": "dx_osc",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_decay",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_color",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_mode",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   }
  ],
  "key_b4": [
   {
    "mode": "any",
    "gesture": "press",
    "short_label": "B4",
    "action": "With chromatic mapping, octave zero and no transpose, plays B4 on the selected track; engine key maps, scales, chords and active grid, layer, naming or wake gestures can change the result.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "709-735",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L709-L735"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "81-115",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L81-L115"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/core.h",
      "lines": "413-429",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/core.h#L413-L429"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "84-85",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L84-L85"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases the notes this key began on its original track unless another held key still owns them; the arpeggiator’s HOLD can retain its chord.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "663-674",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L663-L674"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "739-747",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L739-L747"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "short_label": "WRITE NOTE",
    "action": "Writes the mapped note or chord into the cursor step in memory while REC is armed and stopped, replacing its previous note list on the first press; SAVE held can undo the recording pass and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-975",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L938-L975"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "When all note keys are released, advances one step after writing the chord; an ignored black key in WHITE mapping writes nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "954-977",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L954-L977"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "short_label": "STEP 11",
    "action": "Selects step 11 of the displayed bank and adds the selected lane’s hit if empty, or marks its existing hit for removal on release.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "494-520",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L494-L520"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "release",
    "short_label": "TOGGLE HIT",
    "action": "Removes the hit marked on press unless a lock turn or lock clear kept it, without a question or a separate undo copy; a preceding REC snapshot may recover it and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "553-565",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L553-L565"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press_while_holding:key_cs5",
    "short_label": "STEP ACCENT",
    "action": "At step 11 of the bank, adds the selected lane’s accent and hit if absent, or marks its existing accent for removal on release.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "505-518",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L505-L518"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "723-739",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L723-L739"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "release",
    "short_label": "END ACCENT",
    "action": "If pressed with C#5 held on an existing accent, removes only that accent on release unless a lock action kept it, leaving the hit; it asks nothing and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "553-565",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L553-L565"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "press",
    "short_label": "WAKE",
    "action": "Wakes the display and consumes this gesture; PLAY can still stop a running transport, and MASTER does not wake the screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1198-1201",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1198-L1201"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press",
    "short_label": "GATE",
    "action": "Chops the mix on sixteenths immediately while the key stays held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "118-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L118-L146"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "short_label": "END GATE",
    "action": "Ends the key’s rhythmic chopping and returns its gate toward full level while any buffer effect continues.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "739-743",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L739-L743"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "159-170",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L159-L170"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "32-38",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L32-L38"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "131-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L131-L146"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "161-168",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L161-L168"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "525-537",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L525-L537"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "press",
    "short_label": "GATE",
    "action": "Chops the mix on sixteenths when toggled on, with another press turning it off.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "release",
    "short_label": "KEEP EFFECT",
    "action": "Leaves the toggled effect as it is.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "483-524",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L483-L524"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press",
    "short_label": "ROOT B",
    "action": "Sets the root to this key’s pitch class, regardless of octave.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "501-502",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L501-L502"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press",
    "short_label": "NOISE",
    "action": "Keeps the edited sound unchanged if NOISE is already selected; otherwise selects NOISE and loads its first sound in memory, preserving steps but removing old engine-control and drum-lane-level automation and locks, with SAVE-held undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "503-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L503-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/engines.c",
      "lines": "127-164",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/engines.c#L127-L164"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "314-330",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L314-L330"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/motion.c",
      "lines": "374-398",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/motion.c#L374-L398"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1042-1049",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1042-L1049"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "317-330",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L317-L330"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "518-523",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L518-L523"
     }
    ]
   },
   {
    "mode": "layer_seq_drum",
    "gesture": "press",
    "short_label": "LANE FILL",
    "action": "Cycles selected-lane hits within LEN through every step, every second, every fourth and empty; SAVE-held can undo it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "220-236",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L220-L236"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "25",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L25"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "30-47",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L30-L47"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "59-65",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L59-L65"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "508-510",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L508-L510"
     }
    ]
   },
   {
    "mode": "layer_perf_track",
    "gesture": "press",
    "short_label": "ENTRY K",
    "action": "Launches list entry K on the selected track immediately while stopped or at LAUNCH while playing, without taking an undo copy.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "999-1021",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L999-L1021"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "press",
    "short_label": "SCENE 11",
    "action": "Recalls scene 11’s entries and mutes immediately while stopped or stages them for LAUNCH while playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "930-953",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L930-L953"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "press_while_holding:button_save",
    "short_label": "STORE 11",
    "action": "Keeps current entries and mutes in scene 11, asking before replacing a used scene and offering no undo; it reaches flash through project saving or the enabled session autosave after the usual quiet stopped delay.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "955-988",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L955-L988"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "906-928",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L906-L928"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1148-1152",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1148-L1152"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1498-1507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1498-L1507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1580-1621",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1580-L1621"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "press",
    "short_label": "VW",
    "action": "Types from VW, advancing within that group when tapped again within 0.8 seconds.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "139-159",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L139-L159"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "29-32",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L29-L32"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "press",
    "short_label": "-",
    "action": "Types -.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "139-159",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L139-L159"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "29-32",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L29-L32"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "press",
    "short_label": "SLICE",
    "action": "Plays the mapped slice and selects its start marker.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_slice.c",
      "lines": "200-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_slice.c#L200-L209"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1468-1470",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1468-L1470"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "short_label": "CANCEL",
    "action": "Cancels calibration and keeps the previous panel mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1548-1552",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1548-L1552"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1630-1634",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1630-L1634"
     }
    ]
   },
   {
    "mode": "dx_osc",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_decay",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_color",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_mode",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   }
  ],
  "key_c5": [
   {
    "mode": "any",
    "gesture": "press",
    "short_label": "C5",
    "action": "With chromatic mapping, octave zero and no transpose, plays C5 on the selected track; engine key maps, scales, chords and active grid, layer, naming or wake gestures can change the result.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "709-735",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L709-L735"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "81-115",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L81-L115"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/core.h",
      "lines": "413-429",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/core.h#L413-L429"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "84-85",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L84-L85"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases the notes this key began on its original track unless another held key still owns them; the arpeggiator’s HOLD can retain its chord.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "663-674",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L663-L674"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "739-747",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L739-L747"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "short_label": "WRITE NOTE",
    "action": "Writes the mapped note or chord into the cursor step in memory while REC is armed and stopped, replacing its previous note list on the first press; SAVE held can undo the recording pass and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-975",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L938-L975"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "When all note keys are released, advances one step after writing the chord; an ignored black key in WHITE mapping writes nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "954-977",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L954-L977"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "short_label": "STEP 12",
    "action": "Selects step 12 of the displayed bank and adds the selected lane’s hit if empty, or marks its existing hit for removal on release.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "494-520",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L494-L520"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "release",
    "short_label": "TOGGLE HIT",
    "action": "Removes the hit marked on press unless a lock turn or lock clear kept it, without a question or a separate undo copy; a preceding REC snapshot may recover it and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "553-565",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L553-L565"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press_while_holding:key_cs5",
    "short_label": "STEP ACCENT",
    "action": "At step 12 of the bank, adds the selected lane’s accent and hit if absent, or marks its existing accent for removal on release.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "505-518",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L505-L518"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "723-739",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L723-L739"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "release",
    "short_label": "END ACCENT",
    "action": "If pressed with C#5 held on an existing accent, removes only that accent on release unless a lock action kept it, leaving the hit; it asks nothing and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "553-565",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L553-L565"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "press",
    "short_label": "WAKE",
    "action": "Wakes the display and consumes this gesture; PLAY can still stop a running transport, and MASTER does not wake the screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1198-1201",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1198-L1201"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press",
    "short_label": "DUB",
    "action": "Feeds the mix into the delay with extra feedback immediately while the key stays held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "118-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L118-L146"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "short_label": "END DUB",
    "action": "Stops sending fresh mix into DUB’s delay while existing echoes fade and any held buffer effect continues unchanged.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "739-743",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L739-L743"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "159-170",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L159-L170"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "32-38",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L32-L38"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "131-168",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L131-L168"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "329-348",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L329-L348"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "press",
    "short_label": "DUB",
    "action": "Feeds the mix into the delay with extra feedback when toggled on, with another press turning it off.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "release",
    "short_label": "KEEP EFFECT",
    "action": "Leaves the toggled effect as it is.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "483-524",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L483-L524"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press",
    "short_label": "ROOT C",
    "action": "Sets the root to this key’s pitch class, regardless of octave.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "501-502",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L501-L502"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press",
    "short_label": "SLICE",
    "action": "Keeps the edited sound unchanged if SLICE is already selected; otherwise selects SLICE and loads its first sound in memory, preserving steps but removing old engine-control and drum-lane-level automation and locks, with SAVE-held undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "503-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L503-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/engines.c",
      "lines": "127-164",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/engines.c#L127-L164"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "314-330",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L314-L330"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/motion.c",
      "lines": "374-398",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/motion.c#L374-L398"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1042-1049",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1042-L1049"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "317-330",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L317-L330"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "518-523",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L518-L523"
     }
    ]
   },
   {
    "mode": "layer_seq_drum",
    "gesture": "press",
    "short_label": "LANE RANDOM",
    "action": "Replaces selected-lane hits within LEN with a random rhythm without asking; SAVE-held can undo it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "405-407",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L405-L407"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "25",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L25"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "30-47",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L30-L47"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_tools.c",
      "lines": "59-65",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L59-L65"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "508-510",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L508-L510"
     }
    ]
   },
   {
    "mode": "layer_perf_track",
    "gesture": "press",
    "short_label": "ENTRY L",
    "action": "Launches list entry L on the selected track immediately while stopped or at LAUNCH while playing, without taking an undo copy.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "999-1021",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L999-L1021"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "press",
    "short_label": "SCENE 12",
    "action": "Recalls scene 12’s entries and mutes immediately while stopped or stages them for LAUNCH while playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "930-953",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L930-L953"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "press_while_holding:button_save",
    "short_label": "STORE 12",
    "action": "Keeps current entries and mutes in scene 12, asking before replacing a used scene and offering no undo; it reaches flash through project saving or the enabled session autosave after the usual quiet stopped delay.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "955-988",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L955-L988"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "906-928",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L906-L928"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1148-1152",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1148-L1152"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1498-1507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1498-L1507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1580-1621",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1580-L1621"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "press",
    "short_label": "XYZ",
    "action": "Types from XYZ, advancing within that group when tapped again within 0.8 seconds.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "139-159",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L139-L159"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "29-32",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L29-L32"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "press",
    "short_label": ".",
    "action": "Types ..",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "139-159",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L139-L159"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "29-32",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L29-L32"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "press",
    "short_label": "SLICE",
    "action": "Plays the mapped slice and selects its start marker.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_slice.c",
      "lines": "200-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_slice.c#L200-L209"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1468-1470",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1468-L1470"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "short_label": "CANCEL",
    "action": "Cancels calibration and keeps the previous panel mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1548-1552",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1548-L1552"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1630-1634",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1630-L1634"
     }
    ]
   },
   {
    "mode": "dx_osc",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_decay",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_color",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_mode",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   }
  ],
  "key_cs5": [
   {
    "mode": "any",
    "gesture": "press",
    "short_label": "C#5",
    "action": "With chromatic mapping, octave zero and no transpose, plays C#5 on the selected track; engine key maps, scales, chords and active grid, layer, naming or wake gestures can change the result.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "709-735",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L709-L735"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "81-115",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L81-L115"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/core.h",
      "lines": "413-429",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/core.h#L413-L429"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "84-85",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L84-L85"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases the notes this key began on its original track unless another held key still owns them; the arpeggiator’s HOLD can retain its chord.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "663-674",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L663-L674"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "739-747",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L739-L747"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "short_label": "WRITE NOTE",
    "action": "Unless WHITE mapping silences this black key, writes its mapped note or chord into the cursor step in memory while REC is armed and stopped; the first press replaces the previous note list, SAVE held can undo the pass and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-975",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L938-L975"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "When all note keys are released, advances one step after writing the chord; an ignored black key in WHITE mapping writes nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "954-977",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L954-L977"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "hold",
    "short_label": "ACCENT MODE",
    "action": "Makes the white step keys edit the selected lane’s accents while held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "505-518",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L505-L518"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "press",
    "short_label": "WAKE",
    "action": "Wakes the display and consumes this gesture; PLAY can still stop a running transport, and MASTER does not wake the screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1198-1201",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1198-L1201"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "483-524",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L483-L524"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press",
    "short_label": "ROOT C#",
    "action": "Sets the root to this key’s pitch class, regardless of octave.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "501-502",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L501-L502"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "483-524",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L483-L524"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "518-523",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L518-L523"
     }
    ]
   },
   {
    "mode": "layer_seq_drum",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "518-523",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L518-L523"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "508-510",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L508-L510"
     }
    ]
   },
   {
    "mode": "layer_perf_track",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "511-517",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L511-L517"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "511-517",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L511-L517"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "press",
    "short_label": "DELETE",
    "action": "Removes the character before the cursor from this draft name.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "160-189",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L160-L189"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "65-74",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L65-L74"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "hold",
    "short_label": "DELETE",
    "action": "Repeats deletion after 0.45 seconds, then every 0.09 seconds, while held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "240-265",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L240-L265"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "press",
    "short_label": "DELETE",
    "action": "Removes the character before the cursor from this draft name.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "160-189",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L160-L189"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "65-74",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L65-L74"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "hold",
    "short_label": "DELETE",
    "action": "Repeats deletion after 0.45 seconds, then every 0.09 seconds, while held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "240-265",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L240-L265"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "press",
    "short_label": "SLICE",
    "action": "Plays the mapped slice and selects its start marker.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_slice.c",
      "lines": "200-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_slice.c#L200-L209"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1468-1470",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1468-L1470"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "short_label": "CANCEL",
    "action": "Cancels calibration and keeps the previous panel mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1548-1552",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1548-L1552"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1630-1634",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1630-L1634"
     }
    ]
   },
   {
    "mode": "dx_osc",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_decay",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_color",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_mode",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   }
  ],
  "key_d5": [
   {
    "mode": "any",
    "gesture": "press",
    "short_label": "D5",
    "action": "With chromatic mapping, octave zero and no transpose, plays D5 on the selected track; engine key maps, scales, chords and active grid, layer, naming or wake gestures can change the result.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "709-735",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L709-L735"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "81-115",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L81-L115"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/core.h",
      "lines": "413-429",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/core.h#L413-L429"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "84-85",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L84-L85"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases the notes this key began on its original track unless another held key still owns them; the arpeggiator’s HOLD can retain its chord.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "663-674",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L663-L674"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "739-747",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L739-L747"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "short_label": "WRITE NOTE",
    "action": "Writes the mapped note or chord into the cursor step in memory while REC is armed and stopped, replacing its previous note list on the first press; SAVE held can undo the recording pass and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-975",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L938-L975"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "When all note keys are released, advances one step after writing the chord; an ignored black key in WHITE mapping writes nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "954-977",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L954-L977"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "short_label": "STEP 13",
    "action": "Selects step 13 of the displayed bank and adds the selected lane’s hit if empty, or marks its existing hit for removal on release.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "494-520",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L494-L520"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "release",
    "short_label": "TOGGLE HIT",
    "action": "Removes the hit marked on press unless a lock turn or lock clear kept it, without a question or a separate undo copy; a preceding REC snapshot may recover it and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "553-565",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L553-L565"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press_while_holding:key_cs5",
    "short_label": "STEP ACCENT",
    "action": "At step 13 of the bank, adds the selected lane’s accent and hit if absent, or marks its existing accent for removal on release.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "505-518",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L505-L518"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "723-739",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L723-L739"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "release",
    "short_label": "END ACCENT",
    "action": "If pressed with C#5 held on an existing accent, removes only that accent on release unless a lock action kept it, leaving the hit; it asks nothing and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "553-565",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L553-L565"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "press",
    "short_label": "WAKE",
    "action": "Wakes the display and consumes this gesture; PLAY can still stop a running transport, and MASTER does not wake the screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1198-1201",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1198-L1201"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press",
    "short_label": "FLANGE",
    "action": "Sweeps a short delay over the mix immediately while the key stays held; starting it discards every track’s SLICER capture without asking or undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "118-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L118-L146"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "152-176",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L152-L176"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "short_label": "END FLANGE",
    "action": "Ends this held effect, returning to an earlier buffer effect if one remains held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "739-743",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L739-L743"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "159-170",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L159-L170"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "press",
    "short_label": "FLANGE",
    "action": "Sweeps a short delay over the mix when toggled on, with another press turning it off; starting it discards every track’s SLICER capture without asking or undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "152-176",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L152-L176"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "release",
    "short_label": "KEEP EFFECT",
    "action": "Leaves the toggled effect as it is.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "483-524",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L483-L524"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press",
    "short_label": "ROOT D",
    "action": "Sets the root to this key’s pitch class, regardless of octave.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "501-502",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L501-L502"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press",
    "short_label": "DRUM",
    "action": "Keeps the edited sound unchanged if DRUM is already selected; otherwise selects DRUM and loads its first sound in memory, preserving steps but removing old engine-control and drum-lane-level automation and locks, with SAVE-held undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "503-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L503-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/engines.c",
      "lines": "127-164",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/engines.c#L127-L164"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "314-330",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L314-L330"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/motion.c",
      "lines": "374-398",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/motion.c#L374-L398"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1042-1049",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1042-L1049"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "317-330",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L317-L330"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "518-523",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L518-L523"
     }
    ]
   },
   {
    "mode": "layer_seq_drum",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "518-523",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L518-L523"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "508-510",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L508-L510"
     }
    ]
   },
   {
    "mode": "layer_perf_track",
    "gesture": "press",
    "short_label": "ENTRY M",
    "action": "Launches list entry M on the selected track immediately while stopped or at LAUNCH while playing, without taking an undo copy.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "999-1021",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L999-L1021"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "press",
    "short_label": "SCENE 13",
    "action": "Recalls scene 13’s entries and mutes immediately while stopped or stages them for LAUNCH while playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "930-953",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L930-L953"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "press_while_holding:button_save",
    "short_label": "STORE 13",
    "action": "Keeps current entries and mutes in scene 13, asking before replacing a used scene and offering no undo; it reaches flash through project saving or the enabled session autosave after the usual quiet stopped delay.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "955-988",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L955-L988"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "906-928",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L906-L928"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1148-1152",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1148-L1152"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1498-1507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1498-L1507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1580-1621",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1580-L1621"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "press",
    "short_label": "123",
    "action": "Types from 123, advancing within that group when tapped again within 0.8 seconds.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "139-159",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L139-L159"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "29-32",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L29-L32"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "press",
    "short_label": "_",
    "action": "Types _.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "139-159",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L139-L159"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "29-32",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L29-L32"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "press",
    "short_label": "SLICE",
    "action": "Plays the mapped slice and selects its start marker.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_slice.c",
      "lines": "200-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_slice.c#L200-L209"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1468-1470",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1468-L1470"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "short_label": "CANCEL",
    "action": "Cancels calibration and keeps the previous panel mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1548-1552",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1548-L1552"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1630-1634",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1630-L1634"
     }
    ]
   },
   {
    "mode": "dx_osc",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_decay",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_color",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_mode",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   }
  ],
  "key_ds5": [
   {
    "mode": "any",
    "gesture": "press",
    "short_label": "D#5",
    "action": "With chromatic mapping, octave zero and no transpose, plays D#5 on the selected track; engine key maps, scales, chords and active grid, layer, naming or wake gestures can change the result.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "709-735",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L709-L735"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "81-115",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L81-L115"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/core.h",
      "lines": "413-429",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/core.h#L413-L429"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "84-85",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L84-L85"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases the notes this key began on its original track unless another held key still owns them; the arpeggiator’s HOLD can retain its chord.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "663-674",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L663-L674"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "739-747",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L739-L747"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "short_label": "WRITE NOTE",
    "action": "Unless WHITE mapping silences this black key, writes its mapped note or chord into the cursor step in memory while REC is armed and stopped; the first press replaces the previous note list, SAVE held can undo the pass and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-975",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L938-L975"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "When all note keys are released, advances one step after writing the chord; an ignored black key in WHITE mapping writes nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "954-977",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L954-L977"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "short_label": "BANK DOWN",
    "action": "Moves to the previous 16-step bank, wrapping when the pattern has several banks.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "469-476",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L469-L476"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "523-524",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L523-L524"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "press",
    "short_label": "WAKE",
    "action": "Wakes the display and consumes this gesture; PLAY can still stop a running transport, and MASTER does not wake the screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1198-1201",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1198-L1201"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "483-524",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L483-L524"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press",
    "short_label": "ROOT D#",
    "action": "Sets the root to this key’s pitch class, regardless of octave.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "501-502",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L501-L502"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "483-524",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L483-L524"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "518-523",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L518-L523"
     }
    ]
   },
   {
    "mode": "layer_seq_drum",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "518-523",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L518-L523"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "508-510",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L508-L510"
     }
    ]
   },
   {
    "mode": "layer_perf_track",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "511-517",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L511-L517"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "511-517",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L511-L517"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "press",
    "short_label": "123",
    "action": "Switches between letter groups and single-character typing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "160-189",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L160-L189"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "65-74",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L65-L74"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "press",
    "short_label": "ABC",
    "action": "Switches between letter groups and single-character typing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "160-189",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L160-L189"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "65-74",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L65-L74"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "press",
    "short_label": "SLICE",
    "action": "Plays the mapped slice and selects its start marker.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_slice.c",
      "lines": "200-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_slice.c#L200-L209"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1468-1470",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1468-L1470"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "short_label": "CANCEL",
    "action": "Cancels calibration and keeps the previous panel mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1548-1552",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1548-L1552"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1630-1634",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1630-L1634"
     }
    ]
   },
   {
    "mode": "dx_osc",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_decay",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_color",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_mode",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   }
  ],
  "key_e5": [
   {
    "mode": "any",
    "gesture": "press",
    "short_label": "E5",
    "action": "With chromatic mapping, octave zero and no transpose, plays E5 on the selected track; engine key maps, scales, chords and active grid, layer, naming or wake gestures can change the result.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "709-735",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L709-L735"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "81-115",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L81-L115"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/core.h",
      "lines": "413-429",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/core.h#L413-L429"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "84-85",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L84-L85"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases the notes this key began on its original track unless another held key still owns them; the arpeggiator’s HOLD can retain its chord.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "663-674",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L663-L674"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "739-747",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L739-L747"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "short_label": "WRITE NOTE",
    "action": "Writes the mapped note or chord into the cursor step in memory while REC is armed and stopped, replacing its previous note list on the first press; SAVE held can undo the recording pass and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-975",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L938-L975"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "When all note keys are released, advances one step after writing the chord; an ignored black key in WHITE mapping writes nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "954-977",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L954-L977"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "short_label": "STEP 14",
    "action": "Selects step 14 of the displayed bank and adds the selected lane’s hit if empty, or marks its existing hit for removal on release.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "494-520",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L494-L520"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "release",
    "short_label": "TOGGLE HIT",
    "action": "Removes the hit marked on press unless a lock turn or lock clear kept it, without a question or a separate undo copy; a preceding REC snapshot may recover it and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "553-565",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L553-L565"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press_while_holding:key_cs5",
    "short_label": "STEP ACCENT",
    "action": "At step 14 of the bank, adds the selected lane’s accent and hit if absent, or marks its existing accent for removal on release.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "505-518",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L505-L518"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "723-739",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L723-L739"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "release",
    "short_label": "END ACCENT",
    "action": "If pressed with C#5 held on an existing accent, removes only that accent on release unless a lock action kept it, leaving the hit; it asks nothing and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "553-565",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L553-L565"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "press",
    "short_label": "WAKE",
    "action": "Wakes the display and consumes this gesture; PLAY can still stop a running transport, and MASTER does not wake the screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1198-1201",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1198-L1201"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press",
    "short_label": "VINYL",
    "action": "Adds pitch wobble, a darker tone and crackle immediately while the key stays held; starting it discards every track’s SLICER capture without asking or undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "118-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L118-L146"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "152-176",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L152-L176"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "short_label": "END VINYL",
    "action": "Ends this held effect, returning to an earlier buffer effect if one remains held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "739-743",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L739-L743"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "159-170",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L159-L170"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "press",
    "short_label": "VINYL",
    "action": "Adds pitch wobble, a darker tone and crackle when toggled on, with another press turning it off; starting it discards every track’s SLICER capture without asking or undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "152-176",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L152-L176"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "release",
    "short_label": "KEEP EFFECT",
    "action": "Leaves the toggled effect as it is.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/perform.c",
      "lines": "130-146",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/perform.c#L130-L146"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "483-524",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L483-L524"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press",
    "short_label": "ROOT E",
    "action": "Sets the root to this key’s pitch class, regardless of octave.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "501-502",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L501-L502"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press",
    "short_label": "DRUM-X",
    "action": "Keeps the edited sound unchanged if DRUM-X is already selected; otherwise selects DRUM-X and loads its first sound in memory, preserving steps but removing old engine-control and drum-lane-level automation and locks, with SAVE-held undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "503-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L503-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/engines.c",
      "lines": "127-164",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/engines.c#L127-L164"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "314-330",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L314-L330"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/motion.c",
      "lines": "374-398",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/motion.c#L374-L398"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1042-1049",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1042-L1049"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "317-330",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L317-L330"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "518-523",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L518-L523"
     }
    ]
   },
   {
    "mode": "layer_seq_drum",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "518-523",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L518-L523"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "508-510",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L508-L510"
     }
    ]
   },
   {
    "mode": "layer_perf_track",
    "gesture": "press",
    "short_label": "ENTRY N",
    "action": "Launches list entry N on the selected track immediately while stopped or at LAUNCH while playing, without taking an undo copy.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "999-1021",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L999-L1021"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "press",
    "short_label": "SCENE 14",
    "action": "Recalls scene 14’s entries and mutes immediately while stopped or stages them for LAUNCH while playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "930-953",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L930-L953"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "press_while_holding:button_save",
    "short_label": "STORE 14",
    "action": "Keeps current entries and mutes in scene 14, asking before replacing a used scene and offering no undo; it reaches flash through project saving or the enabled session autosave after the usual quiet stopped delay.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "955-988",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L955-L988"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "906-928",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L906-L928"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1148-1152",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1148-L1152"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1498-1507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1498-L1507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1580-1621",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1580-L1621"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "press",
    "short_label": "456",
    "action": "Types from 456, advancing within that group when tapped again within 0.8 seconds.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "139-159",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L139-L159"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "29-32",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L29-L32"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "press",
    "short_label": "/",
    "action": "Types /.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "139-159",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L139-L159"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "29-32",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L29-L32"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "press",
    "short_label": "SLICE",
    "action": "Plays the mapped slice and selects its start marker.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_slice.c",
      "lines": "200-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_slice.c#L200-L209"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1468-1470",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1468-L1470"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "short_label": "CANCEL",
    "action": "Cancels calibration and keeps the previous panel mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1548-1552",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1548-L1552"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1630-1634",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1630-L1634"
     }
    ]
   },
   {
    "mode": "dx_osc",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_decay",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_color",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_mode",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   }
  ],
  "key_f5": [
   {
    "mode": "any",
    "gesture": "press",
    "short_label": "F5",
    "action": "With chromatic mapping, octave zero and no transpose, plays F5 on the selected track; engine key maps, scales, chords and active grid, layer, naming or wake gestures can change the result.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "709-735",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L709-L735"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "81-115",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L81-L115"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/core.h",
      "lines": "413-429",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/core.h#L413-L429"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "84-85",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L84-L85"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases the notes this key began on its original track unless another held key still owns them; the arpeggiator’s HOLD can retain its chord.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "663-674",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L663-L674"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "739-747",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L739-L747"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "short_label": "WRITE NOTE",
    "action": "Writes the mapped note or chord into the cursor step in memory while REC is armed and stopped, replacing its previous note list on the first press; SAVE held can undo the recording pass and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-975",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L938-L975"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "When all note keys are released, advances one step after writing the chord; an ignored black key in WHITE mapping writes nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "954-977",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L954-L977"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "short_label": "STEP 15",
    "action": "Selects step 15 of the displayed bank and adds the selected lane’s hit if empty, or marks its existing hit for removal on release.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "494-520",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L494-L520"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "release",
    "short_label": "TOGGLE HIT",
    "action": "Removes the hit marked on press unless a lock turn or lock clear kept it, without a question or a separate undo copy; a preceding REC snapshot may recover it and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "553-565",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L553-L565"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press_while_holding:key_cs5",
    "short_label": "STEP ACCENT",
    "action": "At step 15 of the bank, adds the selected lane’s accent and hit if absent, or marks its existing accent for removal on release.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "505-518",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L505-L518"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "723-739",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L723-L739"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "release",
    "short_label": "END ACCENT",
    "action": "If pressed with C#5 held on an existing accent, removes only that accent on release unless a lock action kept it, leaving the hit; it asks nothing and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "553-565",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L553-L565"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "press",
    "short_label": "WAKE",
    "action": "Wakes the display and consumes this gesture; PLAY can still stop a running transport, and MASTER does not wake the screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1198-1201",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1198-L1201"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "483-524",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L483-L524"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press",
    "short_label": "ROOT F",
    "action": "Sets the root to this key’s pitch class, regardless of octave.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "501-502",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L501-L502"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press",
    "short_label": "INIT",
    "action": "Opens the question for resetting the selected track’s sound and, on DRUM-X, the project’s shared kit used by every DRUM-X track; confirming changes memory with SAVE-held undo and later session saving.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "503-507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L503-L507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/engines.c",
      "lines": "127-164",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/engines.c#L127-L164"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "314-330",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L314-L330"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1396-1410",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1396-L1410"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_draw.c",
      "lines": "1159-1162",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_draw.c#L1159-L1162"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "518-523",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L518-L523"
     }
    ]
   },
   {
    "mode": "layer_seq_drum",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "518-523",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L518-L523"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "508-510",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L508-L510"
     }
    ]
   },
   {
    "mode": "layer_perf_track",
    "gesture": "press",
    "short_label": "ENTRY O",
    "action": "Launches list entry O on the selected track immediately while stopped or at LAUNCH while playing, without taking an undo copy.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "999-1021",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L999-L1021"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "press",
    "short_label": "SCENE 15",
    "action": "Recalls scene 15’s entries and mutes immediately while stopped or stages them for LAUNCH while playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "930-953",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L930-L953"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "press_while_holding:button_save",
    "short_label": "STORE 15",
    "action": "Keeps current entries and mutes in scene 15, asking before replacing a used scene and offering no undo; it reaches flash through project saving or the enabled session autosave after the usual quiet stopped delay.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "955-988",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L955-L988"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "906-928",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L906-L928"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1148-1152",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1148-L1152"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1498-1507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1498-L1507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1580-1621",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1580-L1621"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "press",
    "short_label": "789",
    "action": "Types from 789, advancing within that group when tapped again within 0.8 seconds.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "139-159",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L139-L159"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "29-32",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L29-L32"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "press",
    "short_label": "#",
    "action": "Types #.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "139-159",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L139-L159"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "29-32",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L29-L32"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "press",
    "short_label": "SLICE",
    "action": "Plays the mapped slice and selects its start marker.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_slice.c",
      "lines": "200-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_slice.c#L200-L209"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1468-1470",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1468-L1470"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "short_label": "CANCEL",
    "action": "Cancels calibration and keeps the previous panel mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1548-1552",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1548-L1552"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1630-1634",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1630-L1634"
     }
    ]
   },
   {
    "mode": "dx_osc",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_decay",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_color",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_mode",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   }
  ],
  "key_fs5": [
   {
    "mode": "any",
    "gesture": "press",
    "short_label": "F#5",
    "action": "With chromatic mapping, octave zero and no transpose, plays F#5 on the selected track; engine key maps, scales, chords and active grid, layer, naming or wake gestures can change the result.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "709-735",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L709-L735"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "81-115",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L81-L115"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/core.h",
      "lines": "413-429",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/core.h#L413-L429"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "84-85",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L84-L85"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases the notes this key began on its original track unless another held key still owns them; the arpeggiator’s HOLD can retain its chord.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "663-674",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L663-L674"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "739-747",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L739-L747"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "short_label": "WRITE NOTE",
    "action": "Unless WHITE mapping silences this black key, writes its mapped note or chord into the cursor step in memory while REC is armed and stopped; the first press replaces the previous note list, SAVE held can undo the pass and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-975",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L938-L975"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "When all note keys are released, advances one step after writing the chord; an ignored black key in WHITE mapping writes nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "954-977",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L954-L977"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "short_label": "BANK UP",
    "action": "Moves to the next 16-step bank, wrapping when the pattern has several banks.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "469-476",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L469-L476"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "523-524",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L523-L524"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "press",
    "short_label": "WAKE",
    "action": "Wakes the display and consumes this gesture; PLAY can still stop a running transport, and MASTER does not wake the screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1198-1201",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1198-L1201"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "483-524",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L483-L524"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press",
    "short_label": "ROOT F#",
    "action": "Sets the root to this key’s pitch class, regardless of octave.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "501-502",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L501-L502"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "483-524",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L483-L524"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "518-523",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L518-L523"
     }
    ]
   },
   {
    "mode": "layer_seq_drum",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "518-523",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L518-L523"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "508-510",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L508-L510"
     }
    ]
   },
   {
    "mode": "layer_perf_track",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "511-517",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L511-L517"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "511-517",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L511-L517"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "press",
    "short_label": "CURSOR LEFT",
    "action": "Moves the cursor one place left.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "160-189",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L160-L189"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "65-74",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L65-L74"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "hold",
    "short_label": "CURSOR LEFT",
    "action": "Repeats cursor movement after 0.45 seconds, then every 0.09 seconds, while held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "240-265",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L240-L265"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "press",
    "short_label": "CURSOR LEFT",
    "action": "Moves the cursor one place left.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "160-189",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L160-L189"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "65-74",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L65-L74"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "hold",
    "short_label": "CURSOR LEFT",
    "action": "Repeats cursor movement after 0.45 seconds, then every 0.09 seconds, while held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "240-265",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L240-L265"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "press",
    "short_label": "SLICE",
    "action": "Plays the mapped slice and selects its start marker.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_slice.c",
      "lines": "200-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_slice.c#L200-L209"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1468-1470",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1468-L1470"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "short_label": "CANCEL",
    "action": "Cancels calibration and keeps the previous panel mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1548-1552",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1548-L1552"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1630-1634",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1630-L1634"
     }
    ]
   },
   {
    "mode": "dx_osc",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_decay",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_color",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_mode",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   }
  ],
  "key_g5": [
   {
    "mode": "any",
    "gesture": "press",
    "short_label": "G5",
    "action": "With chromatic mapping, octave zero and no transpose, plays G5 on the selected track; engine key maps, scales, chords and active grid, layer, naming or wake gestures can change the result.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "709-735",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L709-L735"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "81-115",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L81-L115"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/core.h",
      "lines": "413-429",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/core.h#L413-L429"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/params.c",
      "lines": "84-85",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/params.c#L84-L85"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "NOTE OFF",
    "action": "Releases the notes this key began on its original track unless another held key still owns them; the arpeggiator’s HOLD can retain its chord.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "663-674",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L663-L674"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "739-747",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L739-L747"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "short_label": "WRITE NOTE",
    "action": "Writes the mapped note or chord into the cursor step in memory while REC is armed and stopped, replacing its previous note list on the first press; SAVE held can undo the recording pass and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-975",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L938-L975"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "When all note keys are released, advances one step after writing the chord; an ignored black key in WHITE mapping writes nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "954-977",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L954-L977"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "short_label": "STEP 16",
    "action": "Selects step 16 of the displayed bank and adds the selected lane’s hit if empty, or marks its existing hit for removal on release.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "494-520",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L494-L520"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "release",
    "short_label": "TOGGLE HIT",
    "action": "Removes the hit marked on press unless a lock turn or lock clear kept it, without a question or a separate undo copy; a preceding REC snapshot may recover it and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "553-565",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L553-L565"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press_while_holding:key_cs5",
    "short_label": "STEP ACCENT",
    "action": "At step 16 of the bank, adds the selected lane’s accent and hit if absent, or marks its existing accent for removal on release.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "505-518",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L505-L518"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "723-739",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L723-L739"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "release",
    "short_label": "END ACCENT",
    "action": "If pressed with C#5 held on an existing accent, removes only that accent on release unless a lock action kept it, leaving the hit; it asks nothing and the pattern is saved later.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "553-565",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L553-L565"
     }
    ]
   },
   {
    "mode": "sleep",
    "gesture": "press",
    "short_label": "WAKE",
    "action": "Wakes the display and consumes this gesture; PLAY can still stop a running transport, and MASTER does not wake the screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1198-1201",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1198-L1201"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "255-270",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L255-L270"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "638-644",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "483-524",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L483-L524"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press",
    "short_label": "ROOT G",
    "action": "Sets the root to this key’s pitch class, regardless of octave.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "501-502",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L501-L502"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "483-524",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L483-L524"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "518-523",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L518-L523"
     }
    ]
   },
   {
    "mode": "layer_seq_drum",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "518-523",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L518-L523"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on this layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "508-510",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L508-L510"
     }
    ]
   },
   {
    "mode": "layer_perf_track",
    "gesture": "press",
    "short_label": "ENTRY P",
    "action": "Launches list entry P on the selected track immediately while stopped or at LAUNCH while playing, without taking an undo copy.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "999-1021",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L999-L1021"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "press",
    "short_label": "SCENE 16",
    "action": "Recalls scene 16’s entries and mutes immediately while stopped or stages them for LAUNCH while playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "930-953",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L930-L953"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "press_while_holding:button_save",
    "short_label": "STORE 16",
    "action": "Keeps current entries and mutes in scene 16, asking before replacing a used scene and offering no undo; it reaches flash through project saving or the enabled session autosave after the usual quiet stopped delay.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "955-988",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L955-L988"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/bank.c",
      "lines": "906-928",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L906-L928"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1148-1152",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1148-L1152"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1498-1507",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1498-L1507"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1580-1621",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1580-L1621"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "press",
    "short_label": "0-.",
    "action": "Types from 0-., advancing within that group when tapped again within 0.8 seconds.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "139-159",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L139-L159"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "29-32",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L29-L32"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "press",
    "short_label": "PLUS",
    "action": "Types + at the name cursor and advances to the next position.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "29-32",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L29-L32"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "57-63",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L57-L63"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "139-159",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L139-L159"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/project.c",
      "lines": "1176-1178",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1176-L1178"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "29-32",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L29-L32"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "57-63",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L57-L63"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "139-159",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L139-L159"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "55-62",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L55-L62"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "press",
    "short_label": "SLICE",
    "action": "Plays the mapped slice and selects its start marker.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_slice.c",
      "lines": "200-209",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_slice.c#L200-L209"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1468-1470",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1468-L1470"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "short_label": "CANCEL",
    "action": "Cancels calibration and keeps the previous panel mapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1548-1552",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1548-L1552"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "1630-1634",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1630-L1634"
     }
    ]
   },
   {
    "mode": "dx_osc",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_decay",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_color",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   },
   {
    "mode": "dx_mode",
    "gesture": "press",
    "action": "Plays its mapped drum note and, when that pitch differs from the one last followed, selects its lane on SOUND’s next redraw so later knob turns edit that member of the shared kit.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "33-42",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L33-L42"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_dx.c",
      "lines": "89-98",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_dx.c#L89-L98"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/seq.c",
      "lines": "648-660",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L648-L660"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/eng_drum.c",
      "lines": "303-306",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/eng_drum.c#L303-L306"
     }
    ]
   }
  ]
 },
 "lights": {
  "button_fx": [
   {
    "mode": "any",
    "gesture": "lit",
    "short_label": "PAGE",
    "action": "Marks the open page family; INV reverses active and idle lights, and an open shortcut layer replaces its button light with a breathing one.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "294-301",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L294-L301"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "short_label": "IDLE GLOW",
    "action": "Idle button lights follow LEDS: DIM LO or DIM HI glow, OFF is dark, and INV lights idle buttons while darkening active ones.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "261-278",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L261-L278"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "lit",
    "short_label": "FX ACTIVE",
    "action": "Outside the FX layer, stays active while an effect is latched or a performance macro is nonzero.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "298-299",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L298-L299"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "breathing",
    "short_label": "LAYER OPEN",
    "action": "This button’s light breathes while its layer map is visible.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "294-302",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L294-L302"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "breathing",
    "short_label": "LAYER OPEN",
    "action": "This button’s light breathes while its layer map is visible.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "294-302",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L294-L302"
     }
    ]
   }
  ],
  "button_sel": [
   {
    "mode": "any",
    "gesture": "lit",
    "short_label": "PAGE",
    "action": "Marks the open page family; INV reverses active and idle lights, and an open shortcut layer replaces its button light with a breathing one.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "294-301",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L294-L301"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "short_label": "IDLE GLOW",
    "action": "Idle button lights follow LEDS: DIM LO or DIM HI glow, OFF is dark, and INV lights idle buttons while darkening active ones.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "261-278",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L261-L278"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "breathing",
    "short_label": "LAYER OPEN",
    "action": "This button’s light breathes while its layer map is visible.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "294-302",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L294-L302"
     }
    ]
   }
  ],
  "button_env": [
   {
    "mode": "any",
    "gesture": "lit",
    "short_label": "PAGE",
    "action": "Marks the open page family; INV reverses active and idle lights, and an open shortcut layer replaces its button light with a breathing one.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "294-301",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L294-L301"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "short_label": "IDLE GLOW",
    "action": "Idle button lights follow LEDS: DIM LO or DIM HI glow, OFF is dark, and INV lights idle buttons while darkening active ones.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "261-278",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L261-L278"
     }
    ]
   }
  ],
  "button_lfo": [
   {
    "mode": "any",
    "gesture": "lit",
    "short_label": "PAGE",
    "action": "Marks the open page family; INV reverses active and idle lights, and an open shortcut layer replaces its button light with a breathing one.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "294-301",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L294-L301"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "short_label": "IDLE GLOW",
    "action": "Idle button lights follow LEDS: DIM LO or DIM HI glow, OFF is dark, and INV lights idle buttons while darkening active ones.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "261-278",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L261-L278"
     }
    ]
   }
  ],
  "button_edit": [
   {
    "mode": "any",
    "gesture": "lit",
    "short_label": "PAGE",
    "action": "Marks the open page family; INV reverses active and idle lights, and an open shortcut layer replaces its button light with a breathing one.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "294-301",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L294-L301"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "short_label": "IDLE GLOW",
    "action": "Idle button lights follow LEDS: DIM LO or DIM HI glow, OFF is dark, and INV lights idle buttons while darkening active ones.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "261-278",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L261-L278"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "breathing",
    "short_label": "LAYER OPEN",
    "action": "This button’s light breathes while its layer map is visible.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "294-302",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L294-L302"
     }
    ]
   }
  ],
  "button_glo": [
   {
    "mode": "any",
    "gesture": "lit",
    "short_label": "PAGE",
    "action": "Marks the open page family; INV reverses active and idle lights, and an open shortcut layer replaces its button light with a breathing one.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "294-301",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L294-L301"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "short_label": "IDLE GLOW",
    "action": "Idle button lights follow LEDS: DIM LO or DIM HI glow, OFF is dark, and INV lights idle buttons while darkening active ones.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "261-278",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L261-L278"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "breathing",
    "short_label": "LAYER OPEN",
    "action": "This button’s light breathes while its layer map is visible.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "294-302",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L294-L302"
     }
    ]
   }
  ],
  "button_home": [
   {
    "mode": "any",
    "gesture": "lit",
    "short_label": "PAGE",
    "action": "Marks the open page family; INV reverses active and idle lights, and an open shortcut layer replaces its button light with a breathing one.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "294-301",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L294-L301"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "short_label": "IDLE GLOW",
    "action": "Idle button lights follow LEDS: DIM LO or DIM HI glow, OFF is dark, and INV lights idle buttons while darkening active ones.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "261-278",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L261-L278"
     }
    ]
   }
  ],
  "button_save": [
   {
    "mode": "any",
    "gesture": "lit",
    "short_label": "PAGE",
    "action": "Marks the open page family; INV reverses active and idle lights, and an open shortcut layer replaces its button light with a breathing one.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "294-301",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L294-L301"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "short_label": "IDLE GLOW",
    "action": "Idle button lights follow LEDS: DIM LO or DIM HI glow, OFF is dark, and INV lights idle buttons while darkening active ones.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "261-278",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L261-L278"
     }
    ]
   }
  ],
  "button_arp": [
   {
    "mode": "any",
    "gesture": "lit",
    "short_label": "PAGE",
    "action": "Marks the open page family; INV reverses active and idle lights, and an open shortcut layer replaces its button light with a breathing one.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "294-301",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L294-L301"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "short_label": "IDLE GLOW",
    "action": "Idle button lights follow LEDS: DIM LO or DIM HI glow, OFF is dark, and INV lights idle buttons while darkening active ones.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "261-278",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L261-L278"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "flash",
    "short_label": "ARP BEAT",
    "action": "With held arpeggiator notes on any track, flashes to the beat with a longer first beat; on the ARP page the flashes are dark.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "119-126",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L119-L126"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "296-297",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L296-L297"
     }
    ]
   },
   {
    "mode": "layer_perf_track",
    "gesture": "breathing",
    "short_label": "LAYER OPEN",
    "action": "This button’s light breathes while its layer map is visible.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "294-302",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L294-L302"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "breathing",
    "short_label": "LAYER OPEN",
    "action": "This button’s light breathes while its layer map is visible.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "294-302",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L294-L302"
     }
    ]
   }
  ],
  "button_seq": [
   {
    "mode": "any",
    "gesture": "lit",
    "short_label": "PAGE",
    "action": "Marks the open page family; INV reverses active and idle lights, and an open shortcut layer replaces its button light with a breathing one.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "294-301",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L294-L301"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "short_label": "IDLE GLOW",
    "action": "Idle button lights follow LEDS: DIM LO or DIM HI glow, OFF is dark, and INV lights idle buttons while darkening active ones.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "261-278",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L261-L278"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "breathing",
    "short_label": "LAYER OPEN",
    "action": "This button’s light breathes while its layer map is visible.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "294-302",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L294-L302"
     }
    ]
   },
   {
    "mode": "layer_seq_drum",
    "gesture": "breathing",
    "short_label": "LAYER OPEN",
    "action": "This button’s light breathes while its layer map is visible.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "294-302",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L294-L302"
     }
    ]
   }
  ],
  "button_play_stop": [
   {
    "mode": "any",
    "gesture": "dim",
    "short_label": "IDLE GLOW",
    "action": "Idle button lights follow LEDS: DIM LO or DIM HI glow, OFF is dark, and INV lights idle buttons while darkening active ones.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "261-278",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L261-L278"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "off",
    "short_label": "PLAY ORANGE",
    "action": "The orange PLAY light is dark while playing or counting in, regardless of LEDS mode.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "325-329",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L325-L329"
     }
    ]
   }
  ],
  "button_rec": [
   {
    "mode": "any",
    "gesture": "dim",
    "short_label": "IDLE GLOW",
    "action": "Idle button lights follow LEDS: DIM LO or DIM HI glow, OFF is dark, and INV lights idle buttons while darkening active ones.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "261-278",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L261-L278"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "lit",
    "short_label": "ARMED",
    "action": "Shows at least one armed track, except in the REC layer where its button breathes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "302",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L302"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "breathing",
    "short_label": "LAYER OPEN",
    "action": "This button’s light breathes while its layer map is visible.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "294-302",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L294-L302"
     }
    ]
   }
  ],
  "button_oct_down": [
   {
    "mode": "any",
    "gesture": "dim",
    "short_label": "IDLE GLOW",
    "action": "Idle button lights follow LEDS: DIM LO or DIM HI glow, OFF is dark, and INV lights idle buttons while darkening active ones.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "261-278",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L261-L278"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "lit",
    "short_label": "OCTAVE",
    "action": "Outside special screens, marks a negative keyboard octave; INV reverses active and idle states.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "50-64",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L50-L64"
     }
    ]
   },
   {
    "mode": "dialog",
    "gesture": "lit",
    "short_label": "CANCEL",
    "action": "Shows the cancel control.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "50-64",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L50-L64"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "lit",
    "short_label": "PUT BACK",
    "action": "The light marks the layer’s put-back, cancel-stage or all-effects-off action.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "50-55",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L50-L55"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "lit",
    "short_label": "PUT BACK",
    "action": "The light marks the layer’s put-back, cancel-stage or all-effects-off action.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "50-55",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L50-L55"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "lit",
    "short_label": "PUT BACK",
    "action": "The light marks the layer’s put-back, cancel-stage or all-effects-off action.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "50-55",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L50-L55"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "lit",
    "short_label": "PUT BACK",
    "action": "The light marks the layer’s put-back, cancel-stage or all-effects-off action.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "50-55",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L50-L55"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "lit",
    "short_label": "PUT BACK",
    "action": "The light marks the layer’s put-back, cancel-stage or all-effects-off action.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "50-55",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L50-L55"
     }
    ]
   },
   {
    "mode": "layer_seq_drum",
    "gesture": "lit",
    "short_label": "PUT BACK",
    "action": "The light marks the layer’s put-back, cancel-stage or all-effects-off action.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "50-55",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L50-L55"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "lit",
    "short_label": "PUT BACK",
    "action": "The light marks the layer’s put-back, cancel-stage or all-effects-off action.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "50-55",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L50-L55"
     }
    ]
   },
   {
    "mode": "layer_perf_track",
    "gesture": "lit",
    "short_label": "PUT BACK",
    "action": "The light marks the layer’s put-back, cancel-stage or all-effects-off action.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "50-55",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L50-L55"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "lit",
    "short_label": "PUT BACK",
    "action": "The light marks the layer’s put-back, cancel-stage or all-effects-off action.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "50-55",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L50-L55"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "lit",
    "short_label": "CANCEL NAME",
    "action": "Marks cancellation of the draft name.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "50-55",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L50-L55"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "lit",
    "short_label": "CANCEL NAME",
    "action": "Marks cancellation of the draft name.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "50-55",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L50-L55"
     }
    ]
   },
   {
    "mode": "user",
    "gesture": "lit",
    "action": "Marks the back control rather than a negative octave; INV makes this active steady light dark.",
    "short_label": "BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "50-63",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L50-L63"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "303-307",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L303-L307"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "328-338",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L328-L338"
     }
    ]
   },
   {
    "mode": "pool",
    "gesture": "lit",
    "action": "Marks the back control rather than a negative octave; INV makes this active steady light dark.",
    "short_label": "BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "50-63",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L50-L63"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "303-307",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L303-L307"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "328-338",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L328-L338"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "lit",
    "action": "Marks the back control rather than a negative octave; INV makes this active steady light dark.",
    "short_label": "BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "50-63",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L50-L63"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "303-307",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L303-L307"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "328-338",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L328-L338"
     }
    ]
   },
   {
    "mode": "automation",
    "gesture": "lit",
    "action": "Marks the back control rather than a negative octave; INV makes this active steady light dark.",
    "short_label": "BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "50-63",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L50-L63"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "303-307",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L303-L307"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "328-338",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L328-L338"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "lit",
    "action": "Marks the back control rather than a negative octave; INV makes this active steady light dark.",
    "short_label": "BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "50-63",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L50-L63"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "303-307",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L303-L307"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "328-338",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L328-L338"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "lit",
    "action": "On SLICES, marks the back control for built-in and user samples rather than a negative octave; INV makes this active steady light dark.",
    "short_label": "BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "50-63",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L50-L63"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "303-307",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L303-L307"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "328-338",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L328-L338"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_slice.c",
      "lines": "27-28",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_slice.c#L27-L28"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_slice.c",
      "lines": "155-165",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_slice.c#L155-L165"
     }
    ]
   },
   {
    "mode": "menu_display",
    "gesture": "breathing",
    "action": "On a value row, breathes only when a different previous value is available, including wraparound where allowed; CPU has no value direction.",
    "short_label": "PREV VALUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "50-63",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L50-L63"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "303-307",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L303-L307"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "328-338",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L328-L338"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "9-19",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L9-L19"
     }
    ]
   },
   {
    "mode": "menu_control",
    "gesture": "breathing",
    "action": "On a value row, breathes only when a different previous value is available, including wraparound where allowed; CPU has no value direction.",
    "short_label": "PREV VALUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "50-63",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L50-L63"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "303-307",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L303-L307"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "328-338",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L328-L338"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "9-19",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L9-L19"
     }
    ]
   },
   {
    "mode": "menu_audio",
    "gesture": "breathing",
    "action": "On a value row, breathes only when a different previous value is available, including wraparound where allowed; CPU has no value direction.",
    "short_label": "PREV VALUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "50-63",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L50-L63"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "303-307",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L303-L307"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "328-338",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L328-L338"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "9-19",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L9-L19"
     }
    ]
   },
   {
    "mode": "menu_system",
    "gesture": "breathing",
    "action": "On a value row, breathes only when a different previous value is available, including wraparound where allowed; CPU has no value direction.",
    "short_label": "PREV VALUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "50-63",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L50-L63"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "303-307",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L303-L307"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "328-338",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L328-L338"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "9-19",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L9-L19"
     }
    ]
   },
   {
    "mode": "about",
    "gesture": "lit",
    "action": "Marks return to the menu tabs rather than a keyboard octave; INV makes this active steady light dark.",
    "short_label": "BACK TO MENU",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "50-63",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L50-L63"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "303-307",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L303-L307"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "328-338",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L328-L338"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "488-490",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L488-L490"
     }
    ]
   }
  ],
  "button_oct_up": [
   {
    "mode": "any",
    "gesture": "dim",
    "short_label": "IDLE GLOW",
    "action": "Idle button lights follow LEDS: DIM LO or DIM HI glow, OFF is dark, and INV lights idle buttons while darkening active ones.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "261-278",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L261-L278"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "lit",
    "short_label": "OCTAVE",
    "action": "Outside special screens, marks a positive keyboard octave; INV reverses active and idle states.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "50-64",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L50-L64"
     }
    ]
   },
   {
    "mode": "dialog",
    "gesture": "breathing",
    "short_label": "CONFIRM",
    "action": "Breathes to show the confirmation can be accepted.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "50-64",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L50-L64"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "breathing",
    "short_label": "WRITE NAME",
    "action": "Marks the name-write control, even while playback still prevents writing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "50-55",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L50-L55"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "breathing",
    "short_label": "WRITE NAME",
    "action": "Marks the name-write control, even while playback still prevents writing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "50-55",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L50-L55"
     }
    ]
   },
   {
    "mode": "user",
    "gesture": "breathing",
    "action": "Breathes when the selected action is ready, and otherwise has no readiness breath; its meaning is action readiness rather than a positive octave.",
    "short_label": "ACTION READY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "50-63",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L50-L63"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "303-307",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L303-L307"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "328-338",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L328-L338"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1703-1727",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1703-L1727"
     }
    ]
   },
   {
    "mode": "pool",
    "gesture": "breathing",
    "action": "Breathes when the selected action is ready, and otherwise has no readiness breath; its meaning is action readiness rather than a positive octave.",
    "short_label": "ACTION READY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "50-63",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L50-L63"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "303-307",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L303-L307"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "328-338",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L328-L338"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1703-1727",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1703-L1727"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "breathing",
    "action": "Breathes when the selected action is ready, and otherwise has no readiness breath; its meaning is action readiness rather than a positive octave.",
    "short_label": "ACTION READY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "50-63",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L50-L63"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "303-307",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L303-L307"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "328-338",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L328-L338"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1703-1727",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1703-L1727"
     }
    ]
   },
   {
    "mode": "automation",
    "gesture": "breathing",
    "action": "Breathes when the selected action is ready, and otherwise has no readiness breath; its meaning is action readiness rather than a positive octave.",
    "short_label": "ACTION READY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "50-63",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L50-L63"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "303-307",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L303-L307"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "328-338",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L328-L338"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1703-1727",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1703-L1727"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "breathing",
    "action": "Breathes when the selected action is ready, and otherwise has no readiness breath; its meaning is action readiness rather than a positive octave.",
    "short_label": "ACTION READY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "50-63",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L50-L63"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "303-307",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L303-L307"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "328-338",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L328-L338"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1703-1727",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1703-L1727"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "breathing",
    "action": "On SLICES, breathes only when the selected split or join can act on a user sample, with no readiness breath on built-in samples or END; this indicates action readiness rather than a positive octave.",
    "short_label": "ACTION READY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "50-63",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L50-L63"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "303-307",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L303-L307"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "328-338",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L328-L338"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui.c",
      "lines": "1703-1727",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1703-L1727"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_slice.c",
      "lines": "27-28",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_slice.c#L27-L28"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_slice.c",
      "lines": "155-165",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_slice.c#L155-L165"
     }
    ]
   },
   {
    "mode": "menu_display",
    "gesture": "breathing",
    "action": "On a value row, breathes only when a different next value is available, including wraparound where allowed; CPU has no value direction.",
    "short_label": "NEXT VALUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "50-63",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L50-L63"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "303-307",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L303-L307"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "328-338",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L328-L338"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "9-19",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L9-L19"
     }
    ]
   },
   {
    "mode": "menu_control",
    "gesture": "breathing",
    "action": "On a value row, breathes only when a different next value is available, including wraparound where allowed; CPU has no value direction.",
    "short_label": "NEXT VALUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "50-63",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L50-L63"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "303-307",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L303-L307"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "328-338",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L328-L338"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "9-19",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L9-L19"
     }
    ]
   },
   {
    "mode": "menu_audio",
    "gesture": "breathing",
    "action": "On a value row, breathes only when a different next value is available, including wraparound where allowed; CPU has no value direction.",
    "short_label": "NEXT VALUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "50-63",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L50-L63"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "303-307",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L303-L307"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "328-338",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L328-L338"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "9-19",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L9-L19"
     }
    ]
   },
   {
    "mode": "menu_system",
    "gesture": "breathing",
    "action": "On a value row, breathes only when a different next value is available, including wraparound where allowed; CPU has no value direction.",
    "short_label": "NEXT VALUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "50-63",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L50-L63"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "303-307",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L303-L307"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "328-338",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L328-L338"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/menu_items.c",
      "lines": "9-19",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/menu_items.c#L9-L19"
     }
    ]
   },
   {
    "mode": "menu_system",
    "gesture": "breathing",
    "action": "With CALIBRATION, RESET SETTINGS or ABOUT selected, breathes to show OCT+ opens teaching, the reset question or the information screen respectively.",
    "short_label": "OPEN ROW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "50-63",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L50-L63"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "303-307",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L303-L307"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "328-338",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L328-L338"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_menu.c",
      "lines": "508-519",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_menu.c#L508-L519"
     }
    ]
   }
  ],
  "led_play_stop_green": [
   {
    "mode": "any",
    "gesture": "lit",
    "short_label": "PLAYING",
    "action": "Stays green while the transport plays.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "340-341",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L340-L341"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "flash",
    "short_label": "COUNT IN",
    "action": "During count-in, lights green for the first quarter of each beat.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "340-341",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L340-L341"
     }
    ]
   }
  ],
  "key_lights": [
   {
    "mode": "any",
    "gesture": "lit",
    "short_label": "NOTES",
    "action": "Shows held keys and mapped notes sounding from the selected track’s sequencer, arpeggiator or MIDI input; other keys’ own maps take priority.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "129-199",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L129-L199"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "247-258",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L247-L258"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "short_label": "SCALE / GLOW",
    "action": "With SCALE LEDS on, scale notes glow with brighter roots except under a key map or on drum and slice tracks; otherwise idle glow follows LEDS, with INV reversing the usual pattern.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "213-241",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L213-L241"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "261-278",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L261-L278"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "lit",
    "short_label": "STEP NOTES",
    "action": "While stopped, marks the cursor step’s notes at the current keyboard mapping; while playing, shows the notes sounding instead.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "176-199",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L176-L199"
     }
    ]
   },
   {
    "mode": "roll",
    "gesture": "lit",
    "short_label": "STEP NOTES",
    "action": "While stopped, marks the cursor step’s notes at the current keyboard mapping; while playing, shows the notes sounding instead.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "176-199",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L176-L199"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "lit",
    "short_label": "DRUM GRID",
    "action": "White lights show the selected lane’s hits or held-C#5 accents with the playhead inverted; black lights identify the lane, held accent key and bank keys when needed.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "66-85",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L66-L85"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "dim",
    "short_label": "BEAT MARKS",
    "action": "Empty first steps of each four-step group glow more strongly than other empty steps in DIM LO or DIM HI, using a single faint level in OFF or INV.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "88-116",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L88-L116"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "269-274",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L269-L274"
     }
    ]
   },
   {
    "mode": "startup",
    "gesture": "flash",
    "short_label": "STARTUP",
    "action": "With ANIM on, the keys sweep and button lights swell during startup.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/main.c",
      "lines": "122-140",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/main.c#L122-L140"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "lit",
    "short_label": "ACTIVE",
    "action": "Active available effect keys stay lit.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "685-695",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L685-L695"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "breathing",
    "short_label": "AVAILABLE",
    "action": "Available effect keys breathe when inactive; unavailable repeats stay dark.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "685-695",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L685-L695"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "lit",
    "short_label": "ACTIVE",
    "action": "Active available effect keys stay lit.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "685-695",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L685-L695"
     }
    ]
   },
   {
    "mode": "layer_fx_latch",
    "gesture": "breathing",
    "short_label": "AVAILABLE",
    "action": "Available effect keys breathe when inactive; unavailable repeats stay dark.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "685-695",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L685-L695"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "lit",
    "short_label": "MIX ACTIVE",
    "action": "Sounding tracks light their black keys; held solos and the held fill light their white keys.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "695-698",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L695-L698"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "breathing",
    "short_label": "MIX READY",
    "action": "Solo, unmute-all and fill keys breathe when inactive; tap tempo breathes only with internal clock.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "695-698",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L695-L698"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "lit",
    "short_label": "ROOT",
    "action": "Keys matching the root pitch class stay lit.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "699-702",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L699-L702"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "breathing",
    "short_label": "SCALE NOTES",
    "action": "Other notes in the selected scale breathe.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "699-702",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L699-L702"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "lit",
    "short_label": "ENGINE",
    "action": "The selected engine’s white key stays lit.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "703-706",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L703-L706"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "breathing",
    "short_label": "PICK ENGINE",
    "action": "Other allowed engines and INIT breathe; engines barred on this track stay dark.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "703-706",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L703-L706"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "breathing",
    "short_label": "TOOLS READY",
    "action": "Available tool keys breathe; on drums the unselected lane keys breathe too.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "707-709",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L707-L709"
     }
    ]
   },
   {
    "mode": "layer_seq_drum",
    "gesture": "breathing",
    "short_label": "TOOLS READY",
    "action": "Available tool keys breathe; on drums the unselected lane keys breathe too.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "707-709",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L707-L709"
     }
    ]
   },
   {
    "mode": "layer_seq_drum",
    "gesture": "lit",
    "short_label": "LANE",
    "action": "The selected drum lane’s black key stays lit.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "707-709",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L707-L709"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "lit",
    "short_label": "REC OPTIONS",
    "action": "Enabled click and count-in keys stay lit; CLICK LEVEL lights whenever click is enabled.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "719-722",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L719-L722"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "breathing",
    "short_label": "REC READY",
    "action": "Inactive option keys breathe; CLEAR breathes only if steps or automation can be cleared.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "719-722",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L719-L722"
     }
    ]
   },
   {
    "mode": "layer_perf_track",
    "gesture": "lit",
    "short_label": "PERFORM NOW",
    "action": "Unmuted unstaged tracks stay lit on their black keys.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "710-712",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L710-L712"
     }
    ]
   },
   {
    "mode": "layer_perf_track",
    "gesture": "breathing",
    "short_label": "PERFORM NEXT",
    "action": "Muted or staged tracks breathe on their black keys.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "710-712",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L710-L712"
     }
    ]
   },
   {
    "mode": "layer_perf_track",
    "gesture": "lit",
    "short_label": "ENTRY NOW",
    "action": "The current and staged entry keys stay lit.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "716-718",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L716-L718"
     }
    ]
   },
   {
    "mode": "layer_perf_track",
    "gesture": "breathing",
    "short_label": "ENTRY READY",
    "action": "Other available entries breathe.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "716-718",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L716-L718"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "lit",
    "short_label": "PERFORM NOW",
    "action": "Unmuted unstaged tracks stay lit on their black keys.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "710-712",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L710-L712"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "breathing",
    "short_label": "PERFORM NEXT",
    "action": "Muted or staged tracks breathe on their black keys.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "710-712",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L710-L712"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "lit",
    "short_label": "SCENE NOW",
    "action": "The last recalled or stored scene key stays lit.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "713-715",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L713-L715"
     }
    ]
   },
   {
    "mode": "layer_perf_scene",
    "gesture": "breathing",
    "short_label": "SCENE READY",
    "action": "Other stored scenes breathe.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_layer.c",
      "lines": "713-715",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_layer.c#L713-L715"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "lit",
    "short_label": "TYPE",
    "action": "Typing and editing keys stay lit.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "277-288",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L277-L288"
     }
    ]
   },
   {
    "mode": "name_abc",
    "gesture": "breathing",
    "short_label": "CYCLING CHAR",
    "action": "The white key currently cycling through a character group breathes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "277-288",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L277-L288"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "lit",
    "short_label": "TYPE",
    "action": "Typing and editing keys stay lit.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "277-288",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L277-L288"
     }
    ]
   },
   {
    "mode": "name_num",
    "gesture": "breathing",
    "short_label": "CYCLING CHAR",
    "action": "The white key currently cycling through a character group breathes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_name.c",
      "lines": "277-288",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L277-L288"
     }
    ]
   },
   {
    "mode": "slices",
    "gesture": "lit",
    "short_label": "SLICE PICK",
    "action": "Alongside held and sounding notes, marks each key that plays the selected slice; END has no selected-slice key light.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_slice.c",
      "lines": "212-221",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_slice.c#L212-L221"
     },
     {
      "kind": "source",
      "repo": "illuminus5/skiff",
      "ref": "v1.2",
      "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
      "path": "firmware/src/ui_input.c",
      "lines": "254-256",
      "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L254-L256"
     }
    ]
   }
  ]
 },
 "groups": {
  "key_lights": [
   "led_f3",
   "led_fs3",
   "led_g3",
   "led_gs3",
   "led_a3",
   "led_as3",
   "led_b3",
   "led_c4",
   "led_cs4",
   "led_d4",
   "led_ds4",
   "led_e4",
   "led_f4",
   "led_fs4",
   "led_g4",
   "led_gs4",
   "led_a4",
   "led_as4",
   "led_b4",
   "led_c5",
   "led_cs5",
   "led_d5",
   "led_ds5",
   "led_e5",
   "led_f5",
   "led_fs5",
   "led_g5"
  ]
 },
 "switching_note": {
  "kept_on_unit": "Skiff keeps four projects, 64 shared patterns, 32 user sounds with their own FM6 patches, three user sample sets, saved MAN slice markers, and settings including panel calibration and stars. A project names patterns in one shared pool; changing a shared pattern changes every entry that uses it. Changed patterns save themselves after a quiet stopped pause, even with RESTORE LAST off. With RESTORE LAST on, the last session also saves after ten quiet seconds, normally with a minute between save rounds, though a full pending queue bypasses that gap and a stopped pattern operation can flush immediately to make room. Save a project or take a full backup to flush patterns while stopped. Powering off does not start a save. First start can also change and save settings, and convert accepted older projects, without asking. When all 64 patterns are occupied, new notes on a track with no assigned pattern can be missing after restart even though the session autosave completes, because that save contains no copy of those steps; make room and complete a project save that reports SAVED before powering off. From the flash atlas: install (Skiff update loader): Compares the program area at 0x4000–0x92FFF and rewrites differing sectors, checking each write. This area includes M-VAVE Open’s sixteen saved projects, preferences and sample header, so installing Skiff over Open replaces them. The flash head below 0x4000 is left alone (after the installer validates a package for this device). install (update-record cleanup): After the computer finishes the update, scans the last 256 bytes of each sector at 0x93000–0xFBFFF, skipping 0x97000–0xDFFFF. It erases a sector only when its tail matches a valid update record. This can remove an old stock update record at 0xE8000. The scan also reaches Skiff’s pattern pool; music whose bytes happen to match a valid update record has no extra protection (a valid update record found in the scanned sector tail). leaving through a firmware update: Erases the five staging sectors at 0xE0000–0xE4FFF, writes the incoming package’s loader there and checks it. After the computer reports success, writes the update record at 0xE4F00. A failed attempt clears the staging sectors again. These are temporary update files (when a computer starts a firmware update). normal startup with leftover update data: Erases all five staging sectors if any of the first four bytes at 0xE0000 or first eight bytes at 0xE4F00 is not blank (0xFF). It does not check whose data this is. Other occupied bytes alone do not trigger this cleanup (the flash chip is recognized and either startup probe is not blank). first or legacy startup settings writes: Skiff checks the settings pair after every previous firmware. Missing or rejected settings start from defaults: on a clean start it saves BPM LOCK and the first revision, clears the old scene area and saves its marker, then adopts clock, MIDI-input and tuning choices and saves the second revision. These three writes replace both 0xFC000 and 0xFD000 without asking or a save command, assuming working flash and stopped transport. The two revision saves also run after an unclean first start and alone replace both sectors when settings start from defaults; only scene clearing requires a clean start. The overwritten work includes FoMni’s whole saved setup, including page values, eleven chord-button assignments, CHORD HOLD, SYNC START and lights; SLOOP’s four user drum kits SYN1–SYN4, song order, learned MIDI assignments and device preferences, calibration, theme and favourites; Melodee’s saved template with each track’s embedded sound and native voice, its effects setup, device preferences and calibration; X0X’s tempo, accent, clock and note-output choices, per-part MIDI channels, key sounds, lights and audio preferences. Accepted settings instead follow their stored revision and marker: they can skip those writes, but scene clearing can still remove Felucca learned controls and colours or GHOULBOX stars and preferences, and reset JIANT MIDI OUT. Out-of-range clock, MIDI-input or tuning values can cause a further save after one second even without revision migration. Import normalization, including SCREEN OFF changes, persists with the next actual save. One changed newest copy is enough for the previous firmware to load altered settings; additional writes can replace both copies (settings revisions or scene marker require changes, including defaults after missing/rejected records; only scene clearing requires a clean start; actual flash writes wait for stop). clean startup old-project migration: On a clean start, converts readable older projects and the music in progress to its current format. It keeps nonempty track patterns in the shared pool before rewriting each project, without asking and even with RESTORE LAST off. Current or unsupported records are skipped; a full pool leaves the project unconverted. Projects from the mapped Felucca, SLOOP and JIANT releases do not qualify (clean start, a supported older project and room in the pattern pool). startup retired FM6-bank migration: If no usable collection of user sounds’ own FM6 patches is found but an older FM6 voice bank is valid, copies matching bank patches into the user sounds’ own patch collection and saves without asking. Its first write preserves the newest valid older-bank copy unless a current patch-storage copy already exists; otherwise it alternates copies normally. Without a valid older bank there is no write (no usable current user-patch collection and a valid older FM6 voice bank). What Skiff writes over the previous firmware's data is in overwrites_previous; what the next firmware writes over Skiff's is in when_you_leave.",
  "lost": "Switching to Skiff 1.1 leaves out the newer effects, second envelope and drum controls. An ENV2 modulation source becomes EXPR there; turn that slot off if needed. Saving in 1.1 permanently drops the newer settings, and some sound names or built-in SLICE samples differ. Back up before switching; see the switching advice in this section for startup and ordinary-use risks. From the flash atlas: Other firmwares reading Skiff's data: Felucca reads and uses Skiff's settings, calibration and favourites; user sounds’ own FM6 patches; user sample USR1; user sample USR2; user sample USR3 (Skiff’s migration marker enables Felucca’s beta second core at startup; some other shared preference bytes also have different meanings; each patch must still match its FM6 user record; sample loop and slice behaviour follow this reader’s engines); JIANT reads and uses Skiff's settings, calibration and favourites (shared settings bytes select different preferences); ChoralRoot takes over Skiff's settings, calibration and favourites, converting them (After ChoralRoot saves these settings, Skiff cannot read back the newer record. Returning to Skiff starts its preferences and calibration from defaults; the older copy is not retried just because the newest record has a different format); GHOULBOX reads and uses Skiff's settings, calibration and favourites; user sounds’ own FM6 patches; user sample USR1; user sample USR2; user sample USR3 (shared settings bytes select different preferences; each patch must still match its FM6 user record; sample loop and slice behaviour follow this reader’s engines); Felucca lists Skiff's user sound bank 1; user sound bank 2, but plays them differently (DRUM-X sounds are empty or a different engine; shared names do not guarantee shared sound); JIANT takes over Skiff's user sound bank 1; user sound bank 2, converting them (Conversion changes sound records and can detach their own FM6 patches; saving anywhere in the bank makes the converted records persist on return to Skiff); ChoralRoot lists Skiff's user sound bank 1; user sound bank 2, but plays them differently (renumbered and disabled engines change sound; deep FM6 patches are not imported); GHOULBOX lists Skiff's user sound bank 1; user sound bank 2, but plays them differently (DRUM-X sounds are empty or a different engine; shared names do not guarantee shared sound); JIANT lists Skiff's user sounds’ own FM6 patches, but plays them differently (The own-patch link is lost when JIANT converts an unmarked Skiff sound; writing that bank makes the broken link persist back in Skiff); SLOOP reads and uses Skiff's user sample USR1; user sample USR2; user sample USR3 (sample loop and slice behaviour follow this reader’s engines); X0X reads and uses Skiff's user sample USR1; user sample USR2; user sample USR3 (Sample bytes carry over; X0X uses its own zone and break-loop playback rather than Skiff’s sound and hand-set slice behaviour); Hortator reads and uses Skiff's user sample USR1; user sample USR2; user sample USR3 (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested). What Skiff reads of other firmwares' data: Skiff takes over Hortator's settings and panel calibration, converting them (Skiff imports the old preferences, then writes its newer settings format by itself at first start. Returning to Hortator cannot read that newest record: settings, panel calibration and the remembered Bluetooth device start from defaults; it does not retry the older copy); Skiff reads and uses Hortator's user samples USR1; user samples USR2; user samples USR3 (sample loop and slice behaviour follow this reader’s engines); Skiff reads and uses Felucca's user presets 1-16; user presets 17-32; FM6 patches of the FM6 user presets; user sample slot USR1; user sample slot USR2; user sample slot USR3; Skiff reads and uses SLOOP's user sounds U01-U16; user sounds U17-U32; user sample slot USR1 (header at 0xA0000); user sample slot USR2 (header at 0xB4000); user sample slot USR3 (header at 0xC8000); Skiff reads and uses X0X's break loops slot 1; break loops slot 2; break loops slot 3; Skiff reads and uses JIANT's user sounds U01-U16; user sounds U17-U32; FM6 patches of the FM6 user sounds; Skiff lists GHOULBOX's user sounds 1–16; user sounds 17–32, but plays them differently (GURDY records become DRUM-X; a matching name does not prove the same sound); Skiff reads and uses GHOULBOX's FM6 patches for user sounds; user sample slot USR1; user sample slot USR2; user sample slot USR3 (an FM6 patch must still match its user record; sample playback and loop behaviour follow the reader’s engines); Skiff imports part of Felucca’s settings and calibration, but can clear learned MIDI, custom colours and other preferences and save the changes without asking; Skiff imports part of JIANT’s settings and calibration, but replaces MIDI OUT and can change other preferences without asking; Skiff imports part of GHOULBOX’s settings and calibration, but can clear GURDY stars, click preferences and other settings and save without asking. Everything else of another firmware's looks empty or foreign to the reader.",
  "back_up_first": "Stop playback and export a full backup from the web editor before switching. It reads the unit and downloads a file containing the current music, settings and calibration, stars, four projects, both user-sound banks, their own FM6 patches, the shared pattern pool, and the three sample sets. It omits saved MAN slice markers, so separately record those positions. It captures the current music instead of a separate copy of the last quiet save. Export can write pending patterns first; if that flush runs out of room or hits a write error, file creation alone does not prove all current edits were captured. Restore asks once in the editor, then replaces each included object as it goes, settings near the end and current music last. Included empty slots are emptied; categories absent from an accepted older backup stay as they are, though restoring old projects can create patterns. Sample restore brings back audio and its sample settings, not missing MAN markers. A surviving matching set of markers can reappear because an upload keeps unused sample space. Interrupted restore can leave only part of the backup restored, and Undo cannot roll the whole restore back. Keep the backup file. The installer’s return-to-official-V15 action is another backup route: it reads the same archive from the running unit and downloads it before asking whether to continue to V15; cancel there to retain the file without starting that installation. Its interrupted-update resume option cannot read a backup and relies on a file already saved.",
  "source": [
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/project.c",
    "lines": "159-183",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L159-L183"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/bank.c",
    "lines": "488-512",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L488-L512"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/project.c",
    "lines": "1443-1464",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1443-L1464"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/project.c",
    "lines": "1580-1653",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1580-L1653"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/main.c",
    "lines": "189-197",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/main.c#L189-L197"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/bank.c",
    "lines": "1273-1334",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L1273-L1334"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/editor_backup.c",
    "lines": "39-83",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/editor_backup.c#L39-L83"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/editor_backup.c",
    "lines": "99-172",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/editor_backup.c#L99-L172"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "web/fm1backup.js",
    "lines": "114-153",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/web/fm1backup.js#L114-L153"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "web/editor.html",
    "lines": "4208-4228",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/web/editor.html#L4208-L4228"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/slice_store.c",
    "lines": "21-36",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/slice_store.c#L21-L36"
   },
   {
    "kind": "doc",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "README.md",
    "lines": "396-405",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/README.md#L396-L405"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/bank.c",
    "lines": "358-364",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L358-L364"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/bank.c",
    "lines": "467-512",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L467-L512"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/project.c",
    "lines": "1605-1621",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1605-L1621"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/project.c",
    "lines": "910-932",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L910-L932"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/project.c",
    "lines": "979-1003",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L979-L1003"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/project.c",
    "lines": "1328-1331",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1328-L1331"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/bank.c",
    "lines": "350-356",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L350-L356"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/project.c",
    "lines": "1594-1605",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1594-L1605"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/bank.c",
    "lines": "873-876",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L873-L876"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/bank.c",
    "lines": "1329-1334",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L1329-L1334"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/main.c",
    "lines": "189-197",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/main.c#L189-L197"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/ui.c",
    "lines": "519-531",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L519-L531"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/project.c",
    "lines": "1409-1440",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1409-L1440"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/settings_persist.c",
    "lines": "25-79",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/settings_persist.c#L25-L79"
   },
   {
    "kind": "source",
    "repo": "hugelton/Felucca",
    "ref": "v1.6.1",
    "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
    "path": "firmware/src/settings_persist.c",
    "lines": "8-21",
    "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/settings_persist.c#L8-L21"
   },
   {
    "kind": "source",
    "repo": "hugelton/Felucca",
    "ref": "v1.6.1",
    "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
    "path": "firmware/src/midi_learn.c",
    "lines": "8-12",
    "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/midi_learn.c#L8-L12"
   },
   {
    "kind": "source",
    "repo": "hugelton/Felucca",
    "ref": "v1.6.1",
    "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
    "path": "firmware/src/favorites.c",
    "lines": "33-42",
    "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/favorites.c#L33-L42"
   },
   {
    "kind": "source",
    "repo": "hugelton/Felucca",
    "ref": "v1.6.1",
    "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
    "path": "firmware/src/perform.c",
    "lines": "153-161",
    "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/perform.c#L153-L161"
   },
   {
    "kind": "source",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "firmware/src/settings_persist.c",
    "lines": "46-55",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/settings_persist.c#L46-L55"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "web/index_pkg.html",
    "lines": "218-245",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/web/index_pkg.html#L218-L245"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/settings_persist.c",
    "lines": "47-50",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/settings_persist.c#L47-L50"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/main.c",
    "lines": "189-197",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/main.c#L189-L197"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/ui.c",
    "lines": "503-531",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L503-L531"
   },
   {
    "kind": "source",
    "repo": "hugelton/Felucca",
    "ref": "v1.6.1",
    "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
    "path": "firmware/src/ui.c",
    "lines": "249-257",
    "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/ui.c#L249-L257"
   },
   {
    "kind": "source",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "firmware/src/ui.c",
    "lines": "258-263",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L258-L263"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/project.c",
    "lines": "1373-1395",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1373-L1395"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/storage.c",
    "lines": "74-115",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/storage.c#L74-L115"
   },
   {
    "kind": "source",
    "repo": "isod89/sloop-fm1",
    "ref": "v2.7.1",
    "commit": "4ec1ac829fd2bdf2c571ea215fb3d62477d01220",
    "path": "firmware/src/project.c",
    "lines": "738-746",
    "url": "https://github.com/isod89/sloop-fm1/blob/4ec1ac829fd2bdf2c571ea215fb3d62477d01220/firmware/src/project.c#L738-L746"
   },
   {
    "kind": "source",
    "repo": "isod89/sloop-fm1",
    "ref": "v2.7.1",
    "commit": "4ec1ac829fd2bdf2c571ea215fb3d62477d01220",
    "path": "firmware/src/project.c",
    "lines": "849-873",
    "url": "https://github.com/isod89/sloop-fm1/blob/4ec1ac829fd2bdf2c571ea215fb3d62477d01220/firmware/src/project.c#L849-L873"
   },
   {
    "kind": "source",
    "repo": "isod89/sloop-fm1",
    "ref": "v2.7.1",
    "commit": "4ec1ac829fd2bdf2c571ea215fb3d62477d01220",
    "path": "firmware/src/project.c",
    "lines": "918-936",
    "url": "https://github.com/isod89/sloop-fm1/blob/4ec1ac829fd2bdf2c571ea215fb3d62477d01220/firmware/src/project.c#L918-L936"
   },
   {
    "kind": "source",
    "repo": "isod89/sloop-fm1",
    "ref": "v2.7.1",
    "commit": "4ec1ac829fd2bdf2c571ea215fb3d62477d01220",
    "path": "firmware/src/drum_synth.c",
    "lines": "322-339",
    "url": "https://github.com/isod89/sloop-fm1/blob/4ec1ac829fd2bdf2c571ea215fb3d62477d01220/firmware/src/drum_synth.c#L322-L339"
   },
   {
    "kind": "source",
    "repo": "keremimo/melodee",
    "ref": "v1.4.1",
    "commit": "1cccd6970e6e60f136862f3016de58617010c01e",
    "path": "firmware/src/project.c",
    "lines": "796-815",
    "url": "https://github.com/keremimo/melodee/blob/1cccd6970e6e60f136862f3016de58617010c01e/firmware/src/project.c#L796-L815"
   },
   {
    "kind": "source",
    "repo": "keremimo/melodee",
    "ref": "v1.4.1",
    "commit": "1cccd6970e6e60f136862f3016de58617010c01e",
    "path": "firmware/src/project.c",
    "lines": "934-965",
    "url": "https://github.com/keremimo/melodee/blob/1cccd6970e6e60f136862f3016de58617010c01e/firmware/src/project.c#L934-L965"
   },
   {
    "kind": "source",
    "repo": "keremimo/melodee",
    "ref": "v1.4.1",
    "commit": "1cccd6970e6e60f136862f3016de58617010c01e",
    "path": "firmware/src/project.c",
    "lines": "1271-1278",
    "url": "https://github.com/keremimo/melodee/blob/1cccd6970e6e60f136862f3016de58617010c01e/firmware/src/project.c#L1271-L1278"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/x0x.h",
    "lines": "27-43",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/x0x.h#L27-L43"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-fomni",
    "ref": "v0.4",
    "commit": "6ecd227013cc18def0e89d035b3760eb268b342b",
    "path": "firmware/src/app/app.h",
    "lines": "16-24",
    "url": "https://github.com/charlesvestal/fm1-fomni/blob/6ecd227013cc18def0e89d035b3760eb268b342b/firmware/src/app/app.h#L16-L24"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/main.c",
    "lines": "189-197",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/main.c#L189-L197"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/ui.c",
    "lines": "519-531",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L519-L531"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/project.c",
    "lines": "1409-1441",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1409-L1441"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/storage.c",
    "lines": "130-155",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/storage.c#L130-L155"
   }
  ],
  "imported_settings_warning": "Skiff does not preserve every Felucca or JIANT setting. On a clean start, unless Skiff’s scene migration marker is already present, it clears Felucca’s learned MIDI assignments, custom colours and their flags, ANIM IDLE and PRESETS LIST category, and part of its FX key assignments, then saves without asking. If Skiff sees its first settings migration as unfinished, it turns BPM LOCK on in Felucca’s settings; its later migration replaces more FX key bytes with its clock, MIDI input and tuning choices and revision marker. Even without that migration, out-of-range values in those shared FX bytes can be adjusted and saved after a second, once stopped. Returning to Felucca reads those changed assignments; SCOPE MIX, CHORD ENTRY ADD, SCREEN WAKE PANEL and 2ND CORE are on, STEP PREVIEW and HELP are off, and SELECT uses BPM. Returning to JIANT reads MIDI OUT as KEYS. For either Felucca or JIANT, a saved SCREEN OFF choice of 30 MIN becomes NEVER on return after Skiff saves the imported settings. These changes need no music save and Undo cannot recover them; take a backup in the previous firmware before installing Skiff.",
  "rejected_settings_warning": "Skiff’s first start replaces FoMni’s entire saved setup, including every page’s values, its eleven chord-button assignments, CHORD HOLD, SYNC START and lights. It also overwrites SLOOP’s four user drum kits SYN1–SYN4, song order, learned MIDI assignments, calibration and other preferences, plus the custom theme and favourites kept in the same sectors; Melodee’s saved template, including each track’s embedded sound and native voice, its effects setup, and saved device preferences and calibration; and X0X’s saved tempo, accent, clock and note output choices, per-part MIDI channels, key-sound behavior, lights and audio preferences. These startup writes need no clean start, save action or confirmation, and Undo cannot bring the old records back. Back up in the previous firmware before switching. See the switching advice in this section for the other overlaps.",
  "overwrites_previous": [
   {
    "from": "stock",
    "name": "Stock V15",
    "flags": "?",
    "weakest_grade": "reported",
    "at_risk": [],
    "possibly_at_risk": [
     "stock settings (and possibly patterns)",
     "stock voices (128 user patches, banks A-D)"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "Possibly at risk (layout reported or inferred): stock settings (and possibly patterns); stock voices (128 user patches, banks A-D).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "baudgirl",
    "name": "Baud Girl FM-1+VA",
    "flags": "?",
    "weakest_grade": "inferred",
    "at_risk": [],
    "possibly_at_risk": [
     "Baud Girl presets (128)",
     "Baud Girl patterns (16, with locks)"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "Possibly at risk (layout reported or inferred): Baud Girl presets (128); Baud Girl patterns (16, with locks).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "felucca",
    "name": "Felucca",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "the autosave (the music as you left it)",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it (its RESTORE LAST is on by default)",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a readable old autosave needs migration and its patterns fit",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voice bank B1-B32",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a readable old project needs pattern migration",
        "effect": "lost"
       },
       {
        "way": "when you confirm clearing a pattern or song entry (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you copy or change an entry’s pattern (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, button calibration, favourites, MIDI LEARN map",
      "effect": "changed by itself: On a clean start without its scene-freed marker, Skiff clears learned MIDI, custom colours, ANIM IDLE, the preset category and part of the FX key map, then saves without asking. It also replaces MENU choices; revision migration can replace more FX assignments. One new settings copy is enough for Felucca to load the changes; additional revision writes can replace both copies. A saved SCREEN OFF choice of 30 MIN becomes NEVER on return after Skiff next saves settings. Out-of-range clock, MIDI-input or tuning bytes can also be adjusted and saved after one second, once stopped, even when revision migration is skipped. The first revision migration also turns Felucca BPM LOCK on; also, Skiff retains calibration but can replace preferences without a save command or question; a partial import does not preserve the whole settings record",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "changed by itself: On a clean start without its scene-freed marker, Skiff clears learned MIDI, custom colours, ANIM IDLE, the preset category and part of the FX key map, then saves without asking. It also replaces MENU choices; revision migration can replace more FX assignments. One new settings copy is enough for Felucca to load the changes; additional revision writes can replace both copies. A saved SCREEN OFF choice of 30 MIN becomes NEVER on return after Skiff next saves settings. Out-of-range clock, MIDI-input or tuning bytes can also be adjusted and saved after one second, once stopped, even when revision migration is skipped. The first revision migration also turns Felucca BPM LOCK on; also, Skiff retains calibration but can replace preferences without a save command or question; a partial import does not preserve the whole settings record"
       },
       {
        "way": "by itself, only if Skiff has not yet made its one-time settings changes",
        "effect": "changed by itself: On a clean start without its scene-freed marker, Skiff clears learned MIDI, custom colours, ANIM IDLE, the preset category and part of the FX key map, then saves without asking. It also replaces MENU choices; revision migration can replace more FX assignments. One new settings copy is enough for Felucca to load the changes; additional revision writes can replace both copies. A saved SCREEN OFF choice of 30 MIN becomes NEVER on return after Skiff next saves settings. Out-of-range clock, MIDI-input or tuning bytes can also be adjusted and saved after one second, once stopped, even when revision migration is skipped. The first revision migration also turns Felucca BPM LOCK on; also, Skiff retains calibration but can replace preferences without a save command or question; a partial import does not preserve the whole settings record"
       },
       {
        "way": "by itself, only if the old scene-byte area has not been freed yet",
        "effect": "changed by itself: On a clean start without its scene-freed marker, Skiff clears learned MIDI, custom colours, ANIM IDLE, the preset category and part of the FX key map, then saves without asking. It also replaces MENU choices; revision migration can replace more FX assignments. One new settings copy is enough for Felucca to load the changes; additional revision writes can replace both copies. A saved SCREEN OFF choice of 30 MIN becomes NEVER on return after Skiff next saves settings. Out-of-range clock, MIDI-input or tuning bytes can also be adjusted and saved after one second, once stopped, even when revision migration is skipped. The first revision migration also turns Felucca BPM LOCK on; also, Skiff retains calibration but can replace preferences without a save command or question; a partial import does not preserve the whole settings record"
       },
       {
        "way": "when you calibrate the panel or change editor preferences (no question)",
        "effect": "changed by itself: On a clean start without its scene-freed marker, Skiff clears learned MIDI, custom colours, ANIM IDLE, the preset category and part of the FX key map, then saves without asking. It also replaces MENU choices; revision migration can replace more FX assignments. One new settings copy is enough for Felucca to load the changes; additional revision writes can replace both copies. A saved SCREEN OFF choice of 30 MIN becomes NEVER on return after Skiff next saves settings. Out-of-range clock, MIDI-input or tuning bytes can also be adjusted and saved after one second, once stopped, even when revision migration is skipped. The first revision migration also turns Felucca BPM LOCK on; also, Skiff retains calibration but can replace preferences without a save command or question; a partial import does not preserve the whole settings record"
       },
       {
        "way": "when you confirm RESET SETTINGS (it asks or arms a second turn first)",
        "effect": "changed by itself: On a clean start without its scene-freed marker, Skiff clears learned MIDI, custom colours, ANIM IDLE, the preset category and part of the FX key map, then saves without asking. It also replaces MENU choices; revision migration can replace more FX assignments. One new settings copy is enough for Felucca to load the changes; additional revision writes can replace both copies. A saved SCREEN OFF choice of 30 MIN becomes NEVER on return after Skiff next saves settings. Out-of-range clock, MIDI-input or tuning bytes can also be adjusted and saved after one second, once stopped, even when revision migration is skipped. The first revision migration also turns Felucca BPM LOCK on; also, Skiff retains calibration but can replace preferences without a save command or question; a partial import does not preserve the whole settings record"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "changed by itself: On a clean start without its scene-freed marker, Skiff clears learned MIDI, custom colours, ANIM IDLE, the preset category and part of the FX key map, then saves without asking. It also replaces MENU choices; revision migration can replace more FX assignments. One new settings copy is enough for Felucca to load the changes; additional revision writes can replace both copies. A saved SCREEN OFF choice of 30 MIN becomes NEVER on return after Skiff next saves settings. Out-of-range clock, MIDI-input or tuning bytes can also be adjusted and saved after one second, once stopped, even when revision migration is skipped. The first revision migration also turns Felucca BPM LOCK on; also, Skiff retains calibration but can replace preferences without a save command or question; a partial import does not preserve the whole settings record"
       }
      ]
     },
     {
      "object": "project slot A",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a readable old Felucca/Skiff project needs migration, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you SAVE AS from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project through the browser’s legacy command (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot B",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a readable old Felucca/Skiff project needs migration, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you SAVE AS from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project through the browser’s legacy command (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot C",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a readable old Felucca/Skiff project needs migration, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you SAVE AS from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project through the browser’s legacy command (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot D",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a readable old Felucca/Skiff project needs migration, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you SAVE AS from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project through the browser’s legacy command (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user presets 1-16",
      "effect": "converted when read, written back at your next save in that bank",
      "ways": [
       {
        "way": "when you erase a sound from the web editor (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "converted when read, written back at your next save in that bank"
       },
       {
        "way": "when you save, import, erase or rename a user sound (no question when the target slot is empty; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank"
       },
       {
        "way": "when you store a sound from the web editor (no question when the target slot is empty; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank"
       }
      ]
     },
     {
      "object": "user presets 17-32",
      "effect": "converted when read, written back at your next save in that bank",
      "ways": [
       {
        "way": "when you erase a sound from the web editor (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "converted when read, written back at your next save in that bank"
       },
       {
        "way": "when you save, import, erase or rename a user sound (no question when the target slot is empty; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank"
       },
       {
        "way": "when you store a sound from the web editor (no question when the target slot is empty; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "FM6 patches of the FM6 user presets",
     "user sample slot USR1",
     "user sample slot USR2",
     "user sample slot USR3"
    ],
    "kept_unseen": [],
    "notes": [
     "Imports Felucca’s saved RESTORE LAST state (ON by default)."
    ],
    "owner_text": "At risk by itself: the autosave (the music as you left it); FM6 voice bank B1-B32; settings, button calibration, favourites, MIDI LEARN map (changed by itself: On a clean start without its scene-freed marker, Skiff clears learned MIDI, custom colours, ANIM IDLE, the preset category and part of the FX key map, then saves without asking. It also replaces MENU choices; revision migration can replace more FX assignments. One new settings copy is enough for Felucca to load the changes; additional revision writes can replace both copies. A saved SCREEN OFF choice of 30 MIN becomes NEVER on return after Skiff next saves settings. Out-of-range clock, MIDI-input or tuning bytes can also be adjusted and saved after one second, once stopped, even when revision migration is skipped. The first revision migration also turns Felucca BPM LOCK on; also, Skiff retains calibration but can replace preferences without a save command or question; a partial import does not preserve the whole settings record). At risk by itself, under a condition: project slot A; project slot B; project slot C; project slot D. At risk when you act: user presets 1-16 (converted when read, written back at your next save in that bank); user presets 17-32 (converted when read, written back at your next save in that bank). Carried over: FM6 patches of the FM6 user presets; user sample slot USR1; user sample slot USR2; user sample slot USR3. Imports Felucca’s saved RESTORE LAST state (ON by default).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "sloop",
    "name": "SLOOP",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 patch bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it (its RESTORE LAST is on by default)",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a readable old autosave needs migration and its patterns fit",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR4 (header at 0xE7000)",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a readable old project needs pattern migration",
        "effect": "lost"
       },
       {
        "way": "when you confirm clearing a pattern or song entry (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you copy or change an entry’s pattern (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration, song order, SYN1-4 kits, MIDI LEARN, theme and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself at its first start",
        "effect": "lost"
       },
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel or change editor preferences (no question)",
        "effect": "lost"
       },
       {
        "way": "when you confirm RESET SETTINGS (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section A (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a readable old Felucca/Skiff project needs migration, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you SAVE AS from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project through the browser’s legacy command (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section B (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a readable old Felucca/Skiff project needs migration, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you SAVE AS from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project through the browser’s legacy command (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section C (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a readable old Felucca/Skiff project needs migration, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you SAVE AS from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project through the browser’s legacy command (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section D (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a readable old Felucca/Skiff project needs migration, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you SAVE AS from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project through the browser’s legacy command (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "the music in progress (autosave)",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a valid retired FM6 patch bank remains and no current patch object loads",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save an FM6 user sound (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store an FM6 sound from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write an FM6 patch to a user sound from the editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "converted when read, written back at your next save in that bank",
      "ways": [
       {
        "way": "when you erase a sound from the web editor (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "converted when read, written back at your next save in that bank"
       },
       {
        "way": "when you save, import, erase or rename a user sound (no question when the target slot is empty; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank"
       },
       {
        "way": "when you store a sound from the web editor (no question when the target slot is empty; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "converted when read, written back at your next save in that bank",
      "ways": [
       {
        "way": "when you erase a sound from the web editor (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "converted when read, written back at your next save in that bank"
       },
       {
        "way": "when you save, import, erase or rename a user sound (no question when the target slot is empty; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank"
       },
       {
        "way": "when you store a sound from the web editor (no question when the target slot is empty; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "user sample slot USR1 (header at 0xA0000)",
     "user sample slot USR2 (header at 0xB4000)",
     "user sample slot USR3 (header at 0xC8000)"
    ],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: FM6 patch bank B1-B27; user sample slot USR4 (header at 0xE7000); settings, calibration, song order, SYN1-4 kits, MIDI LEARN, theme and favourites. At risk by itself, under a condition: song section A (a whole project); song section B (a whole project); song section C (a whole project); song section D (a whole project); the music in progress (autosave). At risk when you act: user sounds U01-U16 (converted when read, written back at your next save in that bank); user sounds U17-U32 (converted when read, written back at your next save in that bank). Carried over: user sample slot USR1 (header at 0xA0000); user sample slot USR2 (header at 0xB4000); user sample slot USR3 (header at 0xC8000).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "x0x",
    "name": "X0X",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "the whole X0X project (settings, sound, all 32 patterns, song, knob motion)",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself at its first start",
        "effect": "lost"
       },
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a readable old Felucca/Skiff project needs migration, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you SAVE AS from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel or change editor preferences (no question)",
        "effect": "lost"
       },
       {
        "way": "when you confirm RESET SETTINGS (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project through the browser’s legacy command (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save, import, erase or rename a user sound (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a sound from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "X0X button calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save, import, erase or rename a user sound (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a sound from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "break loops slot 1",
     "break loops slot 2",
     "break loops slot 3"
    ],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: the whole X0X project (settings, sound, all 32 patterns, song, knob motion). At risk when you act: X0X button calibration. Carried over: break loops slot 1; break loops slot 2; break loops slot 3.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "jiant",
    "name": "JIANT",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "the music in progress (RESTORE LAST)",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it (its RESTORE LAST is on by default)",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a readable old autosave needs migration and its patterns fit",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voice bank B1-B32",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a readable old project needs pattern migration",
        "effect": "lost"
       },
       {
        "way": "when you confirm clearing a pattern or song entry (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you copy or change an entry’s pattern (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration, favourites, MENU options",
      "effect": "changed by itself: On its first clean start Skiff clears the old scene area and replaces JIANT MIDI OUT with its migration marker, then saves without asking. Returning to JIANT reads MIDI OUT as KEYS. JIANT’s palette marker normally skips the other revision writes, so only one settings copy may be replaced; it becomes the newest copy JIANT reads. A saved SCREEN OFF choice of 30 MIN becomes NEVER on return after Skiff next saves settings. Out-of-range clock, MIDI-input or tuning bytes can also be adjusted and saved after one second, once stopped, even when revision migration is skipped; also, Skiff retains calibration but can replace preferences without a save command or question; a partial import does not preserve the whole settings record",
      "ways": [
       {
        "way": "by itself at its first start",
        "effect": "changed by itself: On its first clean start Skiff clears the old scene area and replaces JIANT MIDI OUT with its migration marker, then saves without asking. Returning to JIANT reads MIDI OUT as KEYS. JIANT’s palette marker normally skips the other revision writes, so only one settings copy may be replaced; it becomes the newest copy JIANT reads. A saved SCREEN OFF choice of 30 MIN becomes NEVER on return after Skiff next saves settings. Out-of-range clock, MIDI-input or tuning bytes can also be adjusted and saved after one second, once stopped, even when revision migration is skipped; also, Skiff retains calibration but can replace preferences without a save command or question; a partial import does not preserve the whole settings record"
       },
       {
        "way": "by itself as you use it",
        "effect": "changed by itself: On its first clean start Skiff clears the old scene area and replaces JIANT MIDI OUT with its migration marker, then saves without asking. Returning to JIANT reads MIDI OUT as KEYS. JIANT’s palette marker normally skips the other revision writes, so only one settings copy may be replaced; it becomes the newest copy JIANT reads. A saved SCREEN OFF choice of 30 MIN becomes NEVER on return after Skiff next saves settings. Out-of-range clock, MIDI-input or tuning bytes can also be adjusted and saved after one second, once stopped, even when revision migration is skipped; also, Skiff retains calibration but can replace preferences without a save command or question; a partial import does not preserve the whole settings record"
       },
       {
        "way": "by itself, only if Skiff has not yet made its one-time settings changes",
        "effect": "changed by itself: On its first clean start Skiff clears the old scene area and replaces JIANT MIDI OUT with its migration marker, then saves without asking. Returning to JIANT reads MIDI OUT as KEYS. JIANT’s palette marker normally skips the other revision writes, so only one settings copy may be replaced; it becomes the newest copy JIANT reads. A saved SCREEN OFF choice of 30 MIN becomes NEVER on return after Skiff next saves settings. Out-of-range clock, MIDI-input or tuning bytes can also be adjusted and saved after one second, once stopped, even when revision migration is skipped; also, Skiff retains calibration but can replace preferences without a save command or question; a partial import does not preserve the whole settings record"
       },
       {
        "way": "when you calibrate the panel or change editor preferences (no question)",
        "effect": "changed by itself: On its first clean start Skiff clears the old scene area and replaces JIANT MIDI OUT with its migration marker, then saves without asking. Returning to JIANT reads MIDI OUT as KEYS. JIANT’s palette marker normally skips the other revision writes, so only one settings copy may be replaced; it becomes the newest copy JIANT reads. A saved SCREEN OFF choice of 30 MIN becomes NEVER on return after Skiff next saves settings. Out-of-range clock, MIDI-input or tuning bytes can also be adjusted and saved after one second, once stopped, even when revision migration is skipped; also, Skiff retains calibration but can replace preferences without a save command or question; a partial import does not preserve the whole settings record"
       },
       {
        "way": "when you confirm RESET SETTINGS (it asks or arms a second turn first)",
        "effect": "changed by itself: On its first clean start Skiff clears the old scene area and replaces JIANT MIDI OUT with its migration marker, then saves without asking. Returning to JIANT reads MIDI OUT as KEYS. JIANT’s palette marker normally skips the other revision writes, so only one settings copy may be replaced; it becomes the newest copy JIANT reads. A saved SCREEN OFF choice of 30 MIN becomes NEVER on return after Skiff next saves settings. Out-of-range clock, MIDI-input or tuning bytes can also be adjusted and saved after one second, once stopped, even when revision migration is skipped; also, Skiff retains calibration but can replace preferences without a save command or question; a partial import does not preserve the whole settings record"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "changed by itself: On its first clean start Skiff clears the old scene area and replaces JIANT MIDI OUT with its migration marker, then saves without asking. Returning to JIANT reads MIDI OUT as KEYS. JIANT’s palette marker normally skips the other revision writes, so only one settings copy may be replaced; it becomes the newest copy JIANT reads. A saved SCREEN OFF choice of 30 MIN becomes NEVER on return after Skiff next saves settings. Out-of-range clock, MIDI-input or tuning bytes can also be adjusted and saved after one second, once stopped, even when revision migration is skipped; also, Skiff retains calibration but can replace preferences without a save command or question; a partial import does not preserve the whole settings record"
       }
      ]
     },
     {
      "object": "song 1 section A (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a readable old Felucca/Skiff project needs migration, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you SAVE AS from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project through the browser’s legacy command (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 1 section B (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a readable old Felucca/Skiff project needs migration, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you SAVE AS from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project through the browser’s legacy command (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 1 section C (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a readable old Felucca/Skiff project needs migration, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you SAVE AS from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project through the browser’s legacy command (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 1 section D (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a readable old Felucca/Skiff project needs migration, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you SAVE AS from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project through the browser’s legacy command (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 2: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 3: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 4: four sections (whole projects)",
      "effect": "some of it lost",
      "ways": [
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "some of it lost"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "some of it lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "some of it lost"
       }
      ]
     },
     {
      "object": "song 5: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 6: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 7: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 8: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "which song is current, every song's rows and scenes",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "converted when read, written back at your next save in that bank",
      "ways": [
       {
        "way": "when you erase a sound from the web editor (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "converted when read, written back at your next save in that bank"
       },
       {
        "way": "when you save, import, erase or rename a user sound (no question when the target slot is empty; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank"
       },
       {
        "way": "when you store a sound from the web editor (no question when the target slot is empty; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "converted when read, written back at your next save in that bank",
      "ways": [
       {
        "way": "when you erase a sound from the web editor (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "converted when read, written back at your next save in that bank"
       },
       {
        "way": "when you save, import, erase or rename a user sound (no question when the target slot is empty; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank"
       },
       {
        "way": "when you store a sound from the web editor (no question when the target slot is empty; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "FM6 patches of the FM6 user sounds"
    ],
    "kept_unseen": [],
    "notes": [
     "JIANT’s default RESTORE LAST OFF imports as Skiff RESTORE LAST ON; enabling it in JIANT instead disables Skiff autosave."
    ],
    "owner_text": "At risk by itself: the music in progress (RESTORE LAST); FM6 voice bank B1-B32; settings, calibration, favourites, MENU options (changed by itself: On its first clean start Skiff clears the old scene area and replaces JIANT MIDI OUT with its migration marker, then saves without asking. Returning to JIANT reads MIDI OUT as KEYS. JIANT’s palette marker normally skips the other revision writes, so only one settings copy may be replaced; it becomes the newest copy JIANT reads. A saved SCREEN OFF choice of 30 MIN becomes NEVER on return after Skiff next saves settings. Out-of-range clock, MIDI-input or tuning bytes can also be adjusted and saved after one second, once stopped, even when revision migration is skipped; also, Skiff retains calibration but can replace preferences without a save command or question; a partial import does not preserve the whole settings record). At risk by itself, under a condition: song 1 section A (a whole project); song 1 section B (a whole project); song 1 section C (a whole project); song 1 section D (a whole project). At risk when you act: song 2: four sections (whole projects); song 3: four sections (whole projects); song 4: four sections (whole projects) (some of it lost); song 5: four sections (whole projects); song 6: four sections (whole projects); song 7: four sections (whole projects); song 8: four sections (whole projects); which song is current, every song's rows and scenes; user sounds U01-U16 (converted when read, written back at your next save in that bank); user sounds U17-U32 (converted when read, written back at your next save in that bank). Carried over: FM6 patches of the FM6 user sounds. JIANT’s default RESTORE LAST OFF imports as Skiff RESTORE LAST ON; enabling it in JIANT instead disables Skiff autosave.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "melodee",
    "name": "Melodee",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "project A: patterns, song, sounds, motion, recordings",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if a readable old project needs pattern migration",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm clearing a pattern or song entry (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you copy or change an entry’s pattern (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (no question)",
        "effect": "damaged (part of it written over)"
       }
      ]
     },
     {
      "object": "project B: patterns, song, sounds, motion, recordings",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if a readable old project needs pattern migration",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm clearing a pattern or song entry (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you copy or change an entry’s pattern (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (no question)",
        "effect": "damaged (part of it written over)"
       }
      ]
     },
     {
      "object": "project C: patterns, song, sounds, motion, recordings",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if a readable old project needs pattern migration",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm clearing a pattern or song entry (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you copy or change an entry’s pattern (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (no question)",
        "effect": "damaged (part of it written over)"
       }
      ]
     },
     {
      "object": "project D: patterns, song, sounds, motion, recordings",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if a readable old project needs pattern migration",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm clearing a pattern or song entry (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you copy or change an entry’s pattern (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (no question)",
        "effect": "damaged (part of it written over)"
       }
      ]
     },
     {
      "object": "shared user presets U037-U054",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it (its RESTORE LAST is on by default)",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a readable old autosave needs migration and its patterns fit",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U055-U072",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a readable old project needs pattern migration",
        "effect": "lost"
       },
       {
        "way": "when you confirm clearing a pattern or song entry (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you copy or change an entry’s pattern (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U127-U144",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a readable old project needs pattern migration",
        "effect": "lost"
       },
       {
        "way": "when you confirm clearing a pattern or song entry (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you copy or change an entry’s pattern (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, factory favourites, calibration, saved template",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself at its first start",
        "effect": "lost"
       },
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel or change editor preferences (no question)",
        "effect": "lost"
       },
       {
        "way": "when you confirm RESET SETTINGS (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U289-U378",
      "effect": "some of it lost",
      "ways": [
       {
        "way": "by itself, only if a readable old Felucca/Skiff project needs migration, with room for its patterns",
        "effect": "some of it lost"
       },
       {
        "way": "when you SAVE AS from the web editor (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "some of it lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you save a project through the browser’s legacy command (it asks or arms a second turn first)",
        "effect": "some of it lost"
       }
      ]
     },
     {
      "object": "shared user presets U379-U384",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a readable old Felucca/Skiff project needs migration, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you SAVE AS from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project through the browser’s legacy command (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U109-U126",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a valid retired FM6 patch bank remains and no current patch object loads",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save an FM6 user sound (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store an FM6 sound from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write an FM6 patch to a user sound from the editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U145-U288",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U073-U090",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U091-U108",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U001-U018",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save, import, erase or rename a user sound (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a sound from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U019-U036",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save, import, erase or rename a user sound (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a sound from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: project A: patterns, song, sounds, motion, recordings; project B: patterns, song, sounds, motion, recordings; project C: patterns, song, sounds, motion, recordings; project D: patterns, song, sounds, motion, recordings; shared user presets U037-U054; shared user presets U055-U072; shared user presets U127-U144; settings, factory favourites, calibration, saved template. At risk by itself, under a condition: shared user presets U289-U378 (some of it lost); shared user presets U379-U384; shared user presets U109-U126. At risk when you act: shared user presets U145-U288; shared user presets U073-U090; shared user presets U091-U108; shared user presets U001-U018; shared user presets U019-U036.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fomni",
    "name": "FoMni",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FoMni setup (pages, chord buttons, lights)",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself at its first start",
        "effect": "lost"
       },
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel or change editor preferences (no question)",
        "effect": "lost"
       },
       {
        "way": "when you confirm RESET SETTINGS (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FoMni button calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save, import, erase or rename a user sound (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a sound from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: FoMni setup (pages, chord buttons, lights). At risk when you act: FoMni button calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "amb",
    "name": "AMB-1",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "AMB-1 pieces and setup",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself at its first start",
        "effect": "lost"
       },
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel or change editor preferences (no question)",
        "effect": "lost"
       },
       {
        "way": "when you confirm RESET SETTINGS (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "AMB-1 panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save, import, erase or rename a user sound (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a sound from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: AMB-1 pieces and setup. At risk when you act: AMB-1 panel calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "choralroot",
    "name": "ChoralRoot",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "options, playing setup and panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself at its first start",
        "effect": "lost"
       },
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel or change editor preferences (no question)",
        "effect": "lost"
       },
       {
        "way": "when you confirm RESET SETTINGS (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "32 imported DX7 voices",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a valid retired FM6 patch bank remains and no current patch object loads",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save an FM6 user sound (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store an FM6 sound from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write an FM6 patch to a user sound from the editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank A (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank B (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank C (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank D (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank E (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank F (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank G (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank H (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "last global-save session",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "favourite marks, chord/bass type and filter",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "128 saved sounds with their complete engine patches",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: options, playing setup and panel calibration. At risk by itself, under a condition: 32 imported DX7 voices. At risk when you act: CZ-1 bank A (16 tones); CZ-1 bank B (16 tones); CZ-1 bank C (16 tones); CZ-1 bank D (16 tones); CZ-1 bank E (16 tones); CZ-1 bank F (16 tones); CZ-1 bank G (16 tones); CZ-1 bank H (16 tones); last global-save session; favourite marks, chord/bass type and filter; 128 saved sounds with their complete engine patches; recorded loop 1; recorded loop 2; recorded loop 3; recorded loop 4; recorded loop 5; recorded loop 6; recorded loop 7; recorded loop 8; recorded loop 9; recorded loop 10.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "ghoulbox",
    "name": "GHOULBOX",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "music in progress (RESTORE LAST)",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it (its RESTORE LAST is on by default)",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a readable old autosave needs migration and its patterns fit",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voice bank B1–B32",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a readable old project needs pattern migration",
        "effect": "lost"
       },
       {
        "way": "when you confirm clearing a pattern or song entry (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you copy or change an entry’s pattern (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings and panel calibration",
      "effect": "changed by itself: On a clean start without its scene-freed marker, Skiff clears GURDY stars, click preferences, the preset category and part of the FX key map, changes secondary MENU choices, then saves without asking. A prior Skiff marker and revision can survive a GHOULBOX round trip, so this write remains conditional. One newest modified copy is enough to change settings on return; revision writes can replace both copies. BLANK becomes DUNGEON on return after Skiff next saves settings. Out-of-range clock, MIDI-input or tuning bytes can also be adjusted and saved after one second, once stopped, changing more FX assignments even when revision migration is skipped; also, Skiff retains calibration but can replace preferences without a save command or question; a partial import does not preserve the whole settings record",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "changed by itself: On a clean start without its scene-freed marker, Skiff clears GURDY stars, click preferences, the preset category and part of the FX key map, changes secondary MENU choices, then saves without asking. A prior Skiff marker and revision can survive a GHOULBOX round trip, so this write remains conditional. One newest modified copy is enough to change settings on return; revision writes can replace both copies. BLANK becomes DUNGEON on return after Skiff next saves settings. Out-of-range clock, MIDI-input or tuning bytes can also be adjusted and saved after one second, once stopped, changing more FX assignments even when revision migration is skipped; also, Skiff retains calibration but can replace preferences without a save command or question; a partial import does not preserve the whole settings record"
       },
       {
        "way": "by itself, only if Skiff has not yet made its one-time settings changes",
        "effect": "changed by itself: On a clean start without its scene-freed marker, Skiff clears GURDY stars, click preferences, the preset category and part of the FX key map, changes secondary MENU choices, then saves without asking. A prior Skiff marker and revision can survive a GHOULBOX round trip, so this write remains conditional. One newest modified copy is enough to change settings on return; revision writes can replace both copies. BLANK becomes DUNGEON on return after Skiff next saves settings. Out-of-range clock, MIDI-input or tuning bytes can also be adjusted and saved after one second, once stopped, changing more FX assignments even when revision migration is skipped; also, Skiff retains calibration but can replace preferences without a save command or question; a partial import does not preserve the whole settings record"
       },
       {
        "way": "by itself, only if the old scene-byte area has not been freed yet",
        "effect": "changed by itself: On a clean start without its scene-freed marker, Skiff clears GURDY stars, click preferences, the preset category and part of the FX key map, changes secondary MENU choices, then saves without asking. A prior Skiff marker and revision can survive a GHOULBOX round trip, so this write remains conditional. One newest modified copy is enough to change settings on return; revision writes can replace both copies. BLANK becomes DUNGEON on return after Skiff next saves settings. Out-of-range clock, MIDI-input or tuning bytes can also be adjusted and saved after one second, once stopped, changing more FX assignments even when revision migration is skipped; also, Skiff retains calibration but can replace preferences without a save command or question; a partial import does not preserve the whole settings record"
       },
       {
        "way": "when you calibrate the panel or change editor preferences (no question)",
        "effect": "changed by itself: On a clean start without its scene-freed marker, Skiff clears GURDY stars, click preferences, the preset category and part of the FX key map, changes secondary MENU choices, then saves without asking. A prior Skiff marker and revision can survive a GHOULBOX round trip, so this write remains conditional. One newest modified copy is enough to change settings on return; revision writes can replace both copies. BLANK becomes DUNGEON on return after Skiff next saves settings. Out-of-range clock, MIDI-input or tuning bytes can also be adjusted and saved after one second, once stopped, changing more FX assignments even when revision migration is skipped; also, Skiff retains calibration but can replace preferences without a save command or question; a partial import does not preserve the whole settings record"
       },
       {
        "way": "when you confirm RESET SETTINGS (it asks or arms a second turn first)",
        "effect": "changed by itself: On a clean start without its scene-freed marker, Skiff clears GURDY stars, click preferences, the preset category and part of the FX key map, changes secondary MENU choices, then saves without asking. A prior Skiff marker and revision can survive a GHOULBOX round trip, so this write remains conditional. One newest modified copy is enough to change settings on return; revision writes can replace both copies. BLANK becomes DUNGEON on return after Skiff next saves settings. Out-of-range clock, MIDI-input or tuning bytes can also be adjusted and saved after one second, once stopped, changing more FX assignments even when revision migration is skipped; also, Skiff retains calibration but can replace preferences without a save command or question; a partial import does not preserve the whole settings record"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "changed by itself: On a clean start without its scene-freed marker, Skiff clears GURDY stars, click preferences, the preset category and part of the FX key map, changes secondary MENU choices, then saves without asking. A prior Skiff marker and revision can survive a GHOULBOX round trip, so this write remains conditional. One newest modified copy is enough to change settings on return; revision writes can replace both copies. BLANK becomes DUNGEON on return after Skiff next saves settings. Out-of-range clock, MIDI-input or tuning bytes can also be adjusted and saved after one second, once stopped, changing more FX assignments even when revision migration is skipped; also, Skiff retains calibration but can replace preferences without a save command or question; a partial import does not preserve the whole settings record"
       }
      ]
     },
     {
      "object": "project A",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a readable old Felucca/Skiff project needs migration, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you SAVE AS from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project through the browser’s legacy command (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project B",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a readable old Felucca/Skiff project needs migration, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you SAVE AS from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project through the browser’s legacy command (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project C",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a readable old Felucca/Skiff project needs migration, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you SAVE AS from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project through the browser’s legacy command (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project D",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a readable old Felucca/Skiff project needs migration, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you SAVE AS from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project through the browser’s legacy command (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "FM6 patches for user sounds (an FM6 patch must still match its user record)",
     "user sample slot USR1 (sample playback and loop behaviour follow the reader’s engines)",
     "user sample slot USR2 (sample playback and loop behaviour follow the reader’s engines)",
     "user sample slot USR3 (sample playback and loop behaviour follow the reader’s engines)",
     "user sounds 1–16 (GURDY records become DRUM-X; a matching name does not prove the same sound)",
     "user sounds 17–32 (GURDY records become DRUM-X; a matching name does not prove the same sound)"
    ],
    "kept_unseen": [],
    "notes": [
     "Imports GHOULBOX’s saved RESTORE LAST state (ON by default)."
    ],
    "owner_text": "At risk by itself: music in progress (RESTORE LAST); FM6 voice bank B1–B32; settings and panel calibration (changed by itself: On a clean start without its scene-freed marker, Skiff clears GURDY stars, click preferences, the preset category and part of the FX key map, changes secondary MENU choices, then saves without asking. A prior Skiff marker and revision can survive a GHOULBOX round trip, so this write remains conditional. One newest modified copy is enough to change settings on return; revision writes can replace both copies. BLANK becomes DUNGEON on return after Skiff next saves settings. Out-of-range clock, MIDI-input or tuning bytes can also be adjusted and saved after one second, once stopped, changing more FX assignments even when revision migration is skipped; also, Skiff retains calibration but can replace preferences without a save command or question; a partial import does not preserve the whole settings record). At risk by itself, under a condition: project A; project B; project C; project D. Carried over: FM6 patches for user sounds (an FM6 patch must still match its user record); user sample slot USR1 (sample playback and loop behaviour follow the reader’s engines); user sample slot USR2 (sample playback and loop behaviour follow the reader’s engines); user sample slot USR3 (sample playback and loop behaviour follow the reader’s engines); user sounds 1–16 (GURDY records become DRUM-X; a matching name does not prove the same sound); user sounds 17–32 (GURDY records become DRUM-X; a matching name does not prove the same sound). Imports GHOULBOX’s saved RESTORE LAST state (ON by default).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "mvaveopen",
    "name": "M-VAVE FM-1 Open",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "Open shared sample audio",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself at its first start",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself as you use it",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself as you use it (its RESTORE LAST is on by default)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if a readable old Felucca/Skiff project needs migration, with room for its patterns",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if a readable old autosave needs migration and its patterns fit",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if a readable old project needs pattern migration",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if a valid retired FM6 patch bank remains and no current patch object loads",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if either update-area probe is not erased",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you SAVE AS from the web editor (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you calibrate the panel or change editor preferences (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you confirm RESET SETTINGS (it asks or arms a second turn first)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you confirm clearing a pattern or song entry (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you copy or change an entry’s pattern (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you install Skiff (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you save a project from the web editor (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you save a project through the browser’s legacy command (it asks or arms a second turn first)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you save an FM6 user sound (no question; it rewrites the whole bank)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you save, import, erase or rename a user sound (no question; it rewrites the whole bank)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you start a firmware update (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you store a sound from the web editor (no question; it rewrites the whole bank)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you store an FM6 sound from the web editor (no question; it rewrites the whole bank)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you write an FM6 patch to a user sound from the editor (no question; it rewrites the whole bank)",
        "effect": "damaged (part of it written over)"
       }
      ]
     },
     {
      "object": "Open USER project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Skiff (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Skiff (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Skiff (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Skiff (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Skiff (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Skiff (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Skiff (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Skiff (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Skiff (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Skiff (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 11",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Skiff (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Skiff (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 13",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Skiff (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 14",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Skiff (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 15",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Skiff (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Skiff (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open device preferences",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Skiff (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: Open shared sample audio. At risk when you act: Open USER project 1; Open USER project 2; Open USER project 3; Open USER project 4; Open USER project 5; Open USER project 6; Open USER project 7; Open USER project 8; Open USER project 9; Open USER project 10; Open USER project 11; Open USER project 12; Open USER project 13; Open USER project 14; Open USER project 15; Open USER project 16; Open device preferences.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fm106",
    "name": "FM-106",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "octave, last selected preset and MIDI preferences",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself at its first start",
        "effect": "lost"
       },
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel or change editor preferences (no question)",
        "effect": "lost"
       },
       {
        "way": "when you confirm RESET SETTINGS (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "older stored user bank, if present (Beta4 does not store new edits)",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a readable old Felucca/Skiff project needs migration, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you SAVE AS from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project through the browser’s legacy command (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "A valid user bank stored by an earlier FM-106 build can still be present and readable in Beta4; the bank risks listed here, if any, apply if it exists. FM-106 Beta4’s new user-sound edits are only in memory: panel save, delete and librarian bank commit do not store them, even when they report success. Read the unit into the librarian and export both user banks before switching or powering off; those exports omit sequence notes, locks and extended controls."
    ],
    "owner_text": "At risk by itself: octave, last selected preset and MIDI preferences. At risk by itself, under a condition: older stored user bank, if present (Beta4 does not store new edits). A valid user bank stored by an earlier FM-106 build can still be present and readable in Beta4; the bank risks listed here, if any, apply if it exists. FM-106 Beta4’s new user-sound edits are only in memory: panel save, delete and librarian bank commit do not store them, even when they report success. Read the unit into the librarian and export both user banks before switching or powering off; those exports omit sequence notes, locks and extended controls.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "hortator",
    "name": "Hortator",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings and panel calibration",
      "effect": "converted: Skiff imports the old preferences, then writes its newer settings format by itself at first start. Returning to Hortator cannot read that newest record: settings, panel calibration and the remembered Bluetooth device start from defaults; it does not retry the older copy",
      "ways": [
       {
        "way": "by itself at its first start",
        "effect": "converted: Skiff imports the old preferences, then writes its newer settings format by itself at first start. Returning to Hortator cannot read that newest record: settings, panel calibration and the remembered Bluetooth device start from defaults; it does not retry the older copy"
       },
       {
        "way": "by itself as you use it",
        "effect": "converted: Skiff imports the old preferences, then writes its newer settings format by itself at first start. Returning to Hortator cannot read that newest record: settings, panel calibration and the remembered Bluetooth device start from defaults; it does not retry the older copy"
       },
       {
        "way": "when you calibrate the panel or change editor preferences (no question)",
        "effect": "converted: Skiff imports the old preferences, then writes its newer settings format by itself at first start. Returning to Hortator cannot read that newest record: settings, panel calibration and the remembered Bluetooth device start from defaults; it does not retry the older copy"
       },
       {
        "way": "when you confirm RESET SETTINGS (it asks or arms a second turn first)",
        "effect": "converted: Skiff imports the old preferences, then writes its newer settings format by itself at first start. Returning to Hortator cannot read that newest record: settings, panel calibration and the remembered Bluetooth device start from defaults; it does not retry the older copy"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "converted: Skiff imports the old preferences, then writes its newer settings format by itself at first start. Returning to Hortator cannot read that newest record: settings, panel calibration and the remembered Bluetooth device start from defaults; it does not retry the older copy"
       }
      ]
     },
     {
      "object": "project A",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a readable old Felucca/Skiff project needs migration, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you SAVE AS from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project through the browser’s legacy command (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project B",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a readable old Felucca/Skiff project needs migration, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you SAVE AS from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project through the browser’s legacy command (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project C",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a readable old Felucca/Skiff project needs migration, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you SAVE AS from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project through the browser’s legacy command (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project D",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a readable old Felucca/Skiff project needs migration, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you SAVE AS from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project through the browser’s legacy command (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "user samples USR1 (sample loop and slice behaviour follow this reader’s engines)",
     "user samples USR2 (sample loop and slice behaviour follow this reader’s engines)",
     "user samples USR3 (sample loop and slice behaviour follow this reader’s engines)"
    ],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings and panel calibration (converted: Skiff imports the old preferences, then writes its newer settings format by itself at first start. Returning to Hortator cannot read that newest record: settings, panel calibration and the remembered Bluetooth device start from defaults; it does not retry the older copy). At risk by itself, under a condition: project A; project B; project C; project D. Carried over: user samples USR1 (sample loop and slice behaviour follow this reader’s engines); user samples USR2 (sample loop and slice behaviour follow this reader’s engines); user samples USR3 (sample loop and slice behaviour follow this reader’s engines).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "obervave",
    "name": "OberVave",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "pattern 1",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself at its first start [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a readable old project needs pattern migration",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel or change editor preferences (no question) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you confirm RESET SETTINGS (it asks or arms a second turn first) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you confirm clearing a pattern or song entry (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you copy or change an entry’s pattern (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (no question)",
        "effect": "lost"
       }
      ],
      "first_way_effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
     },
     {
      "object": "pattern 2",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself at its first start [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a readable old project needs pattern migration",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel or change editor preferences (no question) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you confirm RESET SETTINGS (it asks or arms a second turn first) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you confirm clearing a pattern or song entry (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you copy or change an entry’s pattern (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (no question)",
        "effect": "lost"
       }
      ],
      "first_way_effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
     },
     {
      "object": "pattern 3",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself at its first start [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a readable old project needs pattern migration",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel or change editor preferences (no question) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you confirm RESET SETTINGS (it asks or arms a second turn first) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you confirm clearing a pattern or song entry (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you copy or change an entry’s pattern (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (no question)",
        "effect": "lost"
       }
      ],
      "first_way_effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
     },
     {
      "object": "pattern 4",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself at its first start [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a readable old project needs pattern migration",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel or change editor preferences (no question) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you confirm RESET SETTINGS (it asks or arms a second turn first) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you confirm clearing a pattern or song entry (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you copy or change an entry’s pattern (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (no question)",
        "effect": "lost"
       }
      ],
      "first_way_effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
     },
     {
      "object": "pattern 5",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself at its first start [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a readable old project needs pattern migration",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel or change editor preferences (no question) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you confirm RESET SETTINGS (it asks or arms a second turn first) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you confirm clearing a pattern or song entry (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you copy or change an entry’s pattern (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (no question)",
        "effect": "lost"
       }
      ],
      "first_way_effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
     },
     {
      "object": "pattern 6",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself at its first start [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a readable old project needs pattern migration",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel or change editor preferences (no question) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you confirm RESET SETTINGS (it asks or arms a second turn first) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you confirm clearing a pattern or song entry (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you copy or change an entry’s pattern (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (no question)",
        "effect": "lost"
       }
      ],
      "first_way_effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
     },
     {
      "object": "pattern 7",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself at its first start [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a readable old project needs pattern migration",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel or change editor preferences (no question) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you confirm RESET SETTINGS (it asks or arms a second turn first) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you confirm clearing a pattern or song entry (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you copy or change an entry’s pattern (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (no question)",
        "effect": "lost"
       }
      ],
      "first_way_effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
     },
     {
      "object": "pattern 8",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself at its first start [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a readable old project needs pattern migration",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel or change editor preferences (no question) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you confirm RESET SETTINGS (it asks or arms a second turn first) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you confirm clearing a pattern or song entry (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you copy or change an entry’s pattern (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (no question)",
        "effect": "lost"
       }
      ],
      "first_way_effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
     },
     {
      "object": "saved programs and global settings",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself at its first start",
        "effect": "lost"
       },
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel or change editor preferences (no question)",
        "effect": "lost"
       },
       {
        "way": "when you confirm RESET SETTINGS (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: pattern 1 (its B-track sound can change if it uses a saved program; its pattern notes remain; other writes can also erase it); pattern 2 (its B-track sound can change if it uses a saved program; its pattern notes remain; other writes can also erase it); pattern 3 (its B-track sound can change if it uses a saved program; its pattern notes remain; other writes can also erase it); pattern 4 (its B-track sound can change if it uses a saved program; its pattern notes remain; other writes can also erase it); pattern 5 (its B-track sound can change if it uses a saved program; its pattern notes remain; other writes can also erase it); pattern 6 (its B-track sound can change if it uses a saved program; its pattern notes remain; other writes can also erase it); pattern 7 (its B-track sound can change if it uses a saved program; its pattern notes remain; other writes can also erase it); pattern 8 (its B-track sound can change if it uses a saved program; its pattern notes remain; other writes can also erase it); saved programs and global settings.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "polly",
    "name": "Polly",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "Optional QY70 style bank",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself as you use it (its RESTORE LAST is on by default)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if a readable old autosave needs migration and its patterns fit",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if a readable old project needs pattern migration",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you confirm clearing a pattern or song entry (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you copy or change an entry’s pattern (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you save, import, erase or rename a user sound (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a sound from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly setup and channel sounds",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself at its first start",
        "effect": "lost"
       },
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel or change editor preferences (no question)",
        "effect": "lost"
       },
       {
        "way": "when you confirm RESET SETTINGS (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "All four Polly songs",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a readable old Felucca/Skiff project needs migration, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you SAVE AS from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project through the browser’s legacy command (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 1",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a readable old Felucca/Skiff project needs migration, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you SAVE AS from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project through the browser’s legacy command (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 2",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a readable old Felucca/Skiff project needs migration, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you SAVE AS from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project through the browser’s legacy command (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 3",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a readable old Felucca/Skiff project needs migration, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you SAVE AS from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project through the browser’s legacy command (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 4",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a valid retired FM6 patch bank remains and no current patch object loads",
        "effect": "lost"
       },
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save an FM6 user sound (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store an FM6 sound from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write an FM6 patch to a user sound from the editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 11",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 13",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 14",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 15",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a sample upload in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly button and encoder calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save, import, erase or rename a user sound (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a sound from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: Optional QY70 style bank; Polly setup and channel sounds. At risk by itself, under a condition: All four Polly songs; Polly shared memory 1; Polly shared memory 2; Polly shared memory 3; Polly shared memory 4. At risk when you act: Polly shared memory 5; Polly shared memory 6; Polly shared memory 7; Polly shared memory 8; Polly shared memory 9; Polly shared memory 10; Polly shared memory 11; Polly shared memory 12; Polly shared memory 13; Polly shared memory 14; Polly shared memory 15; Polly shared memory 16; Polly button and encoder calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   }
  ],
  "when_you_leave": [
   {
    "to": "stock",
    "name": "Stock V15",
    "flags": "?",
    "weakest_grade": "reported",
    "at_risk": [],
    "possibly_at_risk": [
     "project A",
     "project B",
     "project C",
     "project D",
     "user sounds’ own FM6 patches",
     "user sample USR1",
     "user sample USR2",
     "user sample USR3",
     "user sound bank 1",
     "user sound bank 2",
     "last session",
     "shared 64-pattern pool"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "Possibly at risk (layout reported or inferred): project A; project B; project C; project D; user sounds’ own FM6 patches; user sample USR1; user sample USR2; user sample USR3; user sound bank 1; user sound bank 2; last session; shared 64-pattern pool.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "baudgirl",
    "name": "Baud Girl FM-1+VA",
    "flags": "?",
    "weakest_grade": "inferred",
    "at_risk": [],
    "possibly_at_risk": [
     "project A",
     "project B",
     "project C",
     "project D",
     "user sounds’ own FM6 patches",
     "user sample USR1",
     "user sample USR2",
     "user sample USR3",
     "user sound bank 1",
     "user sound bank 2",
     "last session",
     "shared 64-pattern pool"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "Possibly at risk (layout reported or inferred): project A; project B; project C; project D; user sounds’ own FM6 patches; user sample USR1; user sample USR2; user sample USR3; user sound bank 1; user sound bank 2; last session; shared 64-pattern pool.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "felucca",
    "name": "Felucca",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "last session",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it (its RESTORE LAST is on by default)",
        "effect": "lost"
       },
       {
        "way": "by itself, only if an earlier Felucca or GHOULBOX voice-bank upload survives and the saved bank is missing or older [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration and favourites",
      "effect": "changed by itself: Imports the shared 572-byte PER4 settings and panel calibration. Skiff stores CLOCK, MIDI IN and TUNE in preference bytes 18–20, PRESETS LIST in 21, HINTS OFF in 22, settings revision in 23, its scene-freed marker in 24, PERFORM KEYS in 25, LAUNCH in 26, SCREEN OFF in 27 and CLICK/FEEL in 28. Felucca reads bytes 18–23 as FX key assignments. The scene-freed marker turns SCOPE MIX, CHORD ENTRY ADD, SCREEN WAKE PANEL and beta 2ND CORE on, turns STEP PREVIEW and HELP off, and makes SELECT use BPM. Felucca starts its second core at the next power-on unless a prior failed boot blocks it; this was enabled by Skiff’s marker, not a new MENU choice. A failed render job or timeout later disables the core and queues a settings save; a failed initial handshake does not clear the saved choice. PERFORM KEYS becomes the LEDs-invert level, and LAUNCH becomes HOME. Import normalization can change preferences, and later settings saves persist the resulting interpretation; also, Skiff’s migration marker enables Felucca’s beta second core at startup; some other shared preference bytes also have different meanings",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "changed by itself: Imports the shared 572-byte PER4 settings and panel calibration. Skiff stores CLOCK, MIDI IN and TUNE in preference bytes 18–20, PRESETS LIST in 21, HINTS OFF in 22, settings revision in 23, its scene-freed marker in 24, PERFORM KEYS in 25, LAUNCH in 26, SCREEN OFF in 27 and CLICK/FEEL in 28. Felucca reads bytes 18–23 as FX key assignments. The scene-freed marker turns SCOPE MIX, CHORD ENTRY ADD, SCREEN WAKE PANEL and beta 2ND CORE on, turns STEP PREVIEW and HELP off, and makes SELECT use BPM. Felucca starts its second core at the next power-on unless a prior failed boot blocks it; this was enabled by Skiff’s marker, not a new MENU choice. A failed render job or timeout later disables the core and queues a settings save; a failed initial handshake does not clear the saved choice. PERFORM KEYS becomes the LEDs-invert level, and LAUNCH becomes HOME. Import normalization can change preferences, and later settings saves persist the resulting interpretation; also, Skiff’s migration marker enables Felucca’s beta second core at startup; some other shared preference bytes also have different meanings"
       },
       {
        "way": "by itself, only if a render job fails or times out (Skiff’s settings marker turns Felucca’s beta 2ND CORE on at startup)",
        "effect": "changed by itself: Imports the shared 572-byte PER4 settings and panel calibration. Skiff stores CLOCK, MIDI IN and TUNE in preference bytes 18–20, PRESETS LIST in 21, HINTS OFF in 22, settings revision in 23, its scene-freed marker in 24, PERFORM KEYS in 25, LAUNCH in 26, SCREEN OFF in 27 and CLICK/FEEL in 28. Felucca reads bytes 18–23 as FX key assignments. The scene-freed marker turns SCOPE MIX, CHORD ENTRY ADD, SCREEN WAKE PANEL and beta 2ND CORE on, turns STEP PREVIEW and HELP off, and makes SELECT use BPM. Felucca starts its second core at the next power-on unless a prior failed boot blocks it; this was enabled by Skiff’s marker, not a new MENU choice. A failed render job or timeout later disables the core and queues a settings save; a failed initial handshake does not clear the saved choice. PERFORM KEYS becomes the LEDs-invert level, and LAUNCH becomes HOME. Import normalization can change preferences, and later settings saves persist the resulting interpretation; also, Skiff’s migration marker enables Felucca’s beta second core at startup; some other shared preference bytes also have different meanings"
       },
       {
        "way": "when you erase a user preset (it asks or arms a second turn first)",
        "effect": "changed by itself: Imports the shared 572-byte PER4 settings and panel calibration. Skiff stores CLOCK, MIDI IN and TUNE in preference bytes 18–20, PRESETS LIST in 21, HINTS OFF in 22, settings revision in 23, its scene-freed marker in 24, PERFORM KEYS in 25, LAUNCH in 26, SCREEN OFF in 27 and CLICK/FEEL in 28. Felucca reads bytes 18–23 as FX key assignments. The scene-freed marker turns SCOPE MIX, CHORD ENTRY ADD, SCREEN WAKE PANEL and beta 2ND CORE on, turns STEP PREVIEW and HELP off, and makes SELECT use BPM. Felucca starts its second core at the next power-on unless a prior failed boot blocks it; this was enabled by Skiff’s marker, not a new MENU choice. A failed render job or timeout later disables the core and queues a settings save; a failed initial handshake does not clear the saved choice. PERFORM KEYS becomes the LEDs-invert level, and LAUNCH becomes HOME. Import normalization can change preferences, and later settings saves persist the resulting interpretation; also, Skiff’s migration marker enables Felucca’s beta second core at startup; some other shared preference bytes also have different meanings"
       },
       {
        "way": "when you learn MIDI CCs (no question)",
        "effect": "changed by itself: Imports the shared 572-byte PER4 settings and panel calibration. Skiff stores CLOCK, MIDI IN and TUNE in preference bytes 18–20, PRESETS LIST in 21, HINTS OFF in 22, settings revision in 23, its scene-freed marker in 24, PERFORM KEYS in 25, LAUNCH in 26, SCREEN OFF in 27 and CLICK/FEEL in 28. Felucca reads bytes 18–23 as FX key assignments. The scene-freed marker turns SCOPE MIX, CHORD ENTRY ADD, SCREEN WAKE PANEL and beta 2ND CORE on, turns STEP PREVIEW and HELP off, and makes SELECT use BPM. Felucca starts its second core at the next power-on unless a prior failed boot blocks it; this was enabled by Skiff’s marker, not a new MENU choice. A failed render job or timeout later disables the core and queues a settings save; a failed initial handshake does not clear the saved choice. PERFORM KEYS becomes the LEDs-invert level, and LAUNCH becomes HOME. Import normalization can change preferences, and later settings saves persist the resulting interpretation; also, Skiff’s migration marker enables Felucca’s beta second core at startup; some other shared preference bytes also have different meanings"
       },
       {
        "way": "when you restore a backup from the web editor",
        "effect": "changed by itself: Imports the shared 572-byte PER4 settings and panel calibration. Skiff stores CLOCK, MIDI IN and TUNE in preference bytes 18–20, PRESETS LIST in 21, HINTS OFF in 22, settings revision in 23, its scene-freed marker in 24, PERFORM KEYS in 25, LAUNCH in 26, SCREEN OFF in 27 and CLICK/FEEL in 28. Felucca reads bytes 18–23 as FX key assignments. The scene-freed marker turns SCOPE MIX, CHORD ENTRY ADD, SCREEN WAKE PANEL and beta 2ND CORE on, turns STEP PREVIEW and HELP off, and makes SELECT use BPM. Felucca starts its second core at the next power-on unless a prior failed boot blocks it; this was enabled by Skiff’s marker, not a new MENU choice. A failed render job or timeout later disables the core and queues a settings save; a failed initial handshake does not clear the saved choice. PERFORM KEYS becomes the LEDs-invert level, and LAUNCH becomes HOME. Import normalization can change preferences, and later settings saves persist the resulting interpretation; also, Skiff’s migration marker enables Felucca’s beta second core at startup; some other shared preference bytes also have different meanings"
       },
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "changed by itself: Imports the shared 572-byte PER4 settings and panel calibration. Skiff stores CLOCK, MIDI IN and TUNE in preference bytes 18–20, PRESETS LIST in 21, HINTS OFF in 22, settings revision in 23, its scene-freed marker in 24, PERFORM KEYS in 25, LAUNCH in 26, SCREEN OFF in 27 and CLICK/FEEL in 28. Felucca reads bytes 18–23 as FX key assignments. The scene-freed marker turns SCOPE MIX, CHORD ENTRY ADD, SCREEN WAKE PANEL and beta 2ND CORE on, turns STEP PREVIEW and HELP off, and makes SELECT use BPM. Felucca starts its second core at the next power-on unless a prior failed boot blocks it; this was enabled by Skiff’s marker, not a new MENU choice. A failed render job or timeout later disables the core and queues a settings save; a failed initial handshake does not clear the saved choice. PERFORM KEYS becomes the LEDs-invert level, and LAUNCH becomes HOME. Import normalization can change preferences, and later settings saves persist the resulting interpretation; also, Skiff’s migration marker enables Felucca’s beta second core at startup; some other shared preference bytes also have different meanings"
       },
       {
        "way": "when you send data from the web editor",
        "effect": "changed by itself: Imports the shared 572-byte PER4 settings and panel calibration. Skiff stores CLOCK, MIDI IN and TUNE in preference bytes 18–20, PRESETS LIST in 21, HINTS OFF in 22, settings revision in 23, its scene-freed marker in 24, PERFORM KEYS in 25, LAUNCH in 26, SCREEN OFF in 27 and CLICK/FEEL in 28. Felucca reads bytes 18–23 as FX key assignments. The scene-freed marker turns SCOPE MIX, CHORD ENTRY ADD, SCREEN WAKE PANEL and beta 2ND CORE on, turns STEP PREVIEW and HELP off, and makes SELECT use BPM. Felucca starts its second core at the next power-on unless a prior failed boot blocks it; this was enabled by Skiff’s marker, not a new MENU choice. A failed render job or timeout later disables the core and queues a settings save; a failed initial handshake does not clear the saved choice. PERFORM KEYS becomes the LEDs-invert level, and LAUNCH becomes HOME. Import normalization can change preferences, and later settings saves persist the resulting interpretation; also, Skiff’s migration marker enables Felucca’s beta second core at startup; some other shared preference bytes also have different meanings"
       }
      ]
     },
     {
      "object": "project A",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if an earlier Felucca or GHOULBOX voice-bank upload survives and the saved bank is missing or older [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor [through its shared pattern pool]",
        "effect": "some or all of it lost"
       }
      ]
     },
     {
      "object": "project B",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if an earlier Felucca or GHOULBOX voice-bank upload survives and the saved bank is missing or older [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor [through its shared pattern pool]",
        "effect": "some or all of it lost"
       }
      ]
     },
     {
      "object": "project C",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if an earlier Felucca or GHOULBOX voice-bank upload survives and the saved bank is missing or older [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor [through its shared pattern pool]",
        "effect": "some or all of it lost"
       }
      ]
     },
     {
      "object": "project D",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if an earlier Felucca or GHOULBOX voice-bank upload survives and the saved bank is missing or older [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor [through its shared pattern pool]",
        "effect": "some or all of it lost"
       }
      ]
     },
     {
      "object": "shared 64-pattern pool",
      "effect": "some or all of it lost",
      "ways": [
       {
        "way": "by itself, only if an earlier Felucca or GHOULBOX voice-bank upload survives and the saved bank is missing or older",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor",
        "effect": "some or all of it lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "user sounds’ own FM6 patches (each patch must still match its FM6 user record)",
     "user sample USR1 (sample loop and slice behaviour follow this reader’s engines)",
     "user sample USR2 (sample loop and slice behaviour follow this reader’s engines)",
     "user sample USR3 (sample loop and slice behaviour follow this reader’s engines)",
     "user sound bank 1 (DRUM-X sounds are empty or a different engine; shared names do not guarantee shared sound)",
     "user sound bank 2 (DRUM-X sounds are empty or a different engine; shared names do not guarantee shared sound)"
    ],
    "kept_unseen": [],
    "notes": [
     "Skiff’s default RESTORE LAST ON leaves Felucca’s autosave ON; a saved Skiff OFF choice leaves it OFF.",
     "Skiff’s scene-freed marker enables Felucca’s beta 2ND CORE at startup unless boot-failure protection blocks the core; a later bad render or timeout can write these settings automatically. The owner need not turn it on."
    ],
    "owner_text": "At risk by itself: last session; settings, calibration and favourites (changed by itself: Imports the shared 572-byte PER4 settings and panel calibration. Skiff stores CLOCK, MIDI IN and TUNE in preference bytes 18–20, PRESETS LIST in 21, HINTS OFF in 22, settings revision in 23, its scene-freed marker in 24, PERFORM KEYS in 25, LAUNCH in 26, SCREEN OFF in 27 and CLICK/FEEL in 28. Felucca reads bytes 18–23 as FX key assignments. The scene-freed marker turns SCOPE MIX, CHORD ENTRY ADD, SCREEN WAKE PANEL and beta 2ND CORE on, turns STEP PREVIEW and HELP off, and makes SELECT use BPM. Felucca starts its second core at the next power-on unless a prior failed boot blocks it; this was enabled by Skiff’s marker, not a new MENU choice. A failed render job or timeout later disables the core and queues a settings save; a failed initial handshake does not clear the saved choice. PERFORM KEYS becomes the LEDs-invert level, and LAUNCH becomes HOME. Import normalization can change preferences, and later settings saves persist the resulting interpretation; also, Skiff’s migration marker enables Felucca’s beta second core at startup; some other shared preference bytes also have different meanings). At risk by itself, under a condition: project A; project B; project C; project D; shared 64-pattern pool (some or all of it lost). Carried over: user sounds’ own FM6 patches (each patch must still match its FM6 user record); user sample USR1 (sample loop and slice behaviour follow this reader’s engines); user sample USR2 (sample loop and slice behaviour follow this reader’s engines); user sample USR3 (sample loop and slice behaviour follow this reader’s engines); user sound bank 1 (DRUM-X sounds are empty or a different engine; shared names do not guarantee shared sound); user sound bank 2 (DRUM-X sounds are empty or a different engine; shared names do not guarantee shared sound). Skiff’s default RESTORE LAST ON leaves Felucca’s autosave ON; a saved Skiff OFF choice leaves it OFF. Skiff’s scene-freed marker enables Felucca’s beta 2ND CORE at startup unless boot-failure protection blocks the core; a later bad render or timeout can write these settings automatically. The owner need not turn it on.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "sloop",
    "name": "SLOOP",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "user sounds’ own FM6 patches",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself at its first start",
        "effect": "lost"
       },
       {
        "way": "when you load a song file or a LIVE playlist song (no question)",
        "effect": "lost"
       },
       {
        "way": "when you start an update (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sound bank 1",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself at its first start [through its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you load a song file or a LIVE playlist song (no question) [through its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you start an update (no question) [through its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       }
      ],
      "first_way_effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
     },
     {
      "object": "user sound bank 2",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself at its first start [through its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you load a song file or a LIVE playlist song (no question) [through its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you start an update (no question) [through its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       }
      ],
      "first_way_effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
     },
     {
      "object": "settings, calibration and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you load a song file or a LIVE playlist song (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (no question)",
        "effect": "lost"
       },
       {
        "way": "when you send or remove a theme from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you send the song from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (no question)",
        "effect": "lost"
       },
       {
        "way": "when you store drum kits from the web editor (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (it asks or arms a second turn first) [through its shared pattern pool]",
        "effect": "lost"
       },
       {
        "way": "when you load a song file or a LIVE playlist song (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (no question)",
        "effect": "lost"
       },
       {
        "way": "when you store a section from the web editor LIVE page (no question)",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops (it asks or arms a second turn first) [through its shared pattern pool]",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (it asks or arms a second turn first) [through its shared pattern pool]",
        "effect": "lost"
       },
       {
        "way": "when you load a song file or a LIVE playlist song (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (no question)",
        "effect": "lost"
       },
       {
        "way": "when you store a section from the web editor LIVE page (no question)",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops (it asks or arms a second turn first) [through its shared pattern pool]",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (it asks or arms a second turn first) [through its shared pattern pool]",
        "effect": "lost"
       },
       {
        "way": "when you load a song file or a LIVE playlist song (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (no question)",
        "effect": "lost"
       },
       {
        "way": "when you store a section from the web editor LIVE page (no question)",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops (it asks or arms a second turn first) [through its shared pattern pool]",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (it asks or arms a second turn first) [through its shared pattern pool]",
        "effect": "lost"
       },
       {
        "way": "when you load a song file or a LIVE playlist song (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (no question)",
        "effect": "lost"
       },
       {
        "way": "when you store a section from the web editor LIVE page (no question)",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops (it asks or arms a second turn first) [through its shared pattern pool]",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "last session",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (it asks or arms a second turn first) [through its shared pattern pool]",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops (it asks or arms a second turn first) [through its shared pattern pool]",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared 64-pattern pool",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "user sample USR1 (sample loop and slice behaviour follow this reader’s engines)",
     "user sample USR2 (sample loop and slice behaviour follow this reader’s engines)",
     "user sample USR3 (sample loop and slice behaviour follow this reader’s engines)"
    ],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: user sounds’ own FM6 patches; user sound bank 1 (only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain; other writes can also erase it); user sound bank 2 (only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain; other writes can also erase it); settings, calibration and favourites. At risk when you act: project A; project B; project C; project D; last session; shared 64-pattern pool. Carried over: user sample USR1 (sample loop and slice behaviour follow this reader’s engines); user sample USR2 (sample loop and slice behaviour follow this reader’s engines); user sample USR3 (sample loop and slice behaviour follow this reader’s engines).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "x0x",
    "name": "X0X",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "project A",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you back up pending project edits over USB (no question)",
        "effect": "lost"
       },
       {
        "way": "when you do a factory reset (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB restore (staging erases before the device question) (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project B",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you back up pending project edits over USB (no question)",
        "effect": "lost"
       },
       {
        "way": "when you do a factory reset (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB restore (staging erases before the device question) (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project C",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you back up pending project edits over USB (no question)",
        "effect": "lost"
       },
       {
        "way": "when you do a factory reset (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB restore (staging erases before the device question) (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project D",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you back up pending project edits over USB (no question)",
        "effect": "lost"
       },
       {
        "way": "when you do a factory reset (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB restore (staging erases before the device question) (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sound bank 2",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you back up pending project edits over USB (no question)",
        "effect": "lost"
       },
       {
        "way": "when you do a factory reset (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB restore (staging erases before the device question) (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "by itself, only after a retained second-core failure, if two cores were enabled",
        "effect": "lost"
       },
       {
        "way": "when you back up pending project edits over USB (no question)",
        "effect": "lost"
       },
       {
        "way": "when you do a factory reset (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB restore (staging erases before the device question) (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sound bank 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "user sample USR1 (Sample bytes carry over; X0X uses its own zone and break-loop playback rather than Skiff’s sound and hand-set slice behaviour)",
     "user sample USR2 (Sample bytes carry over; X0X uses its own zone and break-loop playback rather than Skiff’s sound and hand-set slice behaviour)",
     "user sample USR3 (Sample bytes carry over; X0X uses its own zone and break-loop playback rather than Skiff’s sound and hand-set slice behaviour)"
    ],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: project A; project B; project C; project D; user sound bank 2; settings, calibration and favourites. At risk when you act: user sound bank 1. Carried over: user sample USR1 (Sample bytes carry over; X0X uses its own zone and break-loop playback rather than Skiff’s sound and hand-set slice behaviour); user sample USR2 (Sample bytes carry over; X0X uses its own zone and break-loop playback rather than Skiff’s sound and hand-set slice behaviour); user sample USR3 (Sample bytes carry over; X0X uses its own zone and break-loop playback rather than Skiff’s sound and hand-set slice behaviour).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "jiant",
    "name": "JIANT",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "user sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you make a multi-section song with GEN (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you select a song through MIDI PROGRAM CHANGE (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you store a section (no question)",
        "effect": "lost"
       },
       {
        "way": "when you switch song or project (no question)",
        "effect": "damaged (part of it written over)"
       }
      ]
     },
     {
      "object": "settings, calibration and favourites",
      "effect": "changed by itself: Imports the shared 572-byte PER4 settings and panel calibration. Skiff stores CLOCK, MIDI IN and TUNE in preference bytes 18–20, PRESETS LIST in 21, HINTS OFF in 22, settings revision in 23, its scene-freed marker in 24, PERFORM KEYS in 25, LAUNCH in 26, SCREEN OFF in 27 and CLICK/FEEL in 28. JIANT interprets KNOB ACCEL and RESTORE LAST with the opposite meaning: Skiff’s default RESTORE LAST ON becomes OFF. Bytes 21 and 22 become USB STEMS and USB LEVEL; unsupported values reset to stereo and FULL. JIANT resets the scene-freed marker in byte 24 to MIDI OUT KEYS, replaces byte 23 with its palette marker, uses byte 25 as its settings revision and byte 26 as LOAD. Its first-start FX LATCH update can set the revision to 2. These shared preference meanings differ even when the record imports successfully; also, shared settings bytes select different preferences",
      "ways": [
       {
        "way": "by itself at its first start",
        "effect": "changed by itself: Imports the shared 572-byte PER4 settings and panel calibration. Skiff stores CLOCK, MIDI IN and TUNE in preference bytes 18–20, PRESETS LIST in 21, HINTS OFF in 22, settings revision in 23, its scene-freed marker in 24, PERFORM KEYS in 25, LAUNCH in 26, SCREEN OFF in 27 and CLICK/FEEL in 28. JIANT interprets KNOB ACCEL and RESTORE LAST with the opposite meaning: Skiff’s default RESTORE LAST ON becomes OFF. Bytes 21 and 22 become USB STEMS and USB LEVEL; unsupported values reset to stereo and FULL. JIANT resets the scene-freed marker in byte 24 to MIDI OUT KEYS, replaces byte 23 with its palette marker, uses byte 25 as its settings revision and byte 26 as LOAD. Its first-start FX LATCH update can set the revision to 2. These shared preference meanings differ even when the record imports successfully; also, shared settings bytes select different preferences"
       },
       {
        "way": "by itself as you use it",
        "effect": "changed by itself: Imports the shared 572-byte PER4 settings and panel calibration. Skiff stores CLOCK, MIDI IN and TUNE in preference bytes 18–20, PRESETS LIST in 21, HINTS OFF in 22, settings revision in 23, its scene-freed marker in 24, PERFORM KEYS in 25, LAUNCH in 26, SCREEN OFF in 27 and CLICK/FEEL in 28. JIANT interprets KNOB ACCEL and RESTORE LAST with the opposite meaning: Skiff’s default RESTORE LAST ON becomes OFF. Bytes 21 and 22 become USB STEMS and USB LEVEL; unsupported values reset to stereo and FULL. JIANT resets the scene-freed marker in byte 24 to MIDI OUT KEYS, replaces byte 23 with its palette marker, uses byte 25 as its settings revision and byte 26 as LOAD. Its first-start FX LATCH update can set the revision to 2. These shared preference meanings differ even when the record imports successfully; also, shared settings bytes select different preferences"
       },
       {
        "way": "when you change settings from the web editor (no question)",
        "effect": "changed by itself: Imports the shared 572-byte PER4 settings and panel calibration. Skiff stores CLOCK, MIDI IN and TUNE in preference bytes 18–20, PRESETS LIST in 21, HINTS OFF in 22, settings revision in 23, its scene-freed marker in 24, PERFORM KEYS in 25, LAUNCH in 26, SCREEN OFF in 27 and CLICK/FEEL in 28. JIANT interprets KNOB ACCEL and RESTORE LAST with the opposite meaning: Skiff’s default RESTORE LAST ON becomes OFF. Bytes 21 and 22 become USB STEMS and USB LEVEL; unsupported values reset to stereo and FULL. JIANT resets the scene-freed marker in byte 24 to MIDI OUT KEYS, replaces byte 23 with its palette marker, uses byte 25 as its settings revision and byte 26 as LOAD. Its first-start FX LATCH update can set the revision to 2. These shared preference meanings differ even when the record imports successfully; also, shared settings bytes select different preferences"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "changed by itself: Imports the shared 572-byte PER4 settings and panel calibration. Skiff stores CLOCK, MIDI IN and TUNE in preference bytes 18–20, PRESETS LIST in 21, HINTS OFF in 22, settings revision in 23, its scene-freed marker in 24, PERFORM KEYS in 25, LAUNCH in 26, SCREEN OFF in 27 and CLICK/FEEL in 28. JIANT interprets KNOB ACCEL and RESTORE LAST with the opposite meaning: Skiff’s default RESTORE LAST ON becomes OFF. Bytes 21 and 22 become USB STEMS and USB LEVEL; unsupported values reset to stereo and FULL. JIANT resets the scene-freed marker in byte 24 to MIDI OUT KEYS, replaces byte 23 with its palette marker, uses byte 25 as its settings revision and byte 26 as LOAD. Its first-start FX LATCH update can set the revision to 2. These shared preference meanings differ even when the record imports successfully; also, shared settings bytes select different preferences"
       },
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "changed by itself: Imports the shared 572-byte PER4 settings and panel calibration. Skiff stores CLOCK, MIDI IN and TUNE in preference bytes 18–20, PRESETS LIST in 21, HINTS OFF in 22, settings revision in 23, its scene-freed marker in 24, PERFORM KEYS in 25, LAUNCH in 26, SCREEN OFF in 27 and CLICK/FEEL in 28. JIANT interprets KNOB ACCEL and RESTORE LAST with the opposite meaning: Skiff’s default RESTORE LAST ON becomes OFF. Bytes 21 and 22 become USB STEMS and USB LEVEL; unsupported values reset to stereo and FULL. JIANT resets the scene-freed marker in byte 24 to MIDI OUT KEYS, replaces byte 23 with its palette marker, uses byte 25 as its settings revision and byte 26 as LOAD. Its first-start FX LATCH update can set the revision to 2. These shared preference meanings differ even when the record imports successfully; also, shared settings bytes select different preferences"
       },
       {
        "way": "when you star a favourite (no question)",
        "effect": "changed by itself: Imports the shared 572-byte PER4 settings and panel calibration. Skiff stores CLOCK, MIDI IN and TUNE in preference bytes 18–20, PRESETS LIST in 21, HINTS OFF in 22, settings revision in 23, its scene-freed marker in 24, PERFORM KEYS in 25, LAUNCH in 26, SCREEN OFF in 27 and CLICK/FEEL in 28. JIANT interprets KNOB ACCEL and RESTORE LAST with the opposite meaning: Skiff’s default RESTORE LAST ON becomes OFF. Bytes 21 and 22 become USB STEMS and USB LEVEL; unsupported values reset to stereo and FULL. JIANT resets the scene-freed marker in byte 24 to MIDI OUT KEYS, replaces byte 23 with its palette marker, uses byte 25 as its settings revision and byte 26 as LOAD. Its first-start FX LATCH update can set the revision to 2. These shared preference meanings differ even when the record imports successfully; also, shared settings bytes select different preferences"
       }
      ]
     },
     {
      "object": "project A",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if it ran on this unit before and its staged voice bank survived [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you make a multi-section song with GEN (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor (no question) [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you store a section (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project B",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if it ran on this unit before and its staged voice bank survived [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you make a multi-section song with GEN (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor (no question) [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you store a section (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project C",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if it ran on this unit before and its staged voice bank survived [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you make a multi-section song with GEN (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor (no question) [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you store a section (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project D",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if it ran on this unit before and its staged voice bank survived [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you make a multi-section song with GEN (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor (no question) [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you store a section (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "last session",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if it ran on this unit before and its staged voice bank survived [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "by itself, only if its RESTORE LAST is on",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared 64-pattern pool",
      "effect": "some or all of it lost",
      "ways": [
       {
        "way": "by itself, only if it ran on this unit before and its staged voice bank survived",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor (no question)",
        "effect": "some or all of it lost"
       }
      ]
     },
     {
      "object": "user sounds’ own FM6 patches",
      "effect": "converted when read, written back at your next save in that bank; The own-patch link is lost when JIANT converts an unmarked Skiff sound; writing that bank makes the broken link persist back in Skiff",
      "ways": [
       {
        "way": "when you erase a slot (it asks or arms a second turn about the target slot only; it rewrites the whole bank) [through its associated sound bank]",
        "effect": "converted when read, written back at your next save in that bank; The own-patch link is lost when JIANT converts an unmarked Skiff sound; writing that bank makes the broken link persist back in Skiff"
       },
       {
        "way": "when you rename a slot (no question; it rewrites the whole bank) [through its associated sound bank]",
        "effect": "converted when read, written back at your next save in that bank; The own-patch link is lost when JIANT converts an unmarked Skiff sound; writing that bank makes the broken link persist back in Skiff"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "converted when read, written back at your next save in that bank; The own-patch link is lost when JIANT converts an unmarked Skiff sound; writing that bank makes the broken link persist back in Skiff"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first) [through its associated sound bank]",
        "effect": "converted when read, written back at your next save in that bank; The own-patch link is lost when JIANT converts an unmarked Skiff sound; writing that bank makes the broken link persist back in Skiff"
       },
       {
        "way": "when you save a user preset (no question when the target slot is empty; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank; The own-patch link is lost when JIANT converts an unmarked Skiff sound; writing that bank makes the broken link persist back in Skiff"
       },
       {
        "way": "when you save a user preset (no question when the target slot is empty; it rewrites the whole bank) [through its associated sound bank]",
        "effect": "converted when read, written back at your next save in that bank; The own-patch link is lost when JIANT converts an unmarked Skiff sound; writing that bank makes the broken link persist back in Skiff"
       },
       {
        "way": "when you send data from the web editor (no question when the target slot is empty; it rewrites the whole bank) [through its associated sound bank]",
        "effect": "converted when read, written back at your next save in that bank; The own-patch link is lost when JIANT converts an unmarked Skiff sound; writing that bank makes the broken link persist back in Skiff"
       },
       {
        "way": "when you send data from the web editor (no question; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank; The own-patch link is lost when JIANT converts an unmarked Skiff sound; writing that bank makes the broken link persist back in Skiff"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you make a multi-section song with GEN (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you make a multi-section song with GEN (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sound bank 1",
      "effect": "converted when read, written back at your next save in that bank; Conversion changes sound records and can detach their own FM6 patches; saving anywhere in the bank makes the converted records persist on return to Skiff",
      "ways": [
       {
        "way": "when you erase a slot (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank; Conversion changes sound records and can detach their own FM6 patches; saving anywhere in the bank makes the converted records persist on return to Skiff"
       },
       {
        "way": "when you rename a slot (no question; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank; Conversion changes sound records and can detach their own FM6 patches; saving anywhere in the bank makes the converted records persist on return to Skiff"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "converted when read, written back at your next save in that bank; Conversion changes sound records and can detach their own FM6 patches; saving anywhere in the bank makes the converted records persist on return to Skiff"
       },
       {
        "way": "when you save a user preset (no question when the target slot is empty; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank; Conversion changes sound records and can detach their own FM6 patches; saving anywhere in the bank makes the converted records persist on return to Skiff"
       },
       {
        "way": "when you send data from the web editor (no question when the target slot is empty; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank; Conversion changes sound records and can detach their own FM6 patches; saving anywhere in the bank makes the converted records persist on return to Skiff"
       },
       {
        "way": "when you send data from the web editor (no question; it rewrites the whole bank) [through its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       }
      ]
     },
     {
      "object": "user sound bank 2",
      "effect": "converted when read, written back at your next save in that bank; Conversion changes sound records and can detach their own FM6 patches; saving anywhere in the bank makes the converted records persist on return to Skiff",
      "ways": [
       {
        "way": "when you erase a slot (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank; Conversion changes sound records and can detach their own FM6 patches; saving anywhere in the bank makes the converted records persist on return to Skiff"
       },
       {
        "way": "when you rename a slot (no question; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank; Conversion changes sound records and can detach their own FM6 patches; saving anywhere in the bank makes the converted records persist on return to Skiff"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "converted when read, written back at your next save in that bank; Conversion changes sound records and can detach their own FM6 patches; saving anywhere in the bank makes the converted records persist on return to Skiff"
       },
       {
        "way": "when you save a user preset (no question when the target slot is empty; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank; Conversion changes sound records and can detach their own FM6 patches; saving anywhere in the bank makes the converted records persist on return to Skiff"
       },
       {
        "way": "when you send data from the web editor (no question when the target slot is empty; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank; Conversion changes sound records and can detach their own FM6 patches; saving anywhere in the bank makes the converted records persist on return to Skiff"
       },
       {
        "way": "when you send data from the web editor (no question; it rewrites the whole bank) [through its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Skiff’s default RESTORE LAST ON leaves JIANT’s autosave OFF; a saved Skiff RESTORE LAST OFF choice turns JIANT’s autosave ON."
    ],
    "owner_text": "At risk by itself: user sample USR3; settings, calibration and favourites (changed by itself: Imports the shared 572-byte PER4 settings and panel calibration. Skiff stores CLOCK, MIDI IN and TUNE in preference bytes 18–20, PRESETS LIST in 21, HINTS OFF in 22, settings revision in 23, its scene-freed marker in 24, PERFORM KEYS in 25, LAUNCH in 26, SCREEN OFF in 27 and CLICK/FEEL in 28. JIANT interprets KNOB ACCEL and RESTORE LAST with the opposite meaning: Skiff’s default RESTORE LAST ON becomes OFF. Bytes 21 and 22 become USB STEMS and USB LEVEL; unsupported values reset to stereo and FULL. JIANT resets the scene-freed marker in byte 24 to MIDI OUT KEYS, replaces byte 23 with its palette marker, uses byte 25 as its settings revision and byte 26 as LOAD. Its first-start FX LATCH update can set the revision to 2. These shared preference meanings differ even when the record imports successfully; also, shared settings bytes select different preferences). At risk by itself, under a condition: project A; project B; project C; project D; last session; shared 64-pattern pool (some or all of it lost). At risk when you act: user sounds’ own FM6 patches (converted when read, written back at your next save in that bank; The own-patch link is lost when JIANT converts an unmarked Skiff sound; writing that bank makes the broken link persist back in Skiff); user sample USR1; user sample USR2; user sound bank 1 (converted when read, written back at your next save in that bank; Conversion changes sound records and can detach their own FM6 patches; saving anywhere in the bank makes the converted records persist on return to Skiff); user sound bank 2 (converted when read, written back at your next save in that bank; Conversion changes sound records and can detach their own FM6 patches; saving anywhere in the bank makes the converted records persist on return to Skiff). Skiff’s default RESTORE LAST ON leaves JIANT’s autosave OFF; a saved Skiff RESTORE LAST OFF choice turns JIANT’s autosave ON.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "melodee",
    "name": "Melodee",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "user sound bank 1",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself at its first start",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a matching committed preset bank needs repair or conversion, or legacy Prophet conversion needs spill space [through its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "by itself, only if a previously confirmed user-preset wipe was interrupted",
        "effect": "lost"
       },
       {
        "way": "when you confirm recovery wipe of all user presets (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx into slots (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sound bank 2",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself at its first start",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a matching committed preset bank needs repair or conversion, or legacy Prophet conversion needs spill space [through its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "by itself, only if a previously confirmed user-preset wipe was interrupted",
        "effect": "lost"
       },
       {
        "way": "when you confirm recovery wipe of all user presets (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx into slots (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself at its first start",
        "effect": "lost"
       },
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you change a setting (no question)",
        "effect": "lost"
       },
       {
        "way": "when you change a setting in the menu (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a template (no question)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you star a favourite (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project A",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a matching committed preset bank needs repair or conversion, or legacy Prophet conversion needs spill space",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a previously confirmed user-preset wipe was interrupted",
        "effect": "lost"
       },
       {
        "way": "when you confirm recovery wipe of all user presets (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx into slots (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you quick-save a project (no question) [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you restore a backup from the web editor (no question) [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you restore a backup from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question) [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you save a project from the web editor (no question) [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you save a user preset (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project B",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a matching committed preset bank needs repair or conversion, or legacy Prophet conversion needs spill space",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a previously confirmed user-preset wipe was interrupted",
        "effect": "lost"
       },
       {
        "way": "when you confirm recovery wipe of all user presets (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx into slots (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you quick-save a project (no question) [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you restore a backup from the web editor (no question) [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you restore a backup from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question) [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you save a project from the web editor (no question) [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you save a user preset (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project C",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a matching committed preset bank needs repair or conversion, or legacy Prophet conversion needs spill space",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a previously confirmed user-preset wipe was interrupted",
        "effect": "lost"
       },
       {
        "way": "when you confirm recovery wipe of all user presets (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx into slots (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you quick-save a project (no question) [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you restore a backup from the web editor (no question) [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you restore a backup from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question) [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you save a project from the web editor (no question) [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you save a user preset (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project D",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a matching committed preset bank needs repair or conversion, or legacy Prophet conversion needs spill space",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a previously confirmed user-preset wipe was interrupted",
        "effect": "lost"
       },
       {
        "way": "when you confirm recovery wipe of all user presets (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx into slots (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you quick-save a project (no question) [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you restore a backup from the web editor (no question) [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you restore a backup from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore an older 28-object Melodee backup (clears U379-U384 first) (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question) [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you save a project from the web editor (no question) [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you save a user preset (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds’ own FM6 patches",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a matching committed preset bank needs repair or conversion, or legacy Prophet conversion needs spill space",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a previously confirmed user-preset wipe was interrupted",
        "effect": "lost"
       },
       {
        "way": "when you confirm recovery wipe of all user presets (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx into slots (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a matching committed preset bank needs repair or conversion, or legacy Prophet conversion needs spill space",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a previously confirmed user-preset wipe was interrupted",
        "effect": "lost"
       },
       {
        "way": "when you confirm recovery wipe of all user presets (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx into slots (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "last session",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a matching committed preset bank needs repair or conversion, or legacy Prophet conversion needs spill space",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a previously confirmed user-preset wipe was interrupted",
        "effect": "lost"
       },
       {
        "way": "when you confirm recovery wipe of all user presets (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx into slots (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you quick-save a project (no question) [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you restore a backup from the web editor (no question) [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you restore a backup from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question) [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you save a project from the web editor (no question) [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you save a user preset (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared 64-pattern pool",
      "effect": "some or all of it lost",
      "ways": [
       {
        "way": "by itself, only if a matching committed preset bank needs repair or conversion, or legacy Prophet conversion needs spill space",
        "effect": "some or all of it lost"
       },
       {
        "way": "by itself, only if a previously confirmed user-preset wipe was interrupted",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you confirm recovery wipe of all user presets (it asks or arms a second turn first)",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you import SysEx into slots (no question; it rewrites the whole bank)",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you quick-save a project (no question)",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you restore a backup from the web editor (no question)",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you restore a backup from the web editor (no question; it rewrites the whole bank)",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you save a project from the web editor (no question)",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you save a user preset (no question; it rewrites the whole bank)",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you send data from the web editor (no question; it rewrites the whole bank)",
        "effect": "some or all of it lost"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you quick-save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you quick-save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: user sound bank 1; user sound bank 2; settings, calibration and favourites. At risk by itself, under a condition: project A; project B; project C; project D; user sounds’ own FM6 patches; user sample USR3; last session; shared 64-pattern pool (some or all of it lost). At risk when you act: user sample USR1; user sample USR2.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "fomni",
    "name": "FoMni",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sound bank 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, calibration and favourites. At risk when you act: user sound bank 1.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "amb",
    "name": "AMB-1",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sound bank 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, calibration and favourites. At risk when you act: user sound bank 1.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "choralroot",
    "name": "ChoralRoot",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself at its first start",
        "effect": "lost"
       },
       {
        "way": "by itself as you use it",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if a save or failed boot preparation leaves its next spare unprepared",
        "effect": "lost"
       },
       {
        "way": "by itself, only if an older ChoralRoot favourites save survives and its next spare is not blank",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if an older ChoralRoot session save survives and its next spare is not blank",
        "effect": "lost"
       },
       {
        "way": "by itself, only if an older ChoralRoot sound-pool save survives and its next spare is not blank",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if no pool bank exists and at least one legacy UPB1/192 sound passes validation",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you choose Overwrite or Save as new and accept with OCT+ or SAVE (no question; it rewrites the whole bank)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm Reset Settings with OCT+ twice (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm deletion/reset with OCT+ (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you hold OCT- and OCT+ while switching on (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you hold SAVE for a global save (no question)",
        "effect": "lost"
       },
       {
        "way": "when you keep calibration or enter update with OCT- + OCT+ + HOME held for 5 s (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you request Import 0.21 sounds from the device manager (no question; it rewrites the whole bank)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore favourites from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore pool banks 50..62, or accepted legacy sound objects that are redirected into pool slots 1..32 from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore settings, which also writes an empty session record from backup software (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE after recording/editing/clearing this loop (no question)",
        "effect": "lost"
       },
       {
        "way": "when you press REC in Advance mode with a nonempty current loop (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore loop id 40; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore loop id 41; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore loop id 42; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore loop id 43; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore loop id 44; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore loop id 45; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore loop id 46; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore loop id 47; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore loop id 48; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore loop id 49; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "damaged (part of it written over)"
       }
      ]
     },
     {
      "object": "settings, calibration and favourites",
      "effect": "converted: After ChoralRoot saves these settings, Skiff cannot read back the newer record. Returning to Skiff starts its preferences and calibration from defaults; the older copy is not retried just because the newest record has a different format",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "converted: After ChoralRoot saves these settings, Skiff cannot read back the newer record. Returning to Skiff starts its preferences and calibration from defaults; the older copy is not retried just because the newest record has a different format"
       },
       {
        "way": "by itself, only if core failure barred Dual Core while the stored setting was On",
        "effect": "converted: After ChoralRoot saves these settings, Skiff cannot read back the newer record. Returning to Skiff starts its preferences and calibration from defaults; the older copy is not retried just because the newest record has a different format"
       },
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (it asks or arms a second turn first)",
        "effect": "converted: After ChoralRoot saves these settings, Skiff cannot read back the newer record. Returning to Skiff starts its preferences and calibration from defaults; the older copy is not retried just because the newest record has a different format"
       },
       {
        "way": "when you confirm Reset Settings with OCT+ twice (it asks or arms a second turn first)",
        "effect": "converted: After ChoralRoot saves these settings, Skiff cannot read back the newer record. Returning to Skiff starts its preferences and calibration from defaults; the older copy is not retried just because the newest record has a different format"
       },
       {
        "way": "when you hold OCT- and OCT+ while powering on (no question)",
        "effect": "converted: After ChoralRoot saves these settings, Skiff cannot read back the newer record. Returning to Skiff starts its preferences and calibration from defaults; the older copy is not retried just because the newest record has a different format"
       },
       {
        "way": "when you hold SAVE for a global save (no question)",
        "effect": "converted: After ChoralRoot saves these settings, Skiff cannot read back the newer record. Returning to Skiff starts its preferences and calibration from defaults; the older copy is not retried just because the newest record has a different format"
       },
       {
        "way": "when you keep calibration or enter update with OCT- + OCT+ + HOME held for 5 s (no question)",
        "effect": "converted: After ChoralRoot saves these settings, Skiff cannot read back the newer record. Returning to Skiff starts its preferences and calibration from defaults; the older copy is not retried just because the newest record has a different format"
       },
       {
        "way": "when you restore settings from backup software (no question)",
        "effect": "converted: After ChoralRoot saves these settings, Skiff cannot read back the newer record. Returning to Skiff starts its preferences and calibration from defaults; the older copy is not retried just because the newest record has a different format"
       }
      ]
     },
     {
      "object": "project A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds’ own FM6 patches",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore FM6 bank id 8 from backup software (no question)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank dump (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore CZ bank A (id 14) from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore CZ bank B (id 15) from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore CZ bank C (id 16) from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore CZ bank D (id 17) from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore CZ bank E (id 18) from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore CZ bank F (id 19) from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore CZ bank G (id 20) from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore CZ bank H (id 21) from backup software (no question)",
        "effect": "damaged (part of it written over)"
       }
      ]
     },
     {
      "object": "user sound bank 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore FM6 bank id 8 from backup software (no question) [through its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you send a DX7 bank dump (no question) [through its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       }
      ]
     },
     {
      "object": "user sound bank 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore FM6 bank id 8 from backup software (no question) [through its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you send a DX7 bank dump (no question) [through its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: user sample USR2; user sample USR3; settings, calibration and favourites (converted: After ChoralRoot saves these settings, Skiff cannot read back the newer record. Returning to Skiff starts its preferences and calibration from defaults; the older copy is not retried just because the newest record has a different format). At risk when you act: project A; project B; project C; project D; user sounds’ own FM6 patches; user sample USR1; user sound bank 1; user sound bank 2.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "ghoulbox",
    "name": "GHOULBOX",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "last session",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it (its RESTORE LAST is on by default)",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a compatible staged bank survives and is newer than home, or home is invalid [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you send an FM6 voice bank",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration and favourites",
      "effect": "changed by itself: Imports the shared 572-byte PER4 settings and panel calibration. Skiff stores CLOCK, MIDI IN and TUNE in preference bytes 18–20, PRESETS LIST in 21, HINTS OFF in 22, settings revision in 23, its scene-freed marker in 24, PERFORM KEYS in 25, LAUNCH in 26, SCREEN OFF in 27 and CLICK/FEEL in 28. GHOULBOX reads bytes 18–23 as FX key assignments and byte 24 as SCOPE MIX, STEP PREVIEW, CHORD ENTRY and NOTE NAMES choices. PERFORM KEYS becomes SCREEN OFF: Skiff’s SCENE choice gives a 15-minute idle timeout. LAUNCH becomes HOME: Skiff’s BAR choice gives TRACKS. SCREEN OFF becomes SCENE, while byte 12 supplies CLICK preferences. Byte 28 holds GHOULBOX import marks; with Skiff’s default CLICK LEVEL, its one-time migration turns RESTORE LAST ON. The shared record does not give matching preference meanings; also, shared settings bytes select different preferences",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "changed by itself: Imports the shared 572-byte PER4 settings and panel calibration. Skiff stores CLOCK, MIDI IN and TUNE in preference bytes 18–20, PRESETS LIST in 21, HINTS OFF in 22, settings revision in 23, its scene-freed marker in 24, PERFORM KEYS in 25, LAUNCH in 26, SCREEN OFF in 27 and CLICK/FEEL in 28. GHOULBOX reads bytes 18–23 as FX key assignments and byte 24 as SCOPE MIX, STEP PREVIEW, CHORD ENTRY and NOTE NAMES choices. PERFORM KEYS becomes SCREEN OFF: Skiff’s SCENE choice gives a 15-minute idle timeout. LAUNCH becomes HOME: Skiff’s BAR choice gives TRACKS. SCREEN OFF becomes SCENE, while byte 12 supplies CLICK preferences. Byte 28 holds GHOULBOX import marks; with Skiff’s default CLICK LEVEL, its one-time migration turns RESTORE LAST ON. The shared record does not give matching preference meanings; also, shared settings bytes select different preferences"
       },
       {
        "way": "when you erase a user preset (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "changed by itself: Imports the shared 572-byte PER4 settings and panel calibration. Skiff stores CLOCK, MIDI IN and TUNE in preference bytes 18–20, PRESETS LIST in 21, HINTS OFF in 22, settings revision in 23, its scene-freed marker in 24, PERFORM KEYS in 25, LAUNCH in 26, SCREEN OFF in 27 and CLICK/FEEL in 28. GHOULBOX reads bytes 18–23 as FX key assignments and byte 24 as SCOPE MIX, STEP PREVIEW, CHORD ENTRY and NOTE NAMES choices. PERFORM KEYS becomes SCREEN OFF: Skiff’s SCENE choice gives a 15-minute idle timeout. LAUNCH becomes HOME: Skiff’s BAR choice gives TRACKS. SCREEN OFF becomes SCENE, while byte 12 supplies CLICK preferences. Byte 28 holds GHOULBOX import marks; with Skiff’s default CLICK LEVEL, its one-time migration turns RESTORE LAST ON. The shared record does not give matching preference meanings; also, shared settings bytes select different preferences"
       },
       {
        "way": "when you restore a backup",
        "effect": "changed by itself: Imports the shared 572-byte PER4 settings and panel calibration. Skiff stores CLOCK, MIDI IN and TUNE in preference bytes 18–20, PRESETS LIST in 21, HINTS OFF in 22, settings revision in 23, its scene-freed marker in 24, PERFORM KEYS in 25, LAUNCH in 26, SCREEN OFF in 27 and CLICK/FEEL in 28. GHOULBOX reads bytes 18–23 as FX key assignments and byte 24 as SCOPE MIX, STEP PREVIEW, CHORD ENTRY and NOTE NAMES choices. PERFORM KEYS becomes SCREEN OFF: Skiff’s SCENE choice gives a 15-minute idle timeout. LAUNCH becomes HOME: Skiff’s BAR choice gives TRACKS. SCREEN OFF becomes SCENE, while byte 12 supplies CLICK preferences. Byte 28 holds GHOULBOX import marks; with Skiff’s default CLICK LEVEL, its one-time migration turns RESTORE LAST ON. The shared record does not give matching preference meanings; also, shared settings bytes select different preferences"
       },
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "changed by itself: Imports the shared 572-byte PER4 settings and panel calibration. Skiff stores CLOCK, MIDI IN and TUNE in preference bytes 18–20, PRESETS LIST in 21, HINTS OFF in 22, settings revision in 23, its scene-freed marker in 24, PERFORM KEYS in 25, LAUNCH in 26, SCREEN OFF in 27 and CLICK/FEEL in 28. GHOULBOX reads bytes 18–23 as FX key assignments and byte 24 as SCOPE MIX, STEP PREVIEW, CHORD ENTRY and NOTE NAMES choices. PERFORM KEYS becomes SCREEN OFF: Skiff’s SCENE choice gives a 15-minute idle timeout. LAUNCH becomes HOME: Skiff’s BAR choice gives TRACKS. SCREEN OFF becomes SCENE, while byte 12 supplies CLICK preferences. Byte 28 holds GHOULBOX import marks; with Skiff’s default CLICK LEVEL, its one-time migration turns RESTORE LAST ON. The shared record does not give matching preference meanings; also, shared settings bytes select different preferences"
       },
       {
        "way": "when you send settings from the editor",
        "effect": "changed by itself: Imports the shared 572-byte PER4 settings and panel calibration. Skiff stores CLOCK, MIDI IN and TUNE in preference bytes 18–20, PRESETS LIST in 21, HINTS OFF in 22, settings revision in 23, its scene-freed marker in 24, PERFORM KEYS in 25, LAUNCH in 26, SCREEN OFF in 27 and CLICK/FEEL in 28. GHOULBOX reads bytes 18–23 as FX key assignments and byte 24 as SCOPE MIX, STEP PREVIEW, CHORD ENTRY and NOTE NAMES choices. PERFORM KEYS becomes SCREEN OFF: Skiff’s SCENE choice gives a 15-minute idle timeout. LAUNCH becomes HOME: Skiff’s BAR choice gives TRACKS. SCREEN OFF becomes SCENE, while byte 12 supplies CLICK preferences. Byte 28 holds GHOULBOX import marks; with Skiff’s default CLICK LEVEL, its one-time migration turns RESTORE LAST ON. The shared record does not give matching preference meanings; also, shared settings bytes select different preferences"
       }
      ]
     },
     {
      "object": "project A",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a compatible staged bank survives and is newer than home, or home is invalid [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you restore a backup or import a project",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank [through its shared pattern pool]",
        "effect": "some or all of it lost"
       }
      ]
     },
     {
      "object": "project B",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a compatible staged bank survives and is newer than home, or home is invalid [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you restore a backup or import a project",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank [through its shared pattern pool]",
        "effect": "some or all of it lost"
       }
      ]
     },
     {
      "object": "project C",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a compatible staged bank survives and is newer than home, or home is invalid [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you restore a backup or import a project",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank [through its shared pattern pool]",
        "effect": "some or all of it lost"
       }
      ]
     },
     {
      "object": "project D",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a compatible staged bank survives and is newer than home, or home is invalid [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you restore a backup or import a project",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank [through its shared pattern pool]",
        "effect": "some or all of it lost"
       }
      ]
     },
     {
      "object": "shared 64-pattern pool",
      "effect": "some or all of it lost",
      "ways": [
       {
        "way": "by itself, only if a compatible staged bank survives and is newer than home, or home is invalid",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you send an FM6 voice bank",
        "effect": "some or all of it lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "user sounds’ own FM6 patches (each patch must still match its FM6 user record)",
     "user sample USR1 (sample loop and slice behaviour follow this reader’s engines)",
     "user sample USR2 (sample loop and slice behaviour follow this reader’s engines)",
     "user sample USR3 (sample loop and slice behaviour follow this reader’s engines)",
     "user sound bank 1 (DRUM-X sounds are empty or a different engine; shared names do not guarantee shared sound)",
     "user sound bank 2 (DRUM-X sounds are empty or a different engine; shared names do not guarantee shared sound)"
    ],
    "kept_unseen": [],
    "notes": [
     "With Skiff’s default CLICK LEVEL, GHOULBOX’s import migrations force RESTORE LAST ON and autosave writes by itself after edits and quiet. A saved LOW click level can suppress that migration and leave autosave OFF; check RESTORE LAST after import."
    ],
    "owner_text": "At risk by itself: last session; settings, calibration and favourites (changed by itself: Imports the shared 572-byte PER4 settings and panel calibration. Skiff stores CLOCK, MIDI IN and TUNE in preference bytes 18–20, PRESETS LIST in 21, HINTS OFF in 22, settings revision in 23, its scene-freed marker in 24, PERFORM KEYS in 25, LAUNCH in 26, SCREEN OFF in 27 and CLICK/FEEL in 28. GHOULBOX reads bytes 18–23 as FX key assignments and byte 24 as SCOPE MIX, STEP PREVIEW, CHORD ENTRY and NOTE NAMES choices. PERFORM KEYS becomes SCREEN OFF: Skiff’s SCENE choice gives a 15-minute idle timeout. LAUNCH becomes HOME: Skiff’s BAR choice gives TRACKS. SCREEN OFF becomes SCENE, while byte 12 supplies CLICK preferences. Byte 28 holds GHOULBOX import marks; with Skiff’s default CLICK LEVEL, its one-time migration turns RESTORE LAST ON. The shared record does not give matching preference meanings; also, shared settings bytes select different preferences). At risk by itself, under a condition: project A; project B; project C; project D; shared 64-pattern pool (some or all of it lost). Carried over: user sounds’ own FM6 patches (each patch must still match its FM6 user record); user sample USR1 (sample loop and slice behaviour follow this reader’s engines); user sample USR2 (sample loop and slice behaviour follow this reader’s engines); user sample USR3 (sample loop and slice behaviour follow this reader’s engines); user sound bank 1 (DRUM-X sounds are empty or a different engine; shared names do not guarantee shared sound); user sound bank 2 (DRUM-X sounds are empty or a different engine; shared names do not guarantee shared sound). With Skiff’s default CLICK LEVEL, GHOULBOX’s import migrations force RESTORE LAST ON and autosave writes by itself after edits and quiet. A saved LOW click level can suppress that migration and leave autosave OFF; check RESTORE LAST after import.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "mvaveopen",
    "name": "M-VAVE FM-1 Open",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "project A",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project B",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project C",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project D",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds’ own FM6 patches",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sound bank 1",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open [through its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ],
      "first_way_effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
     },
     {
      "object": "user sound bank 2",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open [through its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ],
      "first_way_effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "last session",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared 64-pattern pool",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: project A; project B; project C; project D; user sounds’ own FM6 patches; user sound bank 1 (only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain; other writes can also erase it); user sound bank 2 (only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain; other writes can also erase it). At risk when you act: user sample USR1; user sample USR2; user sample USR3; last session; shared 64-pattern pool; settings, calibration and favourites.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "fm106",
    "name": "FM-106",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you confirm deletion of the active user slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE in the save screen (no question)",
        "effect": "lost"
       },
       {
        "way": "when you release a short SAVE (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, calibration and favourites.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "hortator",
    "name": "Hortator",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel (no question)",
        "effect": "lost"
       },
       {
        "way": "when you remember or forget a Bluetooth device (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "user sample USR1 (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested)",
     "user sample USR2 (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested)",
     "user sample USR3 (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested)"
    ],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, calibration and favourites. At risk when you act: project A; project B; project C; project D. Carried over: user sample USR1 (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested); user sample USR2 (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested); user sample USR3 (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "obervave",
    "name": "OberVave",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "shared 64-pattern pool",
      "effect": "some or all of it lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you request a copy into pattern 1 (no question)",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you request a copy into pattern 2 (no question)",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you request a copy into pattern 3 (no question)",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you request a copy into pattern 4 (no question)",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you request a copy into pattern 5 (no question)",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you request a copy into pattern 6 (no question)",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you request a copy into pattern 7 (no question)",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you request a copy into pattern 8 (no question)",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you tap SAVE in the sequencer (no question)",
        "effect": "some or all of it lost"
       }
      ]
     },
     {
      "object": "settings, calibration and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you tap SAVE twice outside the sequencer (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: shared 64-pattern pool (some or all of it lost); settings, calibration and favourites.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "polly",
    "name": "Polly",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "project A",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a sector tail contains a valid update record [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you choose COPY SONG and confirm if it asks (no question)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm RESTORE FROM USB on the FM-1 (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you install a QY70 style bank (no question) [through its shared pattern pool]",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore (no question)",
        "effect": "lost"
       },
       {
        "way": "when you start a stopped USB backup or enter a test session (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project B",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a sector tail contains a valid update record [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you choose COPY SONG and confirm if it asks (no question)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm RESTORE FROM USB on the FM-1 (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (no question)",
        "effect": "lost"
       },
       {
        "way": "when you install a QY70 style bank (no question) [through its shared pattern pool]",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore (no question)",
        "effect": "lost"
       },
       {
        "way": "when you start a stopped USB backup or enter a test session (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project C",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a sector tail contains a valid update record [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you choose COPY SONG and confirm if it asks (no question)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm RESTORE FROM USB on the FM-1 (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (no question)",
        "effect": "lost"
       },
       {
        "way": "when you install a QY70 style bank (no question) [through its shared pattern pool]",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore (no question)",
        "effect": "lost"
       },
       {
        "way": "when you start a stopped USB backup or enter a test session (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project D",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a sector tail contains a valid update record [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you choose COPY SONG and confirm if it asks (no question)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm RESTORE FROM USB on the FM-1 (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (no question)",
        "effect": "lost"
       },
       {
        "way": "when you install a QY70 style bank (no question) [through its shared pattern pool]",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore (no question)",
        "effect": "lost"
       },
       {
        "way": "when you start a stopped USB backup or enter a test session (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds’ own FM6 patches",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG and confirm if it asks (no question)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm RESTORE FROM USB on the FM-1 (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (no question)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore (no question)",
        "effect": "lost"
       },
       {
        "way": "when you start a stopped USB backup or enter a test session (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG and confirm if it asks (no question)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm RESTORE FROM USB on the FM-1 (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (no question)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore (no question)",
        "effect": "lost"
       },
       {
        "way": "when you start a stopped USB backup or enter a test session (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG and confirm if it asks (no question)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm RESTORE FROM USB on the FM-1 (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (no question)",
        "effect": "lost"
       },
       {
        "way": "when you install a QY70 style bank (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore (no question)",
        "effect": "lost"
       },
       {
        "way": "when you start a stopped USB backup or enter a test session (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sound bank 1",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it [through its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you choose COPY SONG and confirm if it asks (no question) [through its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you complete power-on hardware calibration (no question)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (it asks or arms a second turn first) [through its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you confirm NEW SONG or FREE (it asks or arms a second turn first) [through its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you confirm RESTORE FROM USB on the FM-1 (it asks or arms a second turn first) [through its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (no question) [through its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you press SAVE (no question) [through its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you send a backup for USB restore (no question) [through its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you start a stopped USB backup or enter a test session (no question) [through its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       }
      ],
      "first_way_effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
     },
     {
      "object": "user sound bank 2",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it [through its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you choose COPY SONG and confirm if it asks (no question) [through its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you confirm FACTORY RESET (it asks or arms a second turn first) [through its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you confirm NEW SONG or FREE (it asks or arms a second turn first) [through its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you confirm RESTORE FROM USB on the FM-1 (it asks or arms a second turn first) [through its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (no question) [through its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you install a QY70 style bank (no question)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question) [through its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you send a backup for USB restore (no question) [through its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you start a stopped USB backup or enter a test session (no question) [through its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       }
      ],
      "first_way_effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
     },
     {
      "object": "settings, calibration and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm RESTORE FROM USB on the FM-1 (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore (no question)",
        "effect": "lost"
       },
       {
        "way": "when you start a stopped USB backup or enter a test session (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "last session",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a sector tail contains a valid update record [through its shared pattern pool]",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you install a QY70 style bank (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared 64-pattern pool",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a sector tail contains a valid update record",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you install a QY70 style bank (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install a QY70 style bank (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: project A; project B; project C; project D; user sounds’ own FM6 patches; user sample USR1; user sample USR2; user sound bank 1 (only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain; other writes can also erase it); user sound bank 2 (only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain; other writes can also erase it); settings, calibration and favourites. At risk by itself, under a condition: last session; shared 64-pattern pool. At risk when you act: user sample USR3.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   }
  ]
 },
 "disagreements": [
  {
   "topic": "Which Felucca projects load",
   "docs_say": "The README names Felucca 1.1.5 as Skiff’s ancestor and says its sounds and projects load.",
   "source_says": "Skiff reads the older formats it inherited, but later Felucca project formats are not all readable and can appear as empty slots.",
   "docs_ref": {
    "kind": "doc",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "README.md",
    "lines": "27-29",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/README.md#L27-L29"
   },
   "source_ref": {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/project.c",
    "lines": "588-660",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L588-L660"
   }
  },
  {
   "topic": "Full backup omits MAN slice markers",
   "docs_say": "The guide describes the installer backup as complete.",
   "source_says": "The backup includes each sample’s audio and sample settings but omits its saved MAN slice markers. Keep a separate record of those positions.",
   "docs_ref": {
    "kind": "doc",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "README.md",
    "lines": "35-37",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/README.md#L35-L37"
   },
   "source_ref": {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/editor_backup.c",
    "lines": "60-65",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/editor_backup.c#L60-L65"
   }
  },
  {
   "topic": "Backup after a failed pattern flush",
   "docs_say": "The guide describes a complete music backup.",
   "source_says": "Backup capture continues after a pattern flush reports a full pool or write failure. A resulting file can therefore miss pending pattern edits; file creation alone does not verify that all current music was captured. This follows from reading the source and was not tested on a unit.",
   "docs_ref": {
    "kind": "doc",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "README.md",
    "lines": "35-37",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/README.md#L35-L37"
   },
   "source_ref": {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/editor_backup.c",
    "lines": "69-83",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/editor_backup.c#L69-L83"
   }
  }
 ],
 "not_mapped": [],
 "status": "Independently checked: zero errors in round 3 (2026-10-16), after the round-1 and round-2 fixes. No device testing.",
 "saving_note": {
  "text": "Sound knobs and sequencer edits change memory first; pattern edits save automatically normally after stop and ten idle seconds, with a one-minute gap between rounds that a full pending queue can bypass, even with RESTORE LAST off; stopped pattern operations can also flush immediately to free pending-queue space; enabled RESTORE LAST also keeps the live project, while named project and sound saves write on confirmation and power-off performs no final save; when all 64 patterns are occupied, new notes on a track with no assigned pattern can be missing after restart even though the session autosave completes, because that save contains no copy of those steps; make room and complete a project save that reports SAVED before powering off.",
  "source": [
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/project.c",
    "lines": "1450-1465",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1450-L1465"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/project.c",
    "lines": "1594-1622",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1594-L1622"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/ui_name.c",
    "lines": "207-237",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L207-L237"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/bank.c",
    "lines": "358-364",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L358-L364"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/bank.c",
    "lines": "467-512",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L467-L512"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/project.c",
    "lines": "1605-1621",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1605-L1621"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/project.c",
    "lines": "910-932",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L910-L932"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/project.c",
    "lines": "979-1003",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L979-L1003"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/project.c",
    "lines": "1328-1331",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1328-L1331"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/bank.c",
    "lines": "350-356",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L350-L356"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/project.c",
    "lines": "1594-1605",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1594-L1605"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/editor_project.c",
    "lines": "58-64",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/editor_project.c#L58-L64"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/editor_song.c",
    "lines": "43-72",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/editor_song.c#L43-L72"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/editor.c",
    "lines": "746-776",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/editor.c#L746-L776"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "web/editor.html",
    "lines": "4163-4195",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/web/editor.html#L4163-L4195"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "web/editor.html",
    "lines": "3498-3531",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/web/editor.html#L3498-L3531"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "web/editor.html",
    "lines": "5835-5868",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/web/editor.html#L5835-L5868"
   }
  ],
  "editor": "The web editor’s SAVE AS stops playback, saves pending patterns and writes the project immediately; it asks about replacing a slot only when Skiff reports it as used. RENAME stops playback and writes the stored project’s new name without a separate overwrite question. The older browser save command always asks, then stops playback and saves. POOL CLEAR and LIST CLEAR ask first and require playback already stopped: pool clearing refuses referenced patterns, while list clearing keeps a pattern used elsewhere and otherwise removes it immediately; the changed list saves later with the project or enabled session autosave. Sound STORE requests a name and asks about overwrite only for a used slot; ERASE asks and is offered only for a used slot. Both stop playback and rewrite the whole sound bank immediately; FM6 store then writes its patch collection too, and erase removes the sound’s star when present. Unreadable foreign project or sound data can look empty, allowing SAVE AS or STORE without an overwrite question. These firmware commands add no questions of their own, and Undo cannot recover overwritten or cleared flash."
 },
 "backup_note": {
  "holds": "The browser archive reads the connected unit: live music, unit settings and calibration, favourites, four projects, both user-sound banks, companion FM6 patches, the shared pattern pool and all three user samples.",
  "omits": "It does not hold the firmware, a separate raw flash autosave or the persistent hand-set slice-marker tables; record the slice positions separately.",
  "capture": "Capturing stops playback and flushes pending patterns to flash without a question before making the file; the code does not stop export when that flush fails, so resolve PATTERNS FULL or storage errors before relying on it.",
  "restore": "The editor asks once before restore, then writes each included object separately without firmware questions or whole-restore undo; absent categories in an older archive remain, while included empty objects clear those objects, and live music returns to memory last.",
  "browser_bank": "The archive is a downloaded file from the unit, not a separate browser bank; importing a sound into the editor library is a different operation.",
  "source": [
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/editor_backup.c",
    "lines": "39-83",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/editor_backup.c#L39-L83"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/editor_backup.c",
    "lines": "99-172",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/editor_backup.c#L99-L172"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "web/fm1backup.js",
    "lines": "95-153",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/web/fm1backup.js#L95-L153"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "web/editor.html",
    "lines": "4208-4228",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/web/editor.html#L4208-L4228"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "firmware/src/slice_store.c",
    "lines": "21-36",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/slice_store.c#L21-L36"
   },
   {
    "kind": "source",
    "repo": "illuminus5/skiff",
    "ref": "v1.2",
    "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
    "path": "web/index_pkg.html",
    "lines": "218-245",
    "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/web/index_pkg.html#L218-L245"
   }
  ],
  "routes": "The installer’s return-to-official-V15 action is another backup route: it reads the same archive from the running unit and downloads it before asking whether to continue to V15; cancel there to retain the file without starting that installation. Its interrupted-update resume option cannot read a backup and relies on a file already saved."
 },
 "undocumented": [
  {
   "topic": "123 naming and G5",
   "fact": "In 123 name entry, G5 types + and advances the cursor.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_name.c",
     "lines": "29-32",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L29-L32"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_name.c",
     "lines": "57-63",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L57-L63"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_name.c",
     "lines": "139-159",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_name.c#L139-L159"
    }
   ]
  },
  {
   "topic": "Comment drift",
   "fact": "Comments describing a fixed 0.7-second hold, four FX cuts, inactive PRESETS on SLICES or stopped-only sequencer tools describe older behavior; executable handlers define this map.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1032-1049",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1032-L1049"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/seq.c",
     "lines": "638-644",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/seq.c#L638-L644"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_input.c",
     "lines": "1002-1005",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_input.c#L1002-L1005"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui_tools.c",
     "lines": "335-414",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui_tools.c#L335-L414"
    }
   ]
  },
  {
   "topic": "Undo limits",
   "fact": "Undo has eight supported edits, disappears across project load or power loss, and pattern or motion undo needs the track back on the same pattern; it is not an erase or file-restore safety net.",
   "source": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "904-915",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L904-L915"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/ui.c",
     "lines": "1114-1130",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/ui.c#L1114-L1130"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/project.c",
     "lines": "1311",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1311"
    }
   ]
  }
 ],
 "refresh_check_fixes": [
  {
   "round": 1,
   "error": "1 full-pool autosave",
   "fixed": "Sound knobs and sequencer edits change memory first; pattern edits save automatically after stop and ten idle seconds, at most once a minute, even with RESTORE LAST off; enabled RESTORE LAST also keeps the live project, while named project and sound saves write on confirmation and power-off performs no final save; when all 64 patterns are occupied, new notes on a track with no assigned pattern can be missing after restart even though the session autosave completes, because that save contains no copy of those steps; make room and complete a project save that reports SAVED before powering off.",
   "at": "saving_note.text; saving_note.source"
  },
  {
   "round": 1,
   "error": "1 full-pool autosave",
   "fixed": "Skiff keeps four projects, 64 shared patterns, 32 user sounds with their own FM6 patches, three user sample sets, saved MAN slice markers, and settings including panel calibration and stars. A project names patterns in one shared pool; changing a shared pattern changes every entry that uses it. Changed patterns save themselves after a quiet stopped pause, even with RESTORE LAST off. With RESTORE LAST on, the last session also saves after ten quiet seconds, with at least a minute between save rounds. Save a project or take a full backup to flush patterns while stopped. Powering off does not start a save. First start can also change and save settings, and convert accepted older projects, without asking. When all 64 patterns are occupied, new notes on a track with no assigned pattern can be missing after restart even though the session autosave completes, because that save contains no copy of those steps; make room and complete a project save that reports SAVED before powering off.",
   "at": "switching_note.kept_on_unit; switching_note.source"
  },
  {
   "round": 1,
   "error": "1 full-pool autosave",
   "fixed": "Recorded ignored pattern-allocation failure, successful incomplete session commit and explicit-save refusal.",
   "at": "refresh/work/skiff.storage.json objects[id=skiff.autosave].written_when[0].note/src; notes; src/grade.full_pool_failure"
  },
  {
   "round": 1,
   "error": "1 full-pool autosave",
   "fixed": "Recorded ignored pattern-allocation failure, successful incomplete session commit and explicit-save refusal.",
   "at": "refresh/work/skiff.storage.json objects[id=skiff.pattern_pool].written_when[0].note/src; notes; src/grade.full_pool_failure"
  },
  {
   "round": 1,
   "error": "2 confirmation access",
   "fixed": "Request a protected action to display its question; INIT opens one as soon as its key is pressed, while save-page actions usually need one OCT+ tap to show it.",
   "at": "modes[4] (dialog); source"
  },
  {
   "round": 1,
   "error": "2 confirmation access",
   "fixed": "Stop playback, open SAVE > USER, select a used slot, turn KNOB 3 to ERASE and tap OCT+ once to display the erase question.",
   "at": "modes[120] (confirm_user_erase); source"
  },
  {
   "round": 1,
   "error": "2 confirmation access",
   "fixed": "Stop playback, open SAVE > USER, select a used slot, choose SAVE with KNOB 4 and tap OCT+ once to display the overwrite question.",
   "at": "modes[121] (confirm_user_replace); source"
  },
  {
   "round": 1,
   "error": "2 confirmation access",
   "fixed": "Stop playback, open SAVE > PROJECT, select a used slot, choose SAVE with KNOB 4 and tap OCT+ once to display the overwrite question.",
   "at": "modes[122] (confirm_project_replace); source"
  },
  {
   "round": 1,
   "error": "2 confirmation access",
   "fixed": "On SAVE > PROJECT, select a used slot, choose LOAD with KNOB 3 and tap OCT+ once; the load question appears only if the current session changed.",
   "at": "modes[123] (confirm_project_load); source"
  },
  {
   "round": 1,
   "error": "2 confirmation access",
   "fixed": "While stopped, open SAVE > PATTERNS, select a stored pattern that no entry uses and tap OCT+ once to display the clear question.",
   "at": "modes[124] (confirm_pool_clear); source"
  },
  {
   "round": 1,
   "error": "2 confirmation access",
   "fixed": "While stopped on SEQ > SONG, choose an occupied entry with KNOB 1, turn KNOB 2 to CLEAR and tap OCT+ once to display the clear question.",
   "at": "modes[125] (confirm_entry_clear); source"
  },
  {
   "round": 1,
   "error": "2 confirmation access",
   "fixed": "Hold EDIT and press F5 to display the initialization question immediately; on DRUM-X its warning includes the shared kit.",
   "at": "modes[126] (confirm_sound_init); source"
  },
  {
   "round": 1,
   "error": "2 confirmation access",
   "fixed": "On SEQ > AUTOMATION, select its top settings row, choose CLEAR with KNOB 4 and tap OCT+ once to display the clear question.",
   "at": "modes[127] (confirm_motion_clear); source"
  },
  {
   "round": 1,
   "error": "2 confirmation access",
   "fixed": "Set PERFORM’s KEYS to SCENE, then hold SAVE and press a white key for an occupied scene to display its overwrite question immediately.",
   "at": "modes[128] (confirm_scene_replace); source"
  },
  {
   "round": 1,
   "error": "3 save versus rename",
   "fixed": "While stopped on SAVE > USER, pick the destination with KNOB 1, choose SAVE with KNOB 4 and tap OCT+; if overwrite is asked, accept it to enter NAME, then type the new sound name. Saves the current track sound into the chosen slot; the final OCT+ in NAME writes it.",
   "at": "modes[129] (name_user_save); source"
  },
  {
   "round": 1,
   "error": "3 save versus rename",
   "fixed": "While stopped on SAVE > USER, pick a used slot with KNOB 1, turn KNOB 3 to NAME and tap OCT+ to edit that stored sound’s name. Preserves the stored sound and changes its name only when OCT+ is tapped in NAME.",
   "at": "modes[130] (name_user_rename); source"
  },
  {
   "round": 1,
   "error": "3 save versus rename",
   "fixed": "While stopped on SAVE > PROJECT, pick the destination with KNOB 1, choose SAVE with KNOB 4 and tap OCT+; if overwrite is asked, accept it to enter NAME, then type the project name. Saves the current session into the chosen project; the final OCT+ in NAME writes it.",
   "at": "modes[131] (name_project_save); source"
  },
  {
   "round": 1,
   "error": "3 save versus rename",
   "fixed": "While stopped on SAVE > PROJECT, pick a used slot with KNOB 1, choose NAME with KNOB 2 and tap OCT+ to edit that stored project’s name. Preserves the stored project and changes its name only when OCT+ is tapped in NAME.",
   "at": "modes[132] (name_project_rename); source"
  },
  {
   "round": 1,
   "error": "4 INIT shared kit",
   "fixed": "Opens the question for resetting the selected track’s sound and, on DRUM-X, the project’s shared kit used by every DRUM-X track; confirming changes memory with SAVE-held undo and later session saving.",
   "at": "controls.key_f5[13]"
  },
  {
   "round": 1,
   "error": "4 factory browsing shared kit",
   "fixed": "On HOME and ordinary sound pages, browses factory sounds and used user slots in LIST across allowed engines without replacing the steps; SAVE held can undo the load; loading a factory DRUM-X kit sound also replaces the project’s kit for every DRUM-X track, with SAVE-held undo, while OWN KIT and HADRON KIT keep it.",
   "at": "controls.encoder_presets[0]"
  },
  {
   "round": 1,
   "error": "4 factory browsing shared kit",
   "fixed": "Loads the next or previous sound in LIST into the selected track, preserving its steps and mix; SAVE held can undo the load; loading a factory DRUM-X kit sound also replaces the project’s kit for every DRUM-X track, with SAVE-held undo, while OWN KIT and HADRON KIT keep it.",
   "at": "controls.encoder_knob1[73]"
  },
  {
   "round": 1,
   "error": "4 factory browsing shared kit",
   "fixed": "Changes the sound within the selected engine; loading a factory DRUM-X kit sound also replaces the project’s kit for every DRUM-X track, with SAVE-held undo, while OWN KIT and HADRON KIT keep it.",
   "at": "controls.encoder_knob2[88]"
  },
  {
   "round": 1,
   "error": "5 engine-change automation loss",
   "fixed": "On HOME and ordinary sound pages, browses factory sounds and used user slots in LIST across allowed engines without replacing the steps; SAVE held can undo the load; loading a factory DRUM-X kit sound also replaces the project’s kit for every DRUM-X track, with SAVE-held undo, while OWN KIT and HADRON KIT keep it; an engine change removes the old engine-control and drum-lane-level automation and locks while common-control records remain, with the load recoverable through SAVE-held undo.",
   "at": "controls.encoder_presets[0]"
  },
  {
   "round": 1,
   "error": "5 engine-change automation loss",
   "fixed": "Loads the next or previous sound in LIST into the selected track, preserving its steps and mix; SAVE held can undo the load; loading a factory DRUM-X kit sound also replaces the project’s kit for every DRUM-X track, with SAVE-held undo, while OWN KIT and HADRON KIT keep it; an engine change removes the old engine-control and drum-lane-level automation and locks while common-control records remain, with the load recoverable through SAVE-held undo.",
   "at": "controls.encoder_knob1[73]"
  },
  {
   "round": 1,
   "error": "5 engine-change automation loss",
   "fixed": "Loads an allowed engine’s first sound into the selected track in memory; SAVE held can undo it; an engine change removes the old engine-control and drum-lane-level automation and locks while common-control records remain, with the load recoverable through SAVE-held undo.",
   "at": "controls.encoder_knob2[74]"
  },
  {
   "round": 1,
   "error": "5 engine-change automation loss",
   "fixed": "Selects LOAD clockwise or drops it anticlockwise; OCT+ loads the sound in memory and SAVE held can undo that load; an engine change removes the old engine-control and drum-lane-level automation and locks while common-control records remain, with the load recoverable through SAVE-held undo.",
   "at": "controls.encoder_knob2[75]"
  },
  {
   "round": 1,
   "error": "5 engine-change automation loss",
   "fixed": "Selects an allowed engine on this track; an engine change removes the old engine-control and drum-lane-level automation and locks while common-control records remain, with the load recoverable through SAVE-held undo.",
   "at": "controls.encoder_knob1[86]"
  },
  {
   "round": 1,
   "error": "5 engine-change automation loss",
   "fixed": "Changes the sound within the selected engine; loading a factory DRUM-X kit sound also replaces the project’s kit for every DRUM-X track, with SAVE-held undo, while OWN KIT and HADRON KIT keep it; an engine change removes the old engine-control and drum-lane-level automation and locks while common-control records remain, with the load recoverable through SAVE-held undo.",
   "at": "controls.encoder_knob2[88]"
  },
  {
   "round": 1,
   "error": "5 engine-change automation loss",
   "fixed": "Runs the selected LOAD, ERASE, NAME or SAVE action; loading changes only the track sound in memory with undo, while erase asks before immediately rewriting the sound bank when stopped and cannot be undone; an engine change removes the old engine-control and drum-lane-level automation and locks while common-control records remain, with the load recoverable through SAVE-held undo.",
   "at": "controls.button_oct_up[4]"
  },
  {
   "round": 1,
   "error": "5 engine-change automation loss",
   "fixed": "Loads a sound from ANALOG on the selected track while keeping its steps, with SAVE-held undo available; an engine change removes the old engine-control and drum-lane-level automation and locks while common-control records remain, with the load recoverable through SAVE-held undo.",
   "at": "controls.key_f3[16]"
  },
  {
   "round": 1,
   "error": "5 engine-change automation loss",
   "fixed": "Loads a sound from FM6 on the selected track while keeping its steps, with SAVE-held undo available; an engine change removes the old engine-control and drum-lane-level automation and locks while common-control records remain, with the load recoverable through SAVE-held undo.",
   "at": "controls.key_g3[16]"
  },
  {
   "round": 1,
   "error": "5 engine-change automation loss",
   "fixed": "Loads a sound from PHASE on the selected track while keeping its steps, with SAVE-held undo available; an engine change removes the old engine-control and drum-lane-level automation and locks while common-control records remain, with the load recoverable through SAVE-held undo.",
   "at": "controls.key_a3[16]"
  },
  {
   "round": 1,
   "error": "5 engine-change automation loss",
   "fixed": "Loads a sound from LOFI on the selected track while keeping its steps, with SAVE-held undo available; an engine change removes the old engine-control and drum-lane-level automation and locks while common-control records remain, with the load recoverable through SAVE-held undo.",
   "at": "controls.key_b3[16]"
  },
  {
   "round": 1,
   "error": "5 engine-change automation loss",
   "fixed": "Loads a sound from SAMPLE on the selected track while keeping its steps, with SAVE-held undo available; an engine change removes the old engine-control and drum-lane-level automation and locks while common-control records remain, with the load recoverable through SAVE-held undo.",
   "at": "controls.key_c4[15]"
  },
  {
   "round": 1,
   "error": "5 engine-change automation loss",
   "fixed": "Loads a sound from VOICE on the selected track while keeping its steps, with SAVE-held undo available; an engine change removes the old engine-control and drum-lane-level automation and locks while common-control records remain, with the load recoverable through SAVE-held undo.",
   "at": "controls.key_d4[16]"
  },
  {
   "round": 1,
   "error": "5 engine-change automation loss",
   "fixed": "Loads a sound from TRIO on the selected track while keeping its steps, with SAVE-held undo available; an engine change removes the old engine-control and drum-lane-level automation and locks while common-control records remain, with the load recoverable through SAVE-held undo.",
   "at": "controls.key_e4[16]"
  },
  {
   "round": 1,
   "error": "5 engine-change automation loss",
   "fixed": "Loads a sound from WHEEL on the selected track while keeping its steps, with SAVE-held undo available; an engine change removes the old engine-control and drum-lane-level automation and locks while common-control records remain, with the load recoverable through SAVE-held undo.",
   "at": "controls.key_f4[15]"
  },
  {
   "round": 1,
   "error": "5 engine-change automation loss",
   "fixed": "Loads a GRAIN sound only on tracks 1–4 while keeping steps, with SAVE-held undo available; an engine change removes the old engine-control and drum-lane-level automation and locks while common-control records remain, with the load recoverable through SAVE-held undo.",
   "at": "controls.key_g4[16]"
  },
  {
   "round": 1,
   "error": "5 engine-change automation loss",
   "fixed": "Loads a PHYS sound only on tracks 1–4 while keeping steps, with SAVE-held undo available; an engine change removes the old engine-control and drum-lane-level automation and locks while common-control records remain, with the load recoverable through SAVE-held undo.",
   "at": "controls.key_a4[15]"
  },
  {
   "round": 1,
   "error": "5 engine-change automation loss",
   "fixed": "Loads a sound from NOISE on the selected track while keeping its steps, with SAVE-held undo available; an engine change removes the old engine-control and drum-lane-level automation and locks while common-control records remain, with the load recoverable through SAVE-held undo.",
   "at": "controls.key_b4[15]"
  },
  {
   "round": 1,
   "error": "5 engine-change automation loss",
   "fixed": "Loads a sound from SLICE on the selected track while keeping its steps, with SAVE-held undo available; an engine change removes the old engine-control and drum-lane-level automation and locks while common-control records remain, with the load recoverable through SAVE-held undo.",
   "at": "controls.key_c5[15]"
  },
  {
   "round": 1,
   "error": "5 engine-change automation loss",
   "fixed": "Loads a sound from DRUM on the selected track while keeping its steps, with SAVE-held undo available; an engine change removes the old engine-control and drum-lane-level automation and locks while common-control records remain, with the load recoverable through SAVE-held undo.",
   "at": "controls.key_d5[15]"
  },
  {
   "round": 1,
   "error": "5 engine-change automation loss",
   "fixed": "Loads a sound from DRUM-X on the selected track while keeping its steps, with SAVE-held undo available; an engine change removes the old engine-control and drum-lane-level automation and locks while common-control records remain, with the load recoverable through SAVE-held undo.",
   "at": "controls.key_e5[15]"
  },
  {
   "round": 1,
   "error": "6 same-engine selection",
   "fixed": "Keeps the edited sound unchanged if ANALOG is already selected; otherwise selects ANALOG and loads its first sound in memory, preserving steps but removing old engine-control and drum-lane-level automation and locks, with SAVE-held undo.",
   "at": "controls.key_f3[16]"
  },
  {
   "round": 1,
   "error": "6 same-engine selection",
   "fixed": "Keeps the edited sound unchanged if FM6 is already selected; otherwise selects FM6 and loads its first sound in memory, preserving steps but removing old engine-control and drum-lane-level automation and locks, with SAVE-held undo.",
   "at": "controls.key_g3[16]"
  },
  {
   "round": 1,
   "error": "6 same-engine selection",
   "fixed": "Keeps the edited sound unchanged if PHASE is already selected; otherwise selects PHASE and loads its first sound in memory, preserving steps but removing old engine-control and drum-lane-level automation and locks, with SAVE-held undo.",
   "at": "controls.key_a3[16]"
  },
  {
   "round": 1,
   "error": "6 same-engine selection",
   "fixed": "Keeps the edited sound unchanged if LOFI is already selected; otherwise selects LOFI and loads its first sound in memory, preserving steps but removing old engine-control and drum-lane-level automation and locks, with SAVE-held undo.",
   "at": "controls.key_b3[16]"
  },
  {
   "round": 1,
   "error": "6 same-engine selection",
   "fixed": "Keeps the edited sound unchanged if SAMPLE is already selected; otherwise selects SAMPLE and loads its first sound in memory, preserving steps but removing old engine-control and drum-lane-level automation and locks, with SAVE-held undo.",
   "at": "controls.key_c4[15]"
  },
  {
   "round": 1,
   "error": "6 same-engine selection",
   "fixed": "Keeps the edited sound unchanged if VOICE is already selected; otherwise selects VOICE and loads its first sound in memory, preserving steps but removing old engine-control and drum-lane-level automation and locks, with SAVE-held undo.",
   "at": "controls.key_d4[16]"
  },
  {
   "round": 1,
   "error": "6 same-engine selection",
   "fixed": "Keeps the edited sound unchanged if TRIO is already selected; otherwise selects TRIO and loads its first sound in memory, preserving steps but removing old engine-control and drum-lane-level automation and locks, with SAVE-held undo.",
   "at": "controls.key_e4[16]"
  },
  {
   "round": 1,
   "error": "6 same-engine selection",
   "fixed": "Keeps the edited sound unchanged if WHEEL is already selected; otherwise selects WHEEL and loads its first sound in memory, preserving steps but removing old engine-control and drum-lane-level automation and locks, with SAVE-held undo.",
   "at": "controls.key_f4[15]"
  },
  {
   "round": 1,
   "error": "6 same-engine selection",
   "fixed": "Keeps the edited sound unchanged if GRAIN is already selected; otherwise selects GRAIN on tracks 1–4 and loads its first sound in memory, preserving steps but removing old engine-control and drum-lane-level automation and locks, with SAVE-held undo.",
   "at": "controls.key_g4[16]"
  },
  {
   "round": 1,
   "error": "6 same-engine selection",
   "fixed": "Keeps the edited sound unchanged if PHYS is already selected; otherwise selects PHYS on tracks 1–4 and loads its first sound in memory, preserving steps but removing old engine-control and drum-lane-level automation and locks, with SAVE-held undo.",
   "at": "controls.key_a4[15]"
  },
  {
   "round": 1,
   "error": "6 same-engine selection",
   "fixed": "Keeps the edited sound unchanged if NOISE is already selected; otherwise selects NOISE and loads its first sound in memory, preserving steps but removing old engine-control and drum-lane-level automation and locks, with SAVE-held undo.",
   "at": "controls.key_b4[15]"
  },
  {
   "round": 1,
   "error": "6 same-engine selection",
   "fixed": "Keeps the edited sound unchanged if SLICE is already selected; otherwise selects SLICE and loads its first sound in memory, preserving steps but removing old engine-control and drum-lane-level automation and locks, with SAVE-held undo.",
   "at": "controls.key_c5[15]"
  },
  {
   "round": 1,
   "error": "6 same-engine selection",
   "fixed": "Keeps the edited sound unchanged if DRUM is already selected; otherwise selects DRUM and loads its first sound in memory, preserving steps but removing old engine-control and drum-lane-level automation and locks, with SAVE-held undo.",
   "at": "controls.key_d5[15]"
  },
  {
   "round": 1,
   "error": "6 same-engine selection",
   "fixed": "Keeps the edited sound unchanged if DRUM-X is already selected; otherwise selects DRUM-X and loads its first sound in memory, preserving steps but removing old engine-control and drum-lane-level automation and locks, with SAVE-held undo.",
   "at": "controls.key_e5[15]"
  },
  {
   "round": 1,
   "error": "6 same-engine selection",
   "fixed": "Chooses an allowed engine, keeping the edited sound if that engine is already selected; changing it loads its first sound in memory and preserves steps but removes old engine-control and drum-lane-level automation and locks, with SAVE-held undo.",
   "at": "controls.encoder_knob1[86]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "With one or more editable steps held, adds or changes their lock for this knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern is saved later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob1[79]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "With one or more editable steps held, adds or changes their lock for this knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern is saved later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob1[80]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob1[132]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob1[133]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob1[134]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob1[135]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob1[136]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob1[137]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob1[138]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob1[139]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob1[140]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob1[141]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob1[142]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob1[143]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob1[144]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob1[145]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob1[146]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob1[147]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob1[148]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob1[149]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob1[150]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob1[151]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob1[152]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob1[153]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob1[154]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob1[155]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob1[156]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob1[157]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob1[158]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob1[159]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob1[160]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob1[161]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob1[162]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob1[163]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob1[164]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob1[165]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob1[166]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob1[167]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob1[168]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob1[169]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob1[170]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob1[171]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob1[172]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob1[173]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob1[174]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "With one or more editable steps held, adds or changes their lock for this knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern is saved later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob2[80]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "With one or more editable steps held, adds or changes their lock for this knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern is saved later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob2[81]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob2[134]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob2[135]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob2[136]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob2[137]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob2[138]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob2[139]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob2[140]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob2[141]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob2[142]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob2[143]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob2[144]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob2[145]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob2[146]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob2[147]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob2[148]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob2[149]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob2[150]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob2[151]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob2[152]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob2[153]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob2[154]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob2[155]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob2[156]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob2[157]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob2[158]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob2[159]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob2[160]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob2[161]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob2[162]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob2[163]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob2[164]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob2[165]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob2[166]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob2[167]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob2[168]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob2[169]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob2[170]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob2[171]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob2[172]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob2[173]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob2[174]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob2[175]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob2[176]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "With one or more editable steps held, adds or changes their lock for this knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern is saved later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob3[80]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "With one or more editable steps held, adds or changes their lock for this knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern is saved later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob3[81]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob3[135]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob3[136]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob3[137]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob3[138]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob3[139]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob3[140]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob3[141]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob3[142]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob3[143]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob3[144]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob3[145]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob3[146]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob3[147]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob3[148]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob3[149]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob3[150]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob3[151]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob3[152]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob3[153]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob3[154]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob3[155]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob3[156]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob3[157]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob3[158]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob3[159]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob3[160]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob3[161]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob3[162]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob3[163]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob3[164]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob3[165]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob3[166]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob3[167]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob3[168]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob3[169]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob3[170]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob3[171]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob3[172]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob3[173]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob3[174]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob3[175]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob3[176]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob3[177]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "With one or more editable steps held, adds or changes their lock for this knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern is saved later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob4[79]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "With one or more editable steps held, adds or changes their lock for this knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern is saved later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob4[80]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob4[134]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob4[135]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob4[136]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob4[137]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob4[138]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob4[139]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob4[140]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob4[141]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob4[142]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob4[143]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob4[144]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob4[145]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob4[146]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob4[147]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob4[148]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob4[149]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob4[150]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob4[151]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob4[152]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob4[153]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob4[154]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob4[155]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob4[156]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob4[157]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob4[158]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob4[159]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob4[160]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob4[161]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob4[162]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob4[163]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob4[164]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob4[165]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob4[166]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob4[167]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob4[168]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob4[169]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob4[170]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob4[171]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob4[172]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob4[173]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob4[174]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob4[175]"
  },
  {
   "round": 1,
   "error": "7 lockable parameter condition",
   "fixed": "Adds or changes this held step’s lock for the knob’s last sound-page parameter in memory without a question; SAVE held can undo it and the pattern saves later; the remembered field must support locks, so blank or non-lockable fields do nothing, including KNOB 1 after DRUM LANES.",
   "at": "controls.encoder_knob4[176]"
  },
  {
   "round": 1,
   "error": "8 rename access",
   "fixed": "Enter NAME through a USER or PROJECT SAVE action, or choose that page’s NAME action and tap OCT+ to rename its used slot; D# changes ABC/123 typing.",
   "at": "modes[94] (name_abc); source"
  },
  {
   "round": 1,
   "error": "8 rename access",
   "fixed": "Enter NAME through a USER or PROJECT SAVE action, or choose that page’s NAME action and tap OCT+ to rename its used slot; D# changes ABC/123 typing.",
   "at": "modes[95] (name_num); source"
  },
  {
   "round": 1,
   "error": "9 BPM LOCK access",
   "fixed": "With MENU > CONTROL > BPM LOCK on, on a ANALOG track, tap EDIT and use SELECT for OSC.",
   "at": "modes[43] (edit_analog_1); source"
  },
  {
   "round": 1,
   "error": "9 BPM LOCK access",
   "fixed": "With MENU > CONTROL > BPM LOCK on, on a ANALOG track, tap EDIT and use SELECT for FLT.",
   "at": "modes[44] (edit_analog_2); source"
  },
  {
   "round": 1,
   "error": "9 BPM LOCK access",
   "fixed": "With MENU > CONTROL > BPM LOCK on, on a DRUM track, tap EDIT and use SELECT for KIT.",
   "at": "modes[46] (edit_drum_1); source"
  },
  {
   "round": 1,
   "error": "9 BPM LOCK access",
   "fixed": "With MENU > CONTROL > BPM LOCK on, on a DRUM track, tap EDIT and use SELECT for HIT.",
   "at": "modes[47] (edit_drum_2); source"
  },
  {
   "round": 1,
   "error": "9 BPM LOCK access",
   "fixed": "With MENU > CONTROL > BPM LOCK on, on a DRUM-X track, tap EDIT and use SELECT for KIT.",
   "at": "modes[49] (edit_drumx_1); source"
  },
  {
   "round": 1,
   "error": "9 BPM LOCK access",
   "fixed": "With MENU > CONTROL > BPM LOCK on, on a DRUM-X track, tap EDIT and use SELECT for HIT.",
   "at": "modes[50] (edit_drumx_2); source"
  },
  {
   "round": 1,
   "error": "9 BPM LOCK access",
   "fixed": "With MENU > CONTROL > BPM LOCK on, on a FM6 track, tap EDIT and use SELECT for OPS.",
   "at": "modes[52] (edit_fm6_1); source"
  },
  {
   "round": 1,
   "error": "9 BPM LOCK access",
   "fixed": "With MENU > CONTROL > BPM LOCK on, on a FM6 track, tap EDIT and use SELECT for PATCH.",
   "at": "modes[53] (edit_fm6_2); source"
  },
  {
   "round": 1,
   "error": "9 BPM LOCK access",
   "fixed": "With MENU > CONTROL > BPM LOCK on, on a VOICE track, tap EDIT and use SELECT for VOWEL.",
   "at": "modes[55] (edit_voice_1); source"
  },
  {
   "round": 1,
   "error": "9 BPM LOCK access",
   "fixed": "With MENU > CONTROL > BPM LOCK on, on a VOICE track, tap EDIT and use SELECT for TONE.",
   "at": "modes[56] (edit_voice_2); source"
  },
  {
   "round": 1,
   "error": "9 BPM LOCK access",
   "fixed": "With MENU > CONTROL > BPM LOCK on, on a GRAIN track, tap EDIT and use SELECT for GRAIN.",
   "at": "modes[58] (edit_grain_1); source"
  },
  {
   "round": 1,
   "error": "9 BPM LOCK access",
   "fixed": "With MENU > CONTROL > BPM LOCK on, on a GRAIN track, tap EDIT and use SELECT for SPRAY.",
   "at": "modes[59] (edit_grain_2); source"
  },
  {
   "round": 1,
   "error": "9 BPM LOCK access",
   "fixed": "With MENU > CONTROL > BPM LOCK on, on a LOFI track, tap EDIT and use SELECT for CHIP.",
   "at": "modes[61] (edit_lofi_1); source"
  },
  {
   "round": 1,
   "error": "9 BPM LOCK access",
   "fixed": "With MENU > CONTROL > BPM LOCK on, on a LOFI track, tap EDIT and use SELECT for MOTION.",
   "at": "modes[62] (edit_lofi_2); source"
  },
  {
   "round": 1,
   "error": "9 BPM LOCK access",
   "fixed": "With MENU > CONTROL > BPM LOCK on, on a NOISE track, tap EDIT and use SELECT for SOURCE.",
   "at": "modes[64] (edit_noise_1); source"
  },
  {
   "round": 1,
   "error": "9 BPM LOCK access",
   "fixed": "With MENU > CONTROL > BPM LOCK on, on a NOISE track, tap EDIT and use SELECT for MOVE.",
   "at": "modes[65] (edit_noise_2); source"
  },
  {
   "round": 1,
   "error": "9 BPM LOCK access",
   "fixed": "With MENU > CONTROL > BPM LOCK on, on a PHASE track, tap EDIT and use SELECT for PHASE.",
   "at": "modes[67] (edit_phase_1); source"
  },
  {
   "round": 1,
   "error": "9 BPM LOCK access",
   "fixed": "With MENU > CONTROL > BPM LOCK on, on a PHASE track, tap EDIT and use SELECT for LINE.",
   "at": "modes[68] (edit_phase_2); source"
  },
  {
   "round": 1,
   "error": "9 BPM LOCK access",
   "fixed": "With MENU > CONTROL > BPM LOCK on, on a PHYS track, tap EDIT and use SELECT for BODY.",
   "at": "modes[70] (edit_phys_1); source"
  },
  {
   "round": 1,
   "error": "9 BPM LOCK access",
   "fixed": "With MENU > CONTROL > BPM LOCK on, on a PHYS track, tap EDIT and use SELECT for EXCITE.",
   "at": "modes[71] (edit_phys_2); source"
  },
  {
   "round": 1,
   "error": "9 BPM LOCK access",
   "fixed": "With MENU > CONTROL > BPM LOCK on, on a SAMPLE track, tap EDIT and use SELECT for SET.",
   "at": "modes[73] (edit_sample_1); source"
  },
  {
   "round": 1,
   "error": "9 BPM LOCK access",
   "fixed": "With MENU > CONTROL > BPM LOCK on, on a SAMPLE track, tap EDIT and use SELECT for TONE.",
   "at": "modes[74] (edit_sample_2); source"
  },
  {
   "round": 1,
   "error": "9 BPM LOCK access",
   "fixed": "With MENU > CONTROL > BPM LOCK on, on a SLICE track, tap EDIT and use SELECT for SLICE.",
   "at": "modes[76] (edit_slice_1); source"
  },
  {
   "round": 1,
   "error": "9 BPM LOCK access",
   "fixed": "With MENU > CONTROL > BPM LOCK on, on a SLICE track, tap EDIT and use SELECT for PLAYBACK.",
   "at": "modes[77] (edit_slice_2); source"
  },
  {
   "round": 1,
   "error": "9 BPM LOCK access",
   "fixed": "With MENU > CONTROL > BPM LOCK on, on a TRIO track, tap EDIT and use SELECT for OSC.",
   "at": "modes[79] (edit_trio_1); source"
  },
  {
   "round": 1,
   "error": "9 BPM LOCK access",
   "fixed": "With MENU > CONTROL > BPM LOCK on, on a TRIO track, tap EDIT and use SELECT for TONE.",
   "at": "modes[80] (edit_trio_2); source"
  },
  {
   "round": 1,
   "error": "9 BPM LOCK access",
   "fixed": "With MENU > CONTROL > BPM LOCK on, on a WHEEL track, tap EDIT and use SELECT for BARS.",
   "at": "modes[82] (edit_wheel_1); source"
  },
  {
   "round": 1,
   "error": "9 BPM LOCK access",
   "fixed": "With MENU > CONTROL > BPM LOCK on, on a WHEEL track, tap EDIT and use SELECT for TONE.",
   "at": "modes[83] (edit_wheel_2); source"
  },
  {
   "round": 1,
   "error": "9 BPM LOCK sheet access",
   "fixed": "Open EDIT on an FM6 track and turn SELECT to this window with BPM LOCK on until the sheet opens; inside the sheet, SELECT moves its windows regardless of BPM LOCK.",
   "at": "modes[97] (fmop_tone); source"
  },
  {
   "round": 1,
   "error": "9 BPM LOCK sheet access",
   "fixed": "Open EDIT on an FM6 track and turn SELECT to this window with BPM LOCK on until the sheet opens; inside the sheet, SELECT moves its windows regardless of BPM LOCK.",
   "at": "modes[98] (fmop_env1); source"
  },
  {
   "round": 1,
   "error": "9 BPM LOCK sheet access",
   "fixed": "Open EDIT on an FM6 track and turn SELECT to this window with BPM LOCK on until the sheet opens; inside the sheet, SELECT moves its windows regardless of BPM LOCK.",
   "at": "modes[99] (fmop_env2); source"
  },
  {
   "round": 1,
   "error": "9 BPM LOCK sheet access",
   "fixed": "Open EDIT on an FM6 track and turn SELECT to this window with BPM LOCK on until the sheet opens; inside the sheet, SELECT moves its windows regardless of BPM LOCK.",
   "at": "modes[100] (fmop_keys); source"
  },
  {
   "round": 1,
   "error": "9 BPM LOCK sheet access",
   "fixed": "Open EDIT on an FM6 track and turn SELECT to this window with BPM LOCK on until the sheet opens; inside the sheet, SELECT moves its windows regardless of BPM LOCK.",
   "at": "modes[101] (fmop_more); source"
  },
  {
   "round": 1,
   "error": "9 BPM LOCK sheet access",
   "fixed": "Open EDIT on an FM6 track and turn SELECT to this window with BPM LOCK on until the sheet opens; inside the sheet, SELECT moves its windows regardless of BPM LOCK.",
   "at": "modes[102] (fmall_algo); source"
  },
  {
   "round": 1,
   "error": "9 BPM LOCK sheet access",
   "fixed": "Open EDIT on an FM6 track and turn SELECT to this window with BPM LOCK on until the sheet opens; inside the sheet, SELECT moves its windows regardless of BPM LOCK.",
   "at": "modes[103] (fmall_pitch1); source"
  },
  {
   "round": 1,
   "error": "9 BPM LOCK sheet access",
   "fixed": "Open EDIT on an FM6 track and turn SELECT to this window with BPM LOCK on until the sheet opens; inside the sheet, SELECT moves its windows regardless of BPM LOCK.",
   "at": "modes[104] (fmall_pitch2); source"
  },
  {
   "round": 1,
   "error": "9 BPM LOCK sheet access",
   "fixed": "Open EDIT on an FM6 track and turn SELECT to this window with BPM LOCK on until the sheet opens; inside the sheet, SELECT moves its windows regardless of BPM LOCK.",
   "at": "modes[105] (fmall_lfo); source"
  },
  {
   "round": 1,
   "error": "9 BPM LOCK sheet access",
   "fixed": "Open EDIT on an FM6 track and turn SELECT to this window with BPM LOCK on until the sheet opens; inside the sheet, SELECT moves its windows regardless of BPM LOCK.",
   "at": "modes[106] (fmall_depth); source"
  },
  {
   "round": 1,
   "error": "9 BPM LOCK sheet access",
   "fixed": "Open EDIT on a DRUM-X track and use SELECT to reach this SOUND window with BPM LOCK on until the sheet opens; inside the sheet, SELECT moves its windows regardless of BPM LOCK.",
   "at": "modes[107] (dx_osc); source"
  },
  {
   "round": 1,
   "error": "9 BPM LOCK sheet access",
   "fixed": "Open EDIT on a DRUM-X track and use SELECT to reach this SOUND window with BPM LOCK on until the sheet opens; inside the sheet, SELECT moves its windows regardless of BPM LOCK.",
   "at": "modes[108] (dx_decay); source"
  },
  {
   "round": 1,
   "error": "9 BPM LOCK sheet access",
   "fixed": "Open EDIT on a DRUM-X track and use SELECT to reach this SOUND window with BPM LOCK on until the sheet opens; inside the sheet, SELECT moves its windows regardless of BPM LOCK.",
   "at": "modes[109] (dx_color); source"
  },
  {
   "round": 1,
   "error": "9 BPM LOCK sheet access",
   "fixed": "Open EDIT on a DRUM-X track and use SELECT to reach this SOUND window with BPM LOCK on until the sheet opens; inside the sheet, SELECT moves its windows regardless of BPM LOCK.",
   "at": "modes[110] (dx_mode); source"
  },
  {
   "round": 1,
   "error": "9 BPM LOCK access",
   "fixed": "With MENU > CONTROL > BPM LOCK on, open EDIT on a SLICE track and turn SELECT to SLICES.",
   "at": "modes[111] (slices); source"
  },
  {
   "round": 1,
   "error": "10 TAKE REC condition",
   "fixed": "Disarm REC on the selected track, play a complete loop, then hold HOME and press SAVE.",
   "at": "modes[96] (take_result); source"
  },
  {
   "round": 1,
   "error": "11 DUB release",
   "fixed": "Stops sending fresh mix into DUB’s delay while existing echoes fade and any held buffer effect continues unchanged.",
   "at": "controls.key_c5[10]"
  },
  {
   "round": 1,
   "error": "12 SOUND keys select drum",
   "fixed": "Added note-driven selection of the shared-kit sound on all 27 keys in this window.",
   "at": "controls.key_f3[28]; controls.key_fs3[24]; controls.key_g3[27]; controls.key_gs3[22]; controls.key_a3[27]; controls.key_as3[24]; controls.key_b3[27]; controls.key_c4[26]; controls.key_cs4[24]; controls.key_d4[27]; controls.key_ds4[22]; controls.key_e4[27]; controls.key_f4[26]; controls.key_fs4[24]; controls.key_g4[27]; controls.key_gs4[20]; controls.key_a4[26]; controls.key_as4[22]; controls.key_b4[26]; controls.key_c5[26]; controls.key_cs5[22]; controls.key_d5[26]; controls.key_ds5[20]; controls.key_e5[26]; controls.key_f5[24]; controls.key_fs5[22]; controls.key_g5[24]"
  },
  {
   "round": 1,
   "error": "12 SOUND keys select drum",
   "fixed": "Added note-driven selection of the shared-kit sound on all 27 keys in this window.",
   "at": "controls.key_f3[29]; controls.key_fs3[25]; controls.key_g3[28]; controls.key_gs3[23]; controls.key_a3[28]; controls.key_as3[25]; controls.key_b3[28]; controls.key_c4[27]; controls.key_cs4[25]; controls.key_d4[28]; controls.key_ds4[23]; controls.key_e4[28]; controls.key_f4[27]; controls.key_fs4[25]; controls.key_g4[28]; controls.key_gs4[21]; controls.key_a4[27]; controls.key_as4[23]; controls.key_b4[27]; controls.key_c5[27]; controls.key_cs5[23]; controls.key_d5[27]; controls.key_ds5[21]; controls.key_e5[27]; controls.key_f5[25]; controls.key_fs5[23]; controls.key_g5[25]"
  },
  {
   "round": 1,
   "error": "12 SOUND keys select drum",
   "fixed": "Added note-driven selection of the shared-kit sound on all 27 keys in this window.",
   "at": "controls.key_f3[30]; controls.key_fs3[26]; controls.key_g3[29]; controls.key_gs3[24]; controls.key_a3[29]; controls.key_as3[26]; controls.key_b3[29]; controls.key_c4[28]; controls.key_cs4[26]; controls.key_d4[29]; controls.key_ds4[24]; controls.key_e4[29]; controls.key_f4[28]; controls.key_fs4[26]; controls.key_g4[29]; controls.key_gs4[22]; controls.key_a4[28]; controls.key_as4[24]; controls.key_b4[28]; controls.key_c5[28]; controls.key_cs5[24]; controls.key_d5[28]; controls.key_ds5[22]; controls.key_e5[28]; controls.key_f5[26]; controls.key_fs5[24]; controls.key_g5[26]"
  },
  {
   "round": 1,
   "error": "12 SOUND keys select drum",
   "fixed": "Added note-driven selection of the shared-kit sound on all 27 keys in this window.",
   "at": "controls.key_f3[31]; controls.key_fs3[27]; controls.key_g3[30]; controls.key_gs3[25]; controls.key_a3[30]; controls.key_as3[27]; controls.key_b3[30]; controls.key_c4[29]; controls.key_cs4[27]; controls.key_d4[30]; controls.key_ds4[25]; controls.key_e4[30]; controls.key_f4[29]; controls.key_fs4[27]; controls.key_g4[30]; controls.key_gs4[23]; controls.key_a4[29]; controls.key_as4[25]; controls.key_b4[29]; controls.key_c5[29]; controls.key_cs5[25]; controls.key_d5[29]; controls.key_ds5[23]; controls.key_e5[29]; controls.key_f5[27]; controls.key_fs5[25]; controls.key_g5[27]"
  },
  {
   "round": 1,
   "error": "13 action-page octave lights",
   "fixed": "Added back and readiness meanings instead of octave indication.",
   "at": "lights.button_oct_down[14]; lights.button_oct_up[5]"
  },
  {
   "round": 1,
   "error": "13 action-page octave lights",
   "fixed": "Added back and readiness meanings instead of octave indication.",
   "at": "lights.button_oct_down[15]; lights.button_oct_up[6]"
  },
  {
   "round": 1,
   "error": "13 action-page octave lights",
   "fixed": "Added back and readiness meanings instead of octave indication.",
   "at": "lights.button_oct_down[16]; lights.button_oct_up[7]"
  },
  {
   "round": 1,
   "error": "13 action-page octave lights",
   "fixed": "Added back and readiness meanings instead of octave indication.",
   "at": "lights.button_oct_down[17]; lights.button_oct_up[8]"
  },
  {
   "round": 1,
   "error": "13 action-page octave lights",
   "fixed": "Added back and readiness meanings instead of octave indication.",
   "at": "lights.button_oct_down[18]; lights.button_oct_up[9]"
  },
  {
   "round": 1,
   "error": "13 action-page octave lights",
   "fixed": "Added back and readiness meanings instead of octave indication.",
   "at": "lights.button_oct_down[19]; lights.button_oct_up[10]"
  },
  {
   "round": 1,
   "error": "13 MENU value-direction lights",
   "fixed": "Added independent previous/next availability indicators.",
   "at": "lights.button_oct_down[20]; lights.button_oct_up[11]"
  },
  {
   "round": 1,
   "error": "13 MENU value-direction lights",
   "fixed": "Added independent previous/next availability indicators.",
   "at": "lights.button_oct_down[21]; lights.button_oct_up[12]"
  },
  {
   "round": 1,
   "error": "13 MENU value-direction lights",
   "fixed": "Added independent previous/next availability indicators.",
   "at": "lights.button_oct_down[22]; lights.button_oct_up[13]"
  },
  {
   "round": 1,
   "error": "13 MENU value-direction lights",
   "fixed": "Added independent previous/next availability indicators.",
   "at": "lights.button_oct_down[23]; lights.button_oct_up[14]"
  },
  {
   "round": 1,
   "error": "13 MENU action-opening light",
   "fixed": "Added the action-row opening indicator.",
   "at": "lights.button_oct_up[15]"
  },
  {
   "round": 1,
   "error": "13 ABOUT back light",
   "fixed": "Added the information-screen back indicator.",
   "at": "lights.button_oct_down[24]"
  },
  {
   "round": 1,
   "error": "14 pattern-save timing exceptions",
   "fixed": "Sound knobs and sequencer edits change memory first; pattern edits save automatically normally after stop and ten idle seconds, with a one-minute gap between rounds that a full pending queue can bypass, even with RESTORE LAST off; stopped pattern operations can also flush immediately to free pending-queue space; enabled RESTORE LAST also keeps the live project, while named project and sound saves write on confirmation and power-off performs no final save; when all 64 patterns are occupied, new notes on a track with no assigned pattern can be missing after restart even though the session autosave completes, because that save contains no copy of those steps; make room and complete a project save that reports SAVED before powering off.",
   "at": "saving_note.text; saving_note.source"
  },
  {
   "round": 1,
   "error": "14 pattern-save timing exceptions",
   "fixed": "Skiff keeps four projects, 64 shared patterns, 32 user sounds with their own FM6 patches, three user sample sets, saved MAN slice markers, and settings including panel calibration and stars. A project names patterns in one shared pool; changing a shared pattern changes every entry that uses it. Changed patterns save themselves after a quiet stopped pause, even with RESTORE LAST off. With RESTORE LAST on, the last session also saves after ten quiet seconds, normally with a minute between save rounds, though a full pending queue bypasses that gap and a stopped pattern operation can flush immediately to make room. Save a project or take a full backup to flush patterns while stopped. Powering off does not start a save. First start can also change and save settings, and convert accepted older projects, without asking. When all 64 patterns are occupied, new notes on a track with no assigned pattern can be missing after restart even though the session autosave completes, because that save contains no copy of those steps; make room and complete a project save that reports SAVED before powering off.",
   "at": "switching_note.kept_on_unit; switching_note.source"
  },
  {
   "round": 1,
   "error": "14 pattern-save timing exceptions",
   "fixed": "Qualified the normal autosave interval with the full-pending-queue exception; retained the pattern-pool row’s immediate stopped-flush exception.",
   "at": "refresh/work/skiff.storage.json objects[id=skiff.autosave].written_when[0].trigger/src"
  },
  {
   "round": 1,
   "error": "15 NAME cancel citation",
   "fixed": "Replaced the non-cancelling name-input lines with the OCT- cancellation branch.",
   "at": "controls.button_oct_down[58].source"
  },
  {
   "round": 1,
   "error": "15 NAME cancel citation",
   "fixed": "Replaced the non-cancelling name-input lines with the OCT- cancellation branch.",
   "at": "controls.button_oct_down[59].source"
  },
  {
   "round": 1,
   "error": "15 NAME cancel citation",
   "fixed": "Replaced the non-cancelling name-input lines with the OCT- cancellation branch.",
   "at": "controls.button_oct_down[60].source"
  },
  {
   "round": 1,
   "error": "15 NAME cancel citation",
   "fixed": "Replaced the non-cancelling name-input lines with the OCT- cancellation branch.",
   "at": "controls.button_oct_down[61].source"
  },
  {
   "round": 1,
   "error": "1 switching-table precaution",
   "fixed": "Switching to Skiff 1.1 leaves out the newer effects, second envelope and drum controls. An ENV2 modulation source becomes EXPR there; turn that slot off if needed. Saving in 1.1 permanently drops the newer settings, and some sound names or built-in SLICE samples differ. Skiff is not in Les’s switching table yet, so back up before switching. Other firmwares can overwrite its work at startup and during ordinary use, without a save action; see the flash atlas.",
   "at": "switching_note.lost"
  },
  {
   "round": 1,
   "error": "1 Felucca-ancestry qualification",
   "fixed": "Qualified the compatibility comparison by the README’s explicit Felucca 1.1.5 ancestry and removed an unqualified atlas pointer.",
   "at": "disagreements[0].docs_say/source_says"
  },
  {
   "round": 1,
   "error": "5 loading side-effect wording",
   "fixed": "Consolidated engine-change and shared-kit qualifications; within-engine browsing preserves automation.",
   "at": "controls.encoder_presets[0].action"
  },
  {
   "round": 1,
   "error": "5 loading side-effect wording",
   "fixed": "Consolidated engine-change and shared-kit qualifications; within-engine browsing preserves automation.",
   "at": "controls.encoder_knob1[73].action"
  },
  {
   "round": 1,
   "error": "5 loading side-effect wording",
   "fixed": "Consolidated engine-change and shared-kit qualifications; within-engine browsing preserves automation.",
   "at": "controls.encoder_knob2[74].action"
  },
  {
   "round": 1,
   "error": "5 loading side-effect wording",
   "fixed": "Consolidated engine-change and shared-kit qualifications; within-engine browsing preserves automation.",
   "at": "controls.encoder_knob2[75].action"
  },
  {
   "round": 1,
   "error": "5 loading side-effect wording",
   "fixed": "Consolidated engine-change and shared-kit qualifications; within-engine browsing preserves automation.",
   "at": "controls.encoder_knob2[88].action"
  },
  {
   "round": 1,
   "error": "5 loading side-effect wording",
   "fixed": "Consolidated engine-change and shared-kit qualifications; within-engine browsing preserves automation.",
   "at": "controls.button_oct_up[4].action"
  },
  {
   "round": 1,
   "error": "13 SLICES octave lights",
   "fixed": "Made back indication cover built-in samples and qualified split/join readiness for user material.",
   "at": "lights.button_oct_down[19]"
  },
  {
   "round": 1,
   "error": "13 SLICES octave lights",
   "fixed": "Made back indication cover built-in samples and qualified split/join readiness for user material.",
   "at": "lights.button_oct_up[10]"
  },
  {
   "round": 1,
   "error": "4 stored load side effects",
   "fixed": "Documented the corrected RAM scope and later persistence without adding a flash region.",
   "at": "refresh/work/skiff.storage.json firmware_notes[2]"
  },
  {
   "round": 1,
   "error": "5 stored load side effects",
   "fixed": "Documented the corrected RAM scope and later persistence without adding a flash region.",
   "at": "refresh/work/skiff.storage.json firmware_notes[3]"
  },
  {
   "round": 2,
   "error": "1 END LPF release",
   "fixed": "Ends this key’s low-pass sweep while any FILTER macro setting and buffer effect continue.",
   "at": "controls.key_c4[10]; matching guide row"
  },
  {
   "round": 2,
   "error": "1 END HPF release",
   "fixed": "Ends this key’s high-pass sweep while any FILTER macro setting and buffer effect continue.",
   "at": "controls.key_d4[10]; matching guide row"
  },
  {
   "round": 2,
   "error": "1 END GATE release",
   "fixed": "Ends the key’s rhythmic chopping and returns its gate toward full level while any buffer effect continues.",
   "at": "controls.key_b4[10]; matching guide row"
  },
  {
   "round": "spot-1",
   "error": "1",
   "fixed": "Replaced preservation claims with byte-specific partial loss and return behavior; added owner warning in both map formats.",
   "at": "switching_note.imported_settings_warning; reads_foreign[felucca.settings,jiant.settings]; settings startup writes",
   "why": "firmware/src/bank.c:873-876,1329-1334@5bbd35d; firmware/src/main.c:189-197@5bbd35d; firmware/src/ui.c:87-97,519-531@5bbd35d; firmware/src/project.c:1409-1440@5bbd35d; foreign byte meanings cited in switching_note.source"
  },
  {
   "round": "spot-1",
   "error": "3",
   "fixed": "Updated action and label; matching guide row updated.",
   "at": "controls.encoder_knob4[75]",
   "why": "firmware/src/ui.c:1667-1683@5bbd35d; firmware/src/ui_input.c:853-869@5bbd35d"
  },
  {
   "round": "spot-1",
   "error": "5",
   "fixed": "Updated action; matching guide row updated.",
   "at": "controls.button_home[1]",
   "why": "firmware/src/ui_input.c:1035-1049@5bbd35d; firmware/src/ui_input.c:1203-1228@5bbd35d"
  },
  {
   "round": "spot-1",
   "error": "2",
   "fixed": "Updated action and label; matching guide row updated.",
   "at": "controls.key_g5[21]",
   "why": "firmware/src/ui_name.c:29-32@5bbd35d; firmware/src/ui_name.c:57-63@5bbd35d; firmware/src/ui_name.c:139-159@5bbd35d; firmware/src/seq.c:55-62@5bbd35d"
  },
  {
   "round": "spot-1",
   "error": "2",
   "fixed": "Removed false truncation warning; recorded the plus character without moving the item.",
   "at": "undocumented[0]; guide NAME note and Source caveats",
   "why": "firmware/src/ui_name.c:31,57-63,139-159@5bbd35d"
  },
  {
   "round": "spot-1",
   "error": "6",
   "fixed": "Updated action; matching guide row updated.",
   "at": "controls.key_f3[23]",
   "why": "firmware/src/project.c:1148-1152@5bbd35d; firmware/src/project.c:1498-1507@5bbd35d; firmware/src/project.c:1580-1621@5bbd35d"
  },
  {
   "round": "spot-1",
   "error": "6",
   "fixed": "Updated action; matching guide row updated.",
   "at": "controls.key_g3[22]",
   "why": "firmware/src/project.c:1148-1152@5bbd35d; firmware/src/project.c:1498-1507@5bbd35d; firmware/src/project.c:1580-1621@5bbd35d"
  },
  {
   "round": "spot-1",
   "error": "6",
   "fixed": "Updated action; matching guide row updated.",
   "at": "controls.key_a3[22]",
   "why": "firmware/src/project.c:1148-1152@5bbd35d; firmware/src/project.c:1498-1507@5bbd35d; firmware/src/project.c:1580-1621@5bbd35d"
  },
  {
   "round": "spot-1",
   "error": "6",
   "fixed": "Updated action; matching guide row updated.",
   "at": "controls.key_b3[22]",
   "why": "firmware/src/project.c:1148-1152@5bbd35d; firmware/src/project.c:1498-1507@5bbd35d; firmware/src/project.c:1580-1621@5bbd35d"
  },
  {
   "round": "spot-1",
   "error": "6",
   "fixed": "Updated action; matching guide row updated.",
   "at": "controls.key_c4[21]",
   "why": "firmware/src/project.c:1148-1152@5bbd35d; firmware/src/project.c:1498-1507@5bbd35d; firmware/src/project.c:1580-1621@5bbd35d"
  },
  {
   "round": "spot-1",
   "error": "6",
   "fixed": "Updated action; matching guide row updated.",
   "at": "controls.key_d4[22]",
   "why": "firmware/src/project.c:1148-1152@5bbd35d; firmware/src/project.c:1498-1507@5bbd35d; firmware/src/project.c:1580-1621@5bbd35d"
  },
  {
   "round": "spot-1",
   "error": "6",
   "fixed": "Updated action; matching guide row updated.",
   "at": "controls.key_e4[22]",
   "why": "firmware/src/project.c:1148-1152@5bbd35d; firmware/src/project.c:1498-1507@5bbd35d; firmware/src/project.c:1580-1621@5bbd35d"
  },
  {
   "round": "spot-1",
   "error": "6",
   "fixed": "Updated action; matching guide row updated.",
   "at": "controls.key_f4[21]",
   "why": "firmware/src/project.c:1148-1152@5bbd35d; firmware/src/project.c:1498-1507@5bbd35d; firmware/src/project.c:1580-1621@5bbd35d"
  },
  {
   "round": "spot-1",
   "error": "6",
   "fixed": "Updated action; matching guide row updated.",
   "at": "controls.key_g4[22]",
   "why": "firmware/src/project.c:1148-1152@5bbd35d; firmware/src/project.c:1498-1507@5bbd35d; firmware/src/project.c:1580-1621@5bbd35d"
  },
  {
   "round": "spot-1",
   "error": "6",
   "fixed": "Updated action; matching guide row updated.",
   "at": "controls.key_a4[21]",
   "why": "firmware/src/project.c:1148-1152@5bbd35d; firmware/src/project.c:1498-1507@5bbd35d; firmware/src/project.c:1580-1621@5bbd35d"
  },
  {
   "round": "spot-1",
   "error": "6",
   "fixed": "Updated action; matching guide row updated.",
   "at": "controls.key_b4[21]",
   "why": "firmware/src/project.c:1148-1152@5bbd35d; firmware/src/project.c:1498-1507@5bbd35d; firmware/src/project.c:1580-1621@5bbd35d"
  },
  {
   "round": "spot-1",
   "error": "6",
   "fixed": "Updated action; matching guide row updated.",
   "at": "controls.key_c5[21]",
   "why": "firmware/src/project.c:1148-1152@5bbd35d; firmware/src/project.c:1498-1507@5bbd35d; firmware/src/project.c:1580-1621@5bbd35d"
  },
  {
   "round": "spot-1",
   "error": "6",
   "fixed": "Updated action; matching guide row updated.",
   "at": "controls.key_d5[21]",
   "why": "firmware/src/project.c:1148-1152@5bbd35d; firmware/src/project.c:1498-1507@5bbd35d; firmware/src/project.c:1580-1621@5bbd35d"
  },
  {
   "round": "spot-1",
   "error": "6",
   "fixed": "Updated action; matching guide row updated.",
   "at": "controls.key_e5[21]",
   "why": "firmware/src/project.c:1148-1152@5bbd35d; firmware/src/project.c:1498-1507@5bbd35d; firmware/src/project.c:1580-1621@5bbd35d"
  },
  {
   "round": "spot-1",
   "error": "6",
   "fixed": "Updated action; matching guide row updated.",
   "at": "controls.key_f5[19]",
   "why": "firmware/src/project.c:1148-1152@5bbd35d; firmware/src/project.c:1498-1507@5bbd35d; firmware/src/project.c:1580-1621@5bbd35d"
  },
  {
   "round": "spot-1",
   "error": "6",
   "fixed": "Updated action; matching guide row updated.",
   "at": "controls.key_g5[19]",
   "why": "firmware/src/project.c:1148-1152@5bbd35d; firmware/src/project.c:1498-1507@5bbd35d; firmware/src/project.c:1580-1621@5bbd35d"
  },
  {
   "round": "spot-1",
   "error": "7",
   "fixed": "Updated action; matching guide row updated.",
   "at": "controls.button_oct_down[24]",
   "why": "firmware/src/menu_items.c:61-64@5bbd35d; firmware/src/menu_items.c:228-237@5bbd35d"
  },
  {
   "round": "spot-1",
   "error": "8",
   "fixed": "Added the held or locked PERFORM prerequisite in JSON and guide.",
   "at": "modes[128].how_to_get_there",
   "why": "firmware/src/ui_layer.c:178-184,511-517@5bbd35d"
  },
  {
   "round": "spot-1",
   "error": "4",
   "fixed": "Added editor write triggers with exact browser questions, stop/write timing and undo limits; added installer backup route in all three files.",
   "at": "storage objects project_a–d, pattern_pool, user_presets_1–2, fm6_user_patches; backup; saving_note.editor; backup_note.routes; switching_note.back_up_first",
   "why": "firmware/src/editor_project.c:58-64@5bbd35d; firmware/src/editor_song.c:43-72@5bbd35d; firmware/src/editor.c:597-603,746-776@5bbd35d; web/editor.html:3507,3530,4177,5841,5864@5bbd35d; web/index_pkg.html:218-245@5bbd35d"
  },
  {
   "round": "spot-1",
   "error": "6",
   "fixed": "Explicitly named scenes in the session autosave payload and trigger.",
   "at": "storage.objects[skiff.autosave].holds/written_when[0]",
   "why": "firmware/src/project.c:1152,1503,1580-1621@5bbd35d"
  },
  {
   "round": "spot-2",
   "error": "1",
   "at": "switching_note.imported_settings_warning; reads_foreign[felucca.settings,jiant.settings]; firmware_notes[4]; guide",
   "fixed": "Added SCREEN OFF 30 MIN returning as NEVER and Felucca BPM LOCK enabled by revision migration.",
   "why": "firmware/src/settings_persist.c:47-48@5bbd35d; firmware/src/main.c:189-192@5bbd35d; foreign screen-code sources in switching_note.source"
  },
  {
   "round": "spot-2",
   "error": "3",
   "at": "reads_foreign[felucca.settings,jiant.settings]; switching_note.imported_settings_warning; firmware_notes[4]; guide",
   "fixed": "Corrected shared FX bytes18–20: clamped unit values can save after one second without revision migration.",
   "why": "firmware/src/ui.c:503-531@5bbd35d; firmware/src/params.c:146-158@5bbd35d"
  },
  {
   "round": "spot-2",
   "error": "2",
   "at": "install_and_startup_writes[first or legacy startup settings writes]; switching_note.rejected_settings_warning; firmware_notes; guide",
   "fixed": "Restored the all-firmware defaults/rejection case and warned about FoMni’s project and SLOOP/X0X/Melodee settings.",
   "why": "firmware/src/settings_persist.c:25-31@5bbd35d; firmware/src/project.c:1373-1395@5bbd35d; firmware/src/main.c:189-197@5bbd35d; firmware/src/bank.c:1329-1334@5bbd35d; firmware/src/ui.c:527-531@5bbd35d"
  },
  {
   "round": "spot-2",
   "error": "4",
   "at": "controls.encoder_knob4[76] (formerly [75]); guide PATTERNS",
   "fixed": "Named the pending cancel choice and its effect on OCT-, while retaining CLEAR’s fixed status.",
   "why": "firmware/src/ui_input.c:794-797,1455-1465@5bbd35d; firmware/src/ui_draw.c:473-479@5bbd35d; firmware/src/ui.c:1679-1683@5bbd35d"
  },
  {
   "round": "spot-2",
   "error": "5",
   "at": "controls.encoder_knob1[0]",
   "fixed": "Inserted HOME CTRL 1; all previous indices 0–174 move up by one.",
   "why": "firmware/src/ui_input.c:1536-1542@5bbd35d; firmware/src/ui.c:1588-1594@5bbd35d"
  },
  {
   "round": "spot-2",
   "error": "5",
   "at": "controls.encoder_knob2[0]",
   "fixed": "Inserted HOME CTRL 2; all previous indices 0–176 move up by one.",
   "why": "firmware/src/ui_input.c:1536-1542@5bbd35d; firmware/src/ui.c:1588-1594@5bbd35d"
  },
  {
   "round": "spot-2",
   "error": "5",
   "at": "controls.encoder_knob3[0]",
   "fixed": "Inserted HOME CTRL 3; all previous indices 0–177 move up by one.",
   "why": "firmware/src/ui_input.c:1536-1542@5bbd35d; firmware/src/ui.c:1588-1594@5bbd35d"
  },
  {
   "round": "spot-2",
   "error": "5",
   "at": "controls.encoder_knob4[0]",
   "fixed": "Inserted HOME CTRL 4; all previous indices 0–176 move up by one.",
   "why": "firmware/src/ui_input.c:1536-1542@5bbd35d; firmware/src/ui.c:1588-1594@5bbd35d"
  },
  {
   "round": "spot-2",
   "error": "6",
   "at": "controls.button_oct_up[3]; controls.button_oct_down[62]",
   "fixed": "Replaced OCT+ alone long_press with press_with:button_oct_down; appended the matching two-button action on OCT- and corrected the guide.",
   "why": "firmware/src/main.c:220-246@5bbd35d; gesture vocabulary refresh/method/controlmap-format.md"
  },
  {
   "round": "spot-2",
   "error": "7",
   "at": "controls.key_f3[0]",
   "fixed": "Labelled the ordinary key press F3 and stated the chromatic default plus mapping exceptions.",
   "why": "firmware/src/seq.c:81-115,709-735@5bbd35d; firmware/src/core.h:413-429@5bbd35d; firmware/src/params.c:84-85@5bbd35d"
  },
  {
   "round": "spot-2",
   "error": "7",
   "at": "controls.key_fs3[0]",
   "fixed": "Labelled the ordinary key press F#3 and stated the chromatic default plus mapping exceptions.",
   "why": "firmware/src/seq.c:81-115,709-735@5bbd35d; firmware/src/core.h:413-429@5bbd35d; firmware/src/params.c:84-85@5bbd35d"
  },
  {
   "round": "spot-2",
   "error": "7",
   "at": "controls.key_g3[0]",
   "fixed": "Labelled the ordinary key press G3 and stated the chromatic default plus mapping exceptions.",
   "why": "firmware/src/seq.c:81-115,709-735@5bbd35d; firmware/src/core.h:413-429@5bbd35d; firmware/src/params.c:84-85@5bbd35d"
  },
  {
   "round": "spot-2",
   "error": "7",
   "at": "controls.key_gs3[0]",
   "fixed": "Labelled the ordinary key press G#3 and stated the chromatic default plus mapping exceptions.",
   "why": "firmware/src/seq.c:81-115,709-735@5bbd35d; firmware/src/core.h:413-429@5bbd35d; firmware/src/params.c:84-85@5bbd35d"
  },
  {
   "round": "spot-2",
   "error": "7",
   "at": "controls.key_a3[0]",
   "fixed": "Labelled the ordinary key press A3 and stated the chromatic default plus mapping exceptions.",
   "why": "firmware/src/seq.c:81-115,709-735@5bbd35d; firmware/src/core.h:413-429@5bbd35d; firmware/src/params.c:84-85@5bbd35d"
  },
  {
   "round": "spot-2",
   "error": "7",
   "at": "controls.key_as3[0]",
   "fixed": "Labelled the ordinary key press A#3 and stated the chromatic default plus mapping exceptions.",
   "why": "firmware/src/seq.c:81-115,709-735@5bbd35d; firmware/src/core.h:413-429@5bbd35d; firmware/src/params.c:84-85@5bbd35d"
  },
  {
   "round": "spot-2",
   "error": "7",
   "at": "controls.key_b3[0]",
   "fixed": "Labelled the ordinary key press B3 and stated the chromatic default plus mapping exceptions.",
   "why": "firmware/src/seq.c:81-115,709-735@5bbd35d; firmware/src/core.h:413-429@5bbd35d; firmware/src/params.c:84-85@5bbd35d"
  },
  {
   "round": "spot-2",
   "error": "7",
   "at": "controls.key_c4[0]",
   "fixed": "Labelled the ordinary key press C4 and stated the chromatic default plus mapping exceptions.",
   "why": "firmware/src/seq.c:81-115,709-735@5bbd35d; firmware/src/core.h:413-429@5bbd35d; firmware/src/params.c:84-85@5bbd35d"
  },
  {
   "round": "spot-2",
   "error": "7",
   "at": "controls.key_cs4[0]",
   "fixed": "Labelled the ordinary key press C#4 and stated the chromatic default plus mapping exceptions.",
   "why": "firmware/src/seq.c:81-115,709-735@5bbd35d; firmware/src/core.h:413-429@5bbd35d; firmware/src/params.c:84-85@5bbd35d"
  },
  {
   "round": "spot-2",
   "error": "7",
   "at": "controls.key_d4[0]",
   "fixed": "Labelled the ordinary key press D4 and stated the chromatic default plus mapping exceptions.",
   "why": "firmware/src/seq.c:81-115,709-735@5bbd35d; firmware/src/core.h:413-429@5bbd35d; firmware/src/params.c:84-85@5bbd35d"
  },
  {
   "round": "spot-2",
   "error": "7",
   "at": "controls.key_ds4[0]",
   "fixed": "Labelled the ordinary key press D#4 and stated the chromatic default plus mapping exceptions.",
   "why": "firmware/src/seq.c:81-115,709-735@5bbd35d; firmware/src/core.h:413-429@5bbd35d; firmware/src/params.c:84-85@5bbd35d"
  },
  {
   "round": "spot-2",
   "error": "7",
   "at": "controls.key_e4[0]",
   "fixed": "Labelled the ordinary key press E4 and stated the chromatic default plus mapping exceptions.",
   "why": "firmware/src/seq.c:81-115,709-735@5bbd35d; firmware/src/core.h:413-429@5bbd35d; firmware/src/params.c:84-85@5bbd35d"
  },
  {
   "round": "spot-2",
   "error": "7",
   "at": "controls.key_f4[0]",
   "fixed": "Labelled the ordinary key press F4 and stated the chromatic default plus mapping exceptions.",
   "why": "firmware/src/seq.c:81-115,709-735@5bbd35d; firmware/src/core.h:413-429@5bbd35d; firmware/src/params.c:84-85@5bbd35d"
  },
  {
   "round": "spot-2",
   "error": "7",
   "at": "controls.key_fs4[0]",
   "fixed": "Labelled the ordinary key press F#4 and stated the chromatic default plus mapping exceptions.",
   "why": "firmware/src/seq.c:81-115,709-735@5bbd35d; firmware/src/core.h:413-429@5bbd35d; firmware/src/params.c:84-85@5bbd35d"
  },
  {
   "round": "spot-2",
   "error": "7",
   "at": "controls.key_g4[0]",
   "fixed": "Labelled the ordinary key press G4 and stated the chromatic default plus mapping exceptions.",
   "why": "firmware/src/seq.c:81-115,709-735@5bbd35d; firmware/src/core.h:413-429@5bbd35d; firmware/src/params.c:84-85@5bbd35d"
  },
  {
   "round": "spot-2",
   "error": "7",
   "at": "controls.key_gs4[0]",
   "fixed": "Labelled the ordinary key press G#4 and stated the chromatic default plus mapping exceptions.",
   "why": "firmware/src/seq.c:81-115,709-735@5bbd35d; firmware/src/core.h:413-429@5bbd35d; firmware/src/params.c:84-85@5bbd35d"
  },
  {
   "round": "spot-2",
   "error": "7",
   "at": "controls.key_a4[0]",
   "fixed": "Labelled the ordinary key press A4 and stated the chromatic default plus mapping exceptions.",
   "why": "firmware/src/seq.c:81-115,709-735@5bbd35d; firmware/src/core.h:413-429@5bbd35d; firmware/src/params.c:84-85@5bbd35d"
  },
  {
   "round": "spot-2",
   "error": "7",
   "at": "controls.key_as4[0]",
   "fixed": "Labelled the ordinary key press A#4 and stated the chromatic default plus mapping exceptions.",
   "why": "firmware/src/seq.c:81-115,709-735@5bbd35d; firmware/src/core.h:413-429@5bbd35d; firmware/src/params.c:84-85@5bbd35d"
  },
  {
   "round": "spot-2",
   "error": "7",
   "at": "controls.key_b4[0]",
   "fixed": "Labelled the ordinary key press B4 and stated the chromatic default plus mapping exceptions.",
   "why": "firmware/src/seq.c:81-115,709-735@5bbd35d; firmware/src/core.h:413-429@5bbd35d; firmware/src/params.c:84-85@5bbd35d"
  },
  {
   "round": "spot-2",
   "error": "7",
   "at": "controls.key_c5[0]",
   "fixed": "Labelled the ordinary key press C5 and stated the chromatic default plus mapping exceptions.",
   "why": "firmware/src/seq.c:81-115,709-735@5bbd35d; firmware/src/core.h:413-429@5bbd35d; firmware/src/params.c:84-85@5bbd35d"
  },
  {
   "round": "spot-2",
   "error": "7",
   "at": "controls.key_cs5[0]",
   "fixed": "Labelled the ordinary key press C#5 and stated the chromatic default plus mapping exceptions.",
   "why": "firmware/src/seq.c:81-115,709-735@5bbd35d; firmware/src/core.h:413-429@5bbd35d; firmware/src/params.c:84-85@5bbd35d"
  },
  {
   "round": "spot-2",
   "error": "7",
   "at": "controls.key_d5[0]",
   "fixed": "Labelled the ordinary key press D5 and stated the chromatic default plus mapping exceptions.",
   "why": "firmware/src/seq.c:81-115,709-735@5bbd35d; firmware/src/core.h:413-429@5bbd35d; firmware/src/params.c:84-85@5bbd35d"
  },
  {
   "round": "spot-2",
   "error": "7",
   "at": "controls.key_ds5[0]",
   "fixed": "Labelled the ordinary key press D#5 and stated the chromatic default plus mapping exceptions.",
   "why": "firmware/src/seq.c:81-115,709-735@5bbd35d; firmware/src/core.h:413-429@5bbd35d; firmware/src/params.c:84-85@5bbd35d"
  },
  {
   "round": "spot-2",
   "error": "7",
   "at": "controls.key_e5[0]",
   "fixed": "Labelled the ordinary key press E5 and stated the chromatic default plus mapping exceptions.",
   "why": "firmware/src/seq.c:81-115,709-735@5bbd35d; firmware/src/core.h:413-429@5bbd35d; firmware/src/params.c:84-85@5bbd35d"
  },
  {
   "round": "spot-2",
   "error": "7",
   "at": "controls.key_f5[0]",
   "fixed": "Labelled the ordinary key press F5 and stated the chromatic default plus mapping exceptions.",
   "why": "firmware/src/seq.c:81-115,709-735@5bbd35d; firmware/src/core.h:413-429@5bbd35d; firmware/src/params.c:84-85@5bbd35d"
  },
  {
   "round": "spot-2",
   "error": "7",
   "at": "controls.key_fs5[0]",
   "fixed": "Labelled the ordinary key press F#5 and stated the chromatic default plus mapping exceptions.",
   "why": "firmware/src/seq.c:81-115,709-735@5bbd35d; firmware/src/core.h:413-429@5bbd35d; firmware/src/params.c:84-85@5bbd35d"
  },
  {
   "round": "spot-2",
   "error": "7",
   "at": "controls.key_g5[0]",
   "fixed": "Labelled the ordinary key press G5 and stated the chromatic default plus mapping exceptions.",
   "why": "firmware/src/seq.c:81-115,709-735@5bbd35d; firmware/src/core.h:413-429@5bbd35d; firmware/src/params.c:84-85@5bbd35d"
  },
  {
   "round": "spot-3",
   "error": "1",
   "at": "switching_note.rejected_settings_warning; guide; firmware_notes[5]; install_and_startup_writes; reads_foreign[sloop.settings,melodee.settings,x0x.settings,fomni.project]",
   "fixed": "Named the musical data overwritten: SLOOP kits/song/MIDI learn, Melodee template sounds/native voices, full FoMni setup, and X0X performance/routing preferences; cited each writer’s source.",
   "why": "Skiff firmware/src/storage.c:130-155@5bbd35d; writer payload source objects appended to switching_note.source; flash-atlas/atlas.json holds checked against those source trees"
  },
  {
   "round": "spot-3",
   "error": "2",
   "at": "switching_note.rejected_settings_warning; guide; firmware_notes[5]; install_and_startup_writes; matching reads_foreign rows",
   "fixed": "Removed the clean-start restriction: the two revision saves run even on an unclean start and replace both sectors after rejected records; clean boot adds the scene migration.",
   "why": "firmware/src/main.c:189-197@5bbd35d; firmware/src/ui.c:519-531@5bbd35d; firmware/src/project.c:1392-1395,1409-1441@5bbd35d; firmware/src/storage.c:130-155@5bbd35d"
  },
  {
   "round": "spot-3",
   "error": "3",
   "at": "reads_foreign[jiant.settings].what_happens/reader_auto_changes",
   "fixed": "Renamed bytes18–20 as shared preference bytes; JIANT has no FX map in them.",
   "why": "Skiff firmware/src/ui.c:503-531@5bbd35d; JIANT v0.7.4-de2a4cb firmware/src/settings_persist.c:8-19,46-55,90-99"
  }
 ],
 "checker_disputes_refresh": [
  {
   "round": "spot-1",
   "error": "1: both settings copies always rewritten on first clean start",
   "why": "The loss is real, but the number of writes depends on imported bytes: a revision of 2 or higher skips both revision saves. JIANT uses 0x4A for its palette marker in that same byte. With the scene marker absent, that case makes only one settings write; it becomes newest and JIANT reads the changed MIDI OUT. A pre-existing 0xA5 also skips the scene clearing. Both copies are overwritten when multiple migrations actually run.",
   "evidence": [
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/main.c",
     "lines": "189-197",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/main.c#L189-L197"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/bank.c",
     "lines": "1329-1334",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/bank.c#L1329-L1334"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/project.c",
     "lines": "1409-1440",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/project.c#L1409-L1440"
    },
    {
     "kind": "source",
     "repo": "illuminus5/skiff",
     "ref": "v1.2",
     "commit": "5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7",
     "path": "firmware/src/storage.c",
     "lines": "130-171",
     "url": "https://github.com/illuminus5/skiff/blob/5bbd35da7ad4b92e5f9d90204cbf28ff9f6fc6a7/firmware/src/storage.c#L130-L171"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/settings_persist.c",
     "lines": "87-99",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/settings_persist.c#L87-L99"
    }
   ]
  }
 ]
}