{
 "firmware": "JIANT FM",
 "slug": "jiant",
 "author": "juanjiant-bit (JIANT); based on Felucca by Leo Kuroshita (Hügelton Instruments), song mode after SLOOP (isod89)",
 "repo": "https://github.com/juanjiant-bit/JIANT",
 "licence": "GPL-3.0-only (bundled fonts and ported DSP under their own licences, see LICENSES/)",
 "closed_source": false,
 "mapped_release": "v0.7.4-de2a4cb",
 "mapped_commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
 "release_date": "2026-10-16",
 "date_mapped": "2026-10-16",
 "version_note": "JIANT’s own installer is above; the Firmware Hub is a separate installer. At de2a4cb, web/STABLE still selected 0.7.2 (e317df3). The lead’s 2026-10-16 measurement records later commit 9703f96 promoting de2a4cb (0.7.4) to JIANT’s public installer; the hub catalogue also lists 0.7.4-de2a4cb. JIANT publishes no GitHub releases.",
 "version_sources": [
  {
   "kind": "source",
   "repo": "juanjiant-bit/JIANT",
   "ref": "v0.7.4-de2a4cb",
   "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
   "path": "firmware/src/felucca.c",
   "lines": "40-42",
   "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/felucca.c#L40-L42"
  },
  {
   "kind": "measured",
   "url": "https://thefirmwarehub.com/",
   "read_at": "2026-10-16 17:01 UTC",
   "section": "Catalogue entry jiant: version 0.7.4-de2a4cb, dated 2026-10-16; measurement supplied in refresh brief."
  },
  {
   "kind": "source",
   "repo": "juanjiant-bit/JIANT",
   "ref": "v0.7.4-de2a4cb",
   "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
   "path": "web/STABLE",
   "lines": "1",
   "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/web/STABLE#L1"
  },
  {
   "kind": "commit",
   "url": "https://github.com/juanjiant-bit/JIANT/commit/9703f96",
   "read_at": "2026-10-16",
   "section": "Lead measurement supplied with refresh check: STABLE: 0.7.4 (de2a4cb) on the official installer; later than the mapped snapshot."
  }
 ],
 "hub_flag": "The source installer still calls dual-core operation experimental and carries an older warning that it had not run on a unit; the README now describes hardware testers. Nothing in this map was tested on a unit. Hold REC at power-on for one core for that session.",
 "hub_flag_source": [
  {
   "kind": "source",
   "repo": "juanjiant-bit/JIANT",
   "ref": "v0.7.4-de2a4cb",
   "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
   "path": "web/index_pkg.html",
   "lines": "122",
   "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/web/index_pkg.html#L122"
  },
  {
   "kind": "doc",
   "repo": "juanjiant-bit/JIANT",
   "ref": "v0.7.4-de2a4cb",
   "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
   "path": "README.md",
   "lines": "897-928",
   "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/README.md#L897-L928"
  }
 ],
 "hub_version_differences": "The hub version measured for this refresh matches this map: 0.7.4-de2a4cb.",
 "hub_version_sources": [
  {
   "kind": "measured",
   "url": "https://thefirmwarehub.com/",
   "read_at": "2026-10-16 17:01 UTC",
   "section": "jiant: 0.7.4-de2a4cb, dated 2026-10-16"
  }
 ],
 "turns_it_into": "A six-track groovebox (four play by default) with eight synth engines, nine DRUM-X kits, a 64-step sequencer with two components per step, chord keys, a song generator you can steer, sections and arrangements, and eight-channel USB stems.",
 "docs": [
  {
   "title": "JIANT FM — User Manual (English; version heading still says v0.6.30)",
   "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/docs/MANUAL.md",
   "words": 17164,
   "read_at": "2026-10-16, at de2a4cb"
  },
  {
   "title": "JIANT FM: overview and changelog through v0.7.4",
   "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/README.md",
   "words": 23775,
   "read_at": "2026-10-16, at de2a4cb"
  },
  {
   "title": "Controls cheat sheet (read for facts; not reproduced)",
   "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/docs/cheatsheet/controls.html",
   "words": 1420,
   "read_at": "2026-10-16, at de2a4cb"
  },
  {
   "title": "Sound cheat sheet (read for facts; not reproduced)",
   "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/docs/cheatsheet/sound.html",
   "words": 1497,
   "read_at": "2026-10-16, at de2a4cb"
  }
 ],
 "install": {
  "hub": "https://thefirmwarehub.com/",
  "official": "https://juanjiant-bit.github.io/JIANT/webapp/installer/",
  "try_in_browser": "https://juanjiant-bit.github.io/JIANT/",
  "editor": "https://juanjiant-bit.github.io/JIANT/webapp/editor/",
  "note": "JIANT’s own installer is above; the Firmware Hub is a separate installer. At de2a4cb, web/STABLE still selected 0.7.2 (e317df3). The lead’s 2026-10-16 measurement records later commit 9703f96 promoting de2a4cb (0.7.4) to JIANT’s public installer; the hub catalogue also lists 0.7.4-de2a4cb."
 },
 "part_id_notes": "The button printed SEL is called SCL in JIANT's code, screens and docs; it is button_sel here. ALGORITHM picks the track and PRESETS the sound, whatever their printed names. JIANT learns which matrix button carries which label by HARDWARE CALIBRATION, with a default table measured on hardware. Jack entries use gesture 'press' to mean 'when connected'. 'turn_while_holding:key_f3' on STEP stands for whichever step key (or note being entered) you hold. Reconciled to the drawing's part ids (output/tutorials/_panels/m-vave-fm1, branch fm1/panel 4027d71) on 2026-10-13 by the lead session: the drawing has no separate button lamps, so what a button's light shows moved from led_<button> to lights.button_<button> (led_play_stop_green to lights.button_play_stop with light='green'); led_key_<note> became lights.led_<note>; led_keys_all became lights.key_lights, with groups.key_lights listing the 27 key-light parts; jack_usb_c became jack_usb. Originals: _before-reconcile/. Refresh 2026-10-16 keeps the reconciled part ids and all surviving entry positions; SHIFT is now named TRACK and FUGUE is PLAYHEADS, with their existing mode ids retained.",
 "part_id_notes_source": [
  {
   "kind": "source",
   "repo": "juanjiant-bit/JIANT",
   "ref": "v0.7.4-de2a4cb",
   "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
   "path": "firmware/src/panel.c",
   "lines": "9-11",
   "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/panel.c#L9-L11"
  },
  {
   "kind": "source",
   "repo": "juanjiant-bit/JIANT",
   "ref": "v0.7.4-de2a4cb",
   "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
   "path": "firmware/src/panel.c",
   "lines": "12-15",
   "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/panel.c#L12-L15"
  },
  {
   "kind": "source",
   "repo": "juanjiant-bit/JIANT",
   "ref": "v0.7.4-de2a4cb",
   "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
   "path": "firmware/src/panel.c",
   "lines": "26-31",
   "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/panel.c#L26-L31"
  }
 ],
 "modes": [
  {
   "id": "home",
   "name": "HOME (the ecosystem)",
   "how_to_get_there": "Press HOME from any page; the FM-1 also starts here.",
   "what_it_is": "One creature per track, drawn from its engine and its four main knobs and moving with its sound; KNOB 1-4 are the selected track's four main controls.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "787-795",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L787-L795"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_input.c",
     "lines": "2165-2166",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2165-L2166"
    },
    {
     "kind": "doc",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "docs/MANUAL.md",
     "lines": "153-155",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/docs/MANUAL.md?plain=1#L153-L155"
    }
   ]
  },
  {
   "id": "env",
   "name": "ENV",
   "how_to_get_there": "Press ENV until ENV shows (each press goes to the next page of the group), or hold ENV and turn PRESETS.",
   "what_it_is": "The selected track's attack, decay, sustain and release; on FM6 these change its carrier envelopes.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "496",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L496"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/eng_fm6.c",
     "lines": "339-347",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_fm6.c#L339-L347"
    }
   ]
  },
  {
   "id": "env_dest",
   "name": "ENV DEST",
   "how_to_get_there": "Press ENV until ENV DEST shows (each press goes to the next page of the group), or hold ENV and turn PRESETS.",
   "what_it_is": "Envelope amounts to filter, pitch and shape, and LOOP (the envelope repeats while a note is held).",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "497",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L497"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "726-767",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
    }
   ]
  },
  {
   "id": "lfo",
   "name": "LFO",
   "how_to_get_there": "Press LFO until LFO shows (each press goes to the next page of the group), or hold LFO and turn PRESETS.",
   "what_it_is": "LFO rate (free, or in time below the slowest setting), wave, phase (or FREE) and fade.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "498",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L498"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "726-767",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
    }
   ]
  },
  {
   "id": "lfo_dest",
   "name": "LFO DEST",
   "how_to_get_there": "Press LFO until LFO DEST shows (each press goes to the next page of the group), or hold LFO and turn PRESETS.",
   "what_it_is": "LFO amounts to pitch, filter, shape and level.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "499",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L499"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "726-767",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
    }
   ]
  },
  {
   "id": "mod",
   "name": "MOD",
   "how_to_get_there": "Press LFO until MOD shows (each press goes to the next page of the group), or hold LFO and turn PRESETS.",
   "what_it_is": "The four-slot modulation matrix: KNOB 1 picks the slot, then source, destination, amount.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "500",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L500"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "726-767",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
    }
   ]
  },
  {
   "id": "mseq",
   "name": "MSEQ",
   "how_to_get_there": "Press LFO until MSEQ shows (each press goes to the next page of the group), or hold LFO and turn PRESETS.",
   "what_it_is": "A 16-step modulation sequence: KNOB 1 chooses which step, KNOB 2 sets that step's level, then length and slew.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "501",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L501"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "726-767",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
    }
   ]
  },
  {
   "id": "mseq2",
   "name": "MSEQ 2",
   "how_to_get_there": "Press LFO until MSEQ 2 shows (each press goes to the next page of the group), or hold LFO and turn PRESETS.",
   "what_it_is": "The modulation sequence's step division.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "502",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L502"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "726-767",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
    }
   ]
  },
  {
   "id": "fx",
   "name": "FX",
   "how_to_get_there": "Press FX until FX shows (each press goes to the next page of the group), or hold FX and turn PRESETS.",
   "what_it_is": "The track's drive and its chorus, delay and reverb sends.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "503",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L503"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "726-767",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
    }
   ]
  },
  {
   "id": "dist",
   "name": "DIST",
   "how_to_get_there": "Press FX until DIST shows (each press goes to the next page of the group), or hold FX and turn PRESETS.",
   "what_it_is": "The track's drive amount, type and tone.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "504",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L504"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "726-767",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
    }
   ]
  },
  {
   "id": "autopan",
   "name": "AUTO PAN",
   "how_to_get_there": "Press FX until AUTO PAN appears, or hold FX and turn PRESETS.",
   "what_it_is": "The track's pan swung left and right: depth, rate, sync, wave.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "505",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L505"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "747-766",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L747-L766"
    }
   ]
  },
  {
   "id": "slicer",
   "name": "SLICER",
   "how_to_get_there": "Press FX until SLICER shows (each press goes to the next page of the group), or hold FX and turn PRESETS.",
   "what_it_is": "The one shared slicer: mode, pattern, rate, depth.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "514",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L514"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "726-767",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
    }
   ]
  },
  {
   "id": "sl_bus",
   "name": "SL BUS",
   "how_to_get_there": "Press FX until SL BUS shows (each press goes to the next page of the group), or hold FX and turn PRESETS.",
   "what_it_is": "Which of tracks 1-4 feed the slicer.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "515",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L515"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "726-767",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
    }
   ]
  },
  {
   "id": "sl_bus2",
   "name": "SL BUS 2",
   "how_to_get_there": "Press FX until SL BUS 2 shows (each press goes to the next page of the group), or hold FX and turn PRESETS.",
   "what_it_is": "Whether tracks 5-6 and the effect returns feed the slicer.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "516",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L516"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "726-767",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
    }
   ]
  },
  {
   "id": "sl_pitch",
   "name": "SL PITCH",
   "how_to_get_there": "Press FX until SL PITCH shows (each press goes to the next page of the group), or hold FX and turn PRESETS.",
   "what_it_is": "A 16-step pitch sequence for the slicer's repeats: step, pitch, length, scale snap.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "517",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L517"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "726-767",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
    }
   ]
  },
  {
   "id": "dly",
   "name": "DLY",
   "how_to_get_there": "Press FX until DLY shows (each press goes to the next page of the group), or hold FX and turn PRESETS.",
   "what_it_is": "The shared delay: time, feedback, tone, mix.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "506",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L506"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "726-767",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
    }
   ]
  },
  {
   "id": "dly2",
   "name": "DLY 2",
   "how_to_get_there": "Press FX until DLY 2 shows (each press goes to the next page of the group), or hold FX and turn PRESETS.",
   "what_it_is": "Delay width, grain pitch and spray, and the delay's wow and flutter amount.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "507",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L507"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "178-190",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L178-L190"
    }
   ]
  },
  {
   "id": "reverb",
   "name": "REVERB",
   "how_to_get_there": "Press FX until REVERB shows (each press goes to the next page of the group), or hold FX and turn PRESETS.",
   "what_it_is": "The shared reverb: type (ROOM, SPRING, SHIMMER, RESO, CLOUD), size, and two values that change with the type.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "510",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L510"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "726-767",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
    }
   ]
  },
  {
   "id": "reverb2",
   "name": "REVERB 2",
   "how_to_get_there": "Press FX until REVERB 2 shows (each press goes to the next page of the group), or hold FX and turn PRESETS.",
   "what_it_is": "Reverb modulation depth and rate, input tone, width.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "511",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L511"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "726-767",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
    }
   ]
  },
  {
   "id": "chorus",
   "name": "CHORUS",
   "how_to_get_there": "Press FX until CHORUS shows (each press goes to the next page of the group), or hold FX and turn PRESETS.",
   "what_it_is": "The shared chorus: rate, depth, stereo width.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "512",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L512"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "726-767",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
    }
   ]
  },
  {
   "id": "master",
   "name": "MASTER",
   "how_to_get_there": "Press FX until MASTER shows (each press goes to the next page of the group), or hold FX and turn PRESETS.",
   "what_it_is": "The master: clipper, drum punch, kick ducking and its release.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "518",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L518"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "726-767",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
    }
   ]
  },
  {
   "id": "scl",
   "name": "SCL",
   "how_to_get_there": "Press SEL (JIANT calls it SCL) until SCL shows (each press goes to the next page of the group), or hold SEL (JIANT calls it SCL) and turn PRESETS.",
   "what_it_is": "Root, scale and key mode (shared by every melodic track) and the track's own transpose.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "520",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L520"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "726-767",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
    }
   ]
  },
  {
   "id": "scl2",
   "name": "SCL 2",
   "how_to_get_there": "Press SEL (JIANT calls it SCL) until SCL 2 shows (each press goes to the next page of the group), or hold SEL (JIANT calls it SCL) and turn PRESETS.",
   "what_it_is": "ALL TR: every sequence moved up or down its scale (global, saved with the project).",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "521",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L521"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "726-767",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
    }
   ]
  },
  {
   "id": "edit1",
   "name": "EDIT 1",
   "how_to_get_there": "Press EDIT until EDIT 1 shows (each press goes to the next page of the group), or hold EDIT and turn PRESETS.",
   "what_it_is": "The engine's first four values; the page title is the engine's own (OSC on ANALOG, KIT on DRUM and so on).",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "523",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L523"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "726-767",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
    }
   ]
  },
  {
   "id": "edit2",
   "name": "EDIT 2",
   "how_to_get_there": "Press EDIT until EDIT 2 shows (each press goes to the next page of the group), or hold EDIT and turn PRESETS.",
   "what_it_is": "The engine's next four values (FLT on ANALOG, KIT 2 on DRUM and so on).",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "524",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L524"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "726-767",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
    }
   ]
  },
  {
   "id": "retrig",
   "name": "RETRIG",
   "how_to_get_there": "Press EDIT until RETRIG shows (each press goes to the next page of the group), or hold EDIT and turn PRESETS.",
   "what_it_is": "LOFI on BYTE or FLOAT only: restart the formula on every note.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "525",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L525"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "726-767",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "441-442",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L441-L442"
    }
   ]
  },
  {
   "id": "morph",
   "name": "MORPH",
   "how_to_get_there": "Press EDIT until MORPH shows (each press goes to the next page of the group), or hold EDIT and turn PRESETS.",
   "what_it_is": "ANALOG: blends the basic waves around their cycle, or changes PWM width, SYNC/RING ratio or SAW3 spread; PHASE and LOFI through WRAM still morph between waves.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "428-432",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L428-L432"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_graph.c",
     "lines": "358-378",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_graph.c#L358-L378"
    }
   ]
  },
  {
   "id": "kit3",
   "name": "KIT 3",
   "how_to_get_there": "Press EDIT until KIT 3 shows (each press goes to the next page of the group), or hold EDIT and turn PRESETS.",
   "what_it_is": "DRUM only: the kit's band-pass on the metal sounds and its feedback.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "529",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L529"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "726-767",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "435-436",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L435-L436"
    }
   ]
  },
  {
   "id": "xmod",
   "name": "X-MOD",
   "how_to_get_there": "Press EDIT until X-MOD shows (each press goes to the next page of the group), or hold EDIT and turn PRESETS.",
   "what_it_is": "DRUM only: a tempo-synced swing of the kit's MORPH, and per-hit randomness.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "530",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L530"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "726-767",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "435-436",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L435-L436"
    }
   ]
  },
  {
   "id": "operator",
   "name": "OPERATOR",
   "how_to_get_there": "Press EDIT until OPERATOR shows (each press goes to the next page of the group), or hold EDIT and turn PRESETS.",
   "what_it_is": "FM6 only: one operator's frequency ratio (or fixed), fine tune, level.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "531",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L531"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "726-767",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "439-440",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L439-L440"
    }
   ]
  },
  {
   "id": "op_env",
   "name": "OP ENV",
   "how_to_get_there": "Press EDIT until OP ENV shows (each press goes to the next page of the group), or hold EDIT and turn PRESETS.",
   "what_it_is": "FM6 only: one operator's envelope, one stage at a time.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "532",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L532"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "726-767",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "439-440",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L439-L440"
    }
   ]
  },
  {
   "id": "operator2",
   "name": "OPERATOR 2",
   "how_to_get_there": "Press EDIT until OPERATOR 2 shows (each press goes to the next page of the group), or hold EDIT and turn PRESETS.",
   "what_it_is": "FM6 only: one operator's ratio/fixed mode, detune, velocity sensitivity.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "533",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L533"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "726-767",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "439-440",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L439-L440"
    }
   ]
  },
  {
   "id": "filter",
   "name": "FILTER",
   "how_to_get_there": "Press EDIT until FILTER shows (each press goes to the next page of the group), or hold EDIT and turn PRESETS.",
   "what_it_is": "The filter: type (LP, HP, BP, COMB), cutoff, resonance, and drive (ANALOG) or the track's DIST (the others).",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "534",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L534"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "726-767",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
    }
   ]
  },
  {
   "id": "sound1",
   "name": "SOUND",
   "how_to_get_there": "Press EDIT until SOUND shows (each press goes to the next page of the group), or hold EDIT and turn PRESETS.",
   "what_it_is": "DRUM only: one kit sound; its side A or B, pitch, pitch drop.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "537",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L537"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "726-767",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "435-436",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L435-L436"
    }
   ]
  },
  {
   "id": "sound2",
   "name": "SOUND 2",
   "how_to_get_there": "Press EDIT until SOUND 2 shows (each press goes to the next page of the group), or hold EDIT and turn PRESETS.",
   "what_it_is": "DRUM only: one kit sound's decay, noise, colour (of the side picked).",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "538",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L538"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "726-767",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "435-436",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L435-L436"
    }
   ]
  },
  {
   "id": "sound3",
   "name": "SOUND 3",
   "how_to_get_there": "Press EDIT until SOUND 3 shows (each press goes to the next page of the group), or hold EDIT and turn PRESETS.",
   "what_it_is": "DRUM only: one kit sound's wave and filter mode, pitch-drop type, drive on/off.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "539",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L539"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "726-767",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "435-436",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L435-L436"
    }
   ]
  },
  {
   "id": "sound4",
   "name": "SOUND 4",
   "how_to_get_there": "Press EDIT until SOUND 4 shows (each press goes to the next page of the group), or hold EDIT and turn PRESETS.",
   "what_it_is": "DRUM only: one kit sound's extra layer, feedback, and its own effect send.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "540",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L540"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "726-767",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "435-436",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L435-L436"
    }
   ]
  },
  {
   "id": "levels",
   "name": "LEVELS",
   "how_to_get_there": "Press EDIT until LEVELS shows (each press goes to the next page of the group), or hold EDIT and turn PRESETS.",
   "what_it_is": "DRUM only: kick, snare, clap, closed-hat levels.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "541",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L541"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "726-767",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "437-438",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L437-L438"
    }
   ]
  },
  {
   "id": "levels2",
   "name": "LEVELS 2",
   "how_to_get_there": "Press EDIT until LEVELS 2 shows (each press goes to the next page of the group), or hold EDIT and turn PRESETS.",
   "what_it_is": "DRUM only: open-hat, tom, rim, bell levels.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "542",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L542"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "726-767",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "437-438",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L437-L438"
    }
   ]
  },
  {
   "id": "stereo",
   "name": "STEREO",
   "how_to_get_there": "Press EDIT until STEREO shows (each press goes to the next page of the group), or hold EDIT and turn PRESETS.",
   "what_it_is": "DRUM only: IMAGE, one knob through the kit's stereo placements.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "543",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L543"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "726-767",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "435-436",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L435-L436"
    }
   ]
  },
  {
   "id": "voice",
   "name": "VOICE",
   "how_to_get_there": "Press EDIT until VOICE shows (each press goes to the next page of the group), or hold EDIT and turn PRESETS.",
   "what_it_is": "Poly, mono, legato or unison; glide; glide mode; note priority.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "549",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L549"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "726-767",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
    }
   ]
  },
  {
   "id": "arp",
   "name": "ARP",
   "how_to_get_there": "Press ARP until ARP shows (each press goes to the next page of the group), or hold ARP and turn PRESETS.",
   "what_it_is": "Arpeggiator mode (including TRNS), rate, octaves, gate.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "558",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L558"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "726-767",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
    }
   ]
  },
  {
   "id": "arp2",
   "name": "ARP 2",
   "how_to_get_there": "Press ARP until ARP 2 shows (each press goes to the next page of the group), or hold ARP and turn PRESETS.",
   "what_it_is": "Arpeggiator swing, probability, hold (key latch with MODE OFF), note order.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "559",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L559"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "726-767",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
    }
   ]
  },
  {
   "id": "comp",
   "name": "COMP",
   "how_to_get_there": "Press SEQ until COMP shows (each press goes to the next page of the group), or hold SEQ and turn PRESETS.",
   "what_it_is": "The cursor step's first component: type, its value or order and range, then rate or EVERY; the choices now include WALK and CLIMB.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "570-571",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L570-L571"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "539-581",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L539-L581"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_input.c",
     "lines": "854-909",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L854-L909"
    }
   ]
  },
  {
   "id": "pattern",
   "name": "PATTERN",
   "how_to_get_there": "Press SEQ until PATTERN shows (each press goes to the next page of the group), or hold SEQ and turn PRESETS.",
   "what_it_is": "The track's pattern length (1-64), division, swing, gate.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "567",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L567"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "726-767",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
    }
   ]
  },
  {
   "id": "automation",
   "name": "AUTOMATION",
   "how_to_get_there": "Press SEQ until AUTOMATION shows (each press goes to the next page of the group), or hold SEQ and turn PRESETS.",
   "what_it_is": "The track's automation: playback on/off, record counts, clear.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "578",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L578"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "726-767",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
    }
   ]
  },
  {
   "id": "auto_list",
   "name": "AUTO LIST",
   "how_to_get_there": "Press SEQ until AUTO LIST shows (each press goes to the next page of the group), or hold SEQ and turn PRESETS.",
   "what_it_is": "Every lock and automation event of the track as a list you can edit, ending in + ADD LOCK.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "579",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L579"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "726-767",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
    }
   ]
  },
  {
   "id": "mutate",
   "name": "MUTATE",
   "how_to_get_there": "Press SEQ until MUTATE shows (each press goes to the next page of the group), or hold SEQ and turn PRESETS.",
   "what_it_is": "The selected track's SOUND and PATTERN changes over the next 32 bars, its AMOUNT and ORBIT/DRIFT mode, plus KEEP and FREEZE hints.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "580",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L580"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_graph.c",
     "lines": "295-319",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_graph.c#L295-L319"
    }
   ]
  },
  {
   "id": "fugue",
   "name": "PLAYHEADS",
   "how_to_get_there": "Press SEQ until PLAYHEADS appears, or hold SEQ and turn PRESETS.",
   "what_it_is": "Three extra playheads reading the track's steps: head, rate, direction, interval in scale steps.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "573",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L573"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_input.c",
     "lines": "988-995",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L988-L995"
    }
   ]
  },
  {
   "id": "shift",
   "name": "TRACK",
   "how_to_get_there": "Press SEQ until TRACK appears, or hold SEQ and turn PRESETS.",
   "what_it_is": "The track's pitch and chance, HUMAN variation in velocity, timing, gate and envelopes, and REC Q for live recording.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "572",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L572"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "232-235",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L232-L235"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/seq.c",
     "lines": "1555-1577",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L1555-L1577"
    }
   ]
  },
  {
   "id": "mixer",
   "name": "MIXER",
   "how_to_get_there": "Press GLO: MIXER, then GLOBAL, then SYSTEM, then MIXER again. Or hold GLO and turn PRESETS.",
   "what_it_is": "Level, pan, reverb send and mute of the selected track.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "575",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L575"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "771-785",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L771-L785"
    }
   ]
  },
  {
   "id": "global",
   "name": "GLOBAL",
   "how_to_get_there": "Press GLO: MIXER, then GLOBAL, then SYSTEM, then MIXER again. Or hold GLO and turn PRESETS.",
   "what_it_is": "Tempo, swing, clock source (internal, USB, TRS), tune.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "550",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L550"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "771-785",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L771-L785"
    }
   ]
  },
  {
   "id": "system",
   "name": "SYSTEM",
   "how_to_get_there": "Press GLO: MIXER, then GLOBAL, then SYSTEM, then MIXER again. Or hold GLO and turn PRESETS.",
   "what_it_is": "TRACKS (4 or 6), LOAD (FULL, LITE, ECO), MIDI routing, CPU readout.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "551",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L551"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "771-785",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L771-L785"
    }
   ]
  },
  {
   "id": "presets",
   "name": "PRESETS",
   "how_to_get_there": "Press SAVE: USER first, then PROJECT, ARRANGE, TOOLS, PRESETS. Or hold SAVE and turn SELECT or PRESETS.",
   "what_it_is": "The sound browser: sound, engine, favourite and filter; picking a DRUM factory preset replaces the section's shared kit.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "553",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L553"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "726-767",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "1137-1146",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L1137-L1146"
    }
   ]
  },
  {
   "id": "user",
   "name": "USER",
   "how_to_get_there": "Press SAVE: USER first, then PROJECT, ARRANGE, TOOLS, PRESETS. Or hold SAVE and turn SELECT or PRESETS.",
   "what_it_is": "The 32 user sound slots: load, erase, save (SAVE is pre-picked when you arrive).",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "554",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L554"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "726-767",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
    }
   ]
  },
  {
   "id": "project",
   "name": "PROJECT",
   "how_to_get_there": "Press SAVE: USER first, then PROJECT, ARRANGE, TOOLS, PRESETS. Or hold SAVE and turn SELECT or PRESETS.",
   "what_it_is": "8 projects of 4 sections A-D: pick project and section, load, save.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "555",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L555"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "726-767",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
    }
   ]
  },
  {
   "id": "arrange",
   "name": "ARRANGE",
   "how_to_get_there": "Press SAVE: USER first, then PROJECT, ARRANGE, TOOLS, PRESETS. Or hold SAVE and turn SELECT or PRESETS.",
   "what_it_is": "The project's song: up to 16 rows of section and bars, with scenes, then + ADD and END.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "556",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L556"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "726-767",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
    }
   ]
  },
  {
   "id": "tools",
   "name": "TOOLS",
   "how_to_get_there": "Press SAVE: USER first, then PROJECT, ARRANGE, TOOLS, PRESETS. Or hold SAVE and turn SELECT or PRESETS.",
   "what_it_is": "Six tools: clear the sequence, init the sound, delete a song row, clear the song, start a new project or build a heavy CPU test song.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_graph.c",
     "lines": "1619-1640",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_graph.c#L1619-L1640"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_input.c",
     "lines": "2070-2074",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2070-L2074"
    }
   ]
  },
  {
   "id": "step_roll",
   "name": "STEP (piano roll)",
   "how_to_get_there": "Press SEQ on a track whose engine is not DRUM (STEP is the first SEQ page).",
   "what_it_is": "The track's 64-step pattern as a piano roll with a step cursor; up to four notes a step.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "566",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L566"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_input.c",
     "lines": "507-510",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L507-L510"
    }
   ]
  },
  {
   "id": "step_rec",
   "name": "STEP recording",
   "how_to_get_there": "On STEP (piano roll), with playback stopped, press REC (screen: KEYS WRITE STEPS).",
   "what_it_is": "The keys enter notes or full CHORD chords at the cursor; release every key to move to the next step.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_input.c",
     "lines": "1385-1441",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1385-L1441"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_input.c",
     "lines": "529-532",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L529-L532"
    }
   ]
  },
  {
   "id": "step_grid",
   "name": "STEP (drum grid)",
   "how_to_get_there": "Open SEQ > STEP or NOTE on a DRUM track.",
   "what_it_is": "On a DRUM track, STEP and NOTE show the 16-step grid; white keys toggle steps and black keys choose lanes. NOTE has different knob jobs: STEP and MICRO.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "611",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L611"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "568",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L568"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_input.c",
     "lines": "811-815",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L811-L815"
    }
   ]
  },
  {
   "id": "drum_track",
   "name": "DRUM track selected (not the grid)",
   "how_to_get_there": "Select a track whose engine is DRUM (DRUM-X), on any page but SEQ > STEP.",
   "what_it_is": "The keys play the kit on the General MIDI drum map, kick on C4.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/eng_drum.c",
     "lines": "469-473",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L469-L473"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/eng_drum.c",
     "lines": "9-13",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L9-L13"
    }
   ]
  },
  {
   "id": "arp_trns",
   "name": "ARP mode TRNS",
   "how_to_get_there": "On the ARP page set MODE to TRNS.",
   "what_it_is": "With the ARP mode on TRNS, keys stop sounding notes; each one moves the track's sequence by how far its note sits from C4.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/seq.c",
     "lines": "701-704",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L701-L704"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/seq.c",
     "lines": "336-337",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L336-L337"
    }
   ]
  },
  {
   "id": "menu",
   "name": "MENU",
   "how_to_get_there": "Hold HOME (about 0.7 s). Press or hold HOME again to close it.",
   "what_it_is": "DISPLAY, CONTROL, AUDIO and SYSTEM settings; MIDI OUT adds KEYS/CLOCK/ALL/OFF, USB LEVEL adds fixed attenuation, and USB selects CONSOLE, STEREO or STEMS.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/menu_items.c",
     "lines": "10-32",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/menu_items.c#L10-L32"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/menu_items.c",
     "lines": "79-94",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/menu_items.c#L79-L94"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/menu_items.c",
     "lines": "199-217",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/menu_items.c#L199-L217"
    }
   ]
  },
  {
   "id": "about",
   "name": "MENU > ABOUT",
   "how_to_get_there": "In the MENU, SYSTEM tab, pick ABOUT and press OCT+.",
   "what_it_is": "Version, project links and support links, the repo QR code, audio load since power-on, core count and credits.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_menu.c",
     "lines": "107-159",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_menu.c#L107-L159"
    }
   ]
  },
  {
   "id": "name",
   "name": "NAME",
   "how_to_get_there": "Opens when you save a user sound or a project section, or press EDIT on USER or PROJECT to rename.",
   "what_it_is": "Type a name of up to 12 characters with the keys.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_name.c",
     "lines": "3-23",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L3-L23"
    }
   ]
  },
  {
   "id": "dialog",
   "name": "Confirm dialog",
   "how_to_get_there": "Opens before: saving over a used project or user-sound slot, erasing a used user slot, loading a pattern over your own steps, the SAVE > TOOLS actions, clearing AUTOMATION, deleting a song row, INIT and RECALL from the EDIT layer, SEQ + REC (clear everything), MENU > INIT SYSTEM, CPU TEST and FX > PUNCH > CLEAR. GEN is a separate settings screen.",
   "what_it_is": "Ordinary confirmations use OCT+ for yes and OCT- for no. Part-dice previews also accept SELECT for another roll. GEN accepts its knobs, SELECT, HOME and PLAY; OCT+ generates without a second confirmation. Plenty of overwrites never open it: storing a section with SAVE held (C4-F4, or OCT+) replaces what that section held, with no undo; USER > LOAD replaces the track's sound, no undo; PROJECT > LOAD replaces the music (GLO + G4 undoes it); SAVE + KNOB 1 switches project, no undo; SEQ TOOLS actions change or clear steps, no undo; REC + F3 clears the track (undoable); REC + a page button clears that part's automation; FX + G5 wipes the whole punch-in lane when stopped and erases as it passes while recording; SONG REC replaces the project's whole arrangement and scenes when it ends, no undo; LFO held + F3 or G3 re-rolls or clears every track's macro routes, no undo; and ARRANGE's KNOB 4 turned right stores over a row's scene, turned left clears it, no undo. Choosing a DRUM factory preset with PRESETS or a track-channel program change replaces the section’s kit, layers and sends in RAM without undo. Channel 16 program changes 16–23 switch projects while stopped: they flush stored sections and write the index, then load section A if it exists, without undo. GEN PARTS/SONG can store sections and replace ARRANGE without another question; undo restores the live music only.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "235-240",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L235-L240"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_input.c",
     "lines": "1171-1239",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1171-L1239"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_layer.c",
     "lines": "418-426",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L418-L426"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_layer.c",
     "lines": "670-680",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L670-L680"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/song_main.c",
     "lines": "184-200",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L184-L200"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_layer.c",
     "lines": "322-343",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L322-L343"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_layer.c",
     "lines": "346-370",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L346-L370"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_input.c",
     "lines": "1260-1267",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1260-L1267"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/pfx.c",
     "lines": "157-185",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/pfx.c#L157-L185"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/song_main.c",
     "lines": "303-355",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L303-L355"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/song_main.c",
     "lines": "253-267",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L253-L267"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/song_main.c",
     "lines": "377-394",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L377-L394"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_layer.c",
     "lines": "553-560",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L553-L560"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_input.c",
     "lines": "1041-1047",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1041-L1047"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/seq.c",
     "lines": "324",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L324"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/gen.c",
     "lines": "938-944",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/gen.c#L938-L944"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/gen.c",
     "lines": "1038-1058",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/gen.c#L1038-L1058"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/project.c",
     "lines": "1838-1856",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/project.c#L1838-L1856"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/project.c",
     "lines": "1563-1574",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/project.c#L1563-L1574"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/song_main.c",
     "lines": "185-201",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L185-L201"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/song_main.c",
     "lines": "409-421",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L409-L421"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_input.c",
     "lines": "1167-1170",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1167-L1170"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_input.c",
     "lines": "2138-2155",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2138-L2155"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "1140-1147",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L1140-L1147"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "1294-1325",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L1294-L1325"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/song_main.c",
     "lines": "306-354",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L306-L354"
    }
   ]
  },
  {
   "id": "dice_dialog",
   "name": "KEEP DICED ...? dialog",
   "how_to_get_there": "Hold EDIT, SEQ, LFO or FX and turn SELECT.",
   "what_it_is": "A sound, sequence, LFO or FX roll plays at once; SELECT rolls that part again, OCT+ keeps it, OCT- restores the previous part.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_input.c",
     "lines": "2131-2140",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2131-L2140"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_input.c",
     "lines": "1520-1523",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1520-L1523"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_input.c",
     "lines": "2037-2038",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2037-L2038"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_input.c",
     "lines": "2132-2136",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2132-L2136"
    }
   ]
  },
  {
   "id": "calibration",
   "name": "HARDWARE CALIBRATION",
   "how_to_get_there": "Hold OCT- and OCT+ while switching on, or MENU > SYSTEM > CALIBRATION and OCT+.",
   "what_it_is": "The screen names each button and knob in turn; you press or turn it so the firmware learns the panel.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/main.c",
     "lines": "205-208",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/main.c#L205-L208"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_input.c",
     "lines": "2356-2416",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2356-L2416"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/panel.c",
     "lines": "3-7",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/panel.c#L3-L7"
    }
   ]
  },
  {
   "id": "power_on",
   "name": "Power-on",
   "how_to_get_there": "Hold buttons while switching the FM-1 on.",
   "what_it_is": "Start-up gestures.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/main.c",
     "lines": "205-208",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/main.c#L205-L208"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/main.c",
     "lines": "210-214",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/main.c#L210-L214"
    }
   ]
  },
  {
   "id": "any_layer",
   "name": "Any quick layer",
   "how_to_get_there": "Hold FX, SEL, EDIT, GLO, SEQ (on the pattern pages), REC, SAVE or LFO.",
   "what_it_is": "While a layer's button is held, the keys and knobs are its shortcuts and other page buttons are ignored.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_layer.c",
     "lines": "31-39",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L31-L39"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_input.c",
     "lines": "1946-1962",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1946-L1962"
    }
   ]
  },
  {
   "id": "layer_fx",
   "name": "FX layer (punch-in effects)",
   "how_to_get_there": "Hold FX past the hold time (0.4 s by default, MENU > HOLD 0.3-0.6 s), or hold it and press a key or turn a knob.",
   "what_it_is": "Effects on the white keys while held, track mutes on black keys 1-6, four macros on the knobs.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_layer.c",
     "lines": "55-66",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L55-L66"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_layer.c",
     "lines": "236-254",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L236-L254"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/panel.c",
     "lines": "80",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/panel.c#L80"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/panel.c",
     "lines": "79",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/panel.c#L79"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/seq.c",
     "lines": "733-737",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
    }
   ]
  },
  {
   "id": "layer_glo",
   "name": "GLO layer (mix)",
   "how_to_get_there": "Hold GLO past the hold time (0.4 s by default, MENU > HOLD 0.3-0.6 s), or hold it and press a key or turn a knob.",
   "what_it_is": "Mutes, solos, drum group mutes, unmute all, tap tempo, UNDO, MUTATE freeze; KNOB 1-4 track levels.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_layer.c",
     "lines": "55-66",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L55-L66"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_layer.c",
     "lines": "236-254",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L236-L254"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/panel.c",
     "lines": "80",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/panel.c#L80"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/panel.c",
     "lines": "79",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/panel.c#L79"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_layer.c",
     "lines": "524-581",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
    }
   ]
  },
  {
   "id": "layer_scl",
   "name": "SEL layer (scale)",
   "how_to_get_there": "Hold SEL past the hold time (0.4 s by default, MENU > HOLD 0.3-0.6 s), or hold it and press a key or turn a knob.",
   "what_it_is": "Any key sets the root; KNOB 1–4 change root, scale, playback rotation and sequence pitch.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_layer.c",
     "lines": "55-66",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L55-L66"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_layer.c",
     "lines": "236-254",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L236-L254"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/panel.c",
     "lines": "80",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/panel.c#L80"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/panel.c",
     "lines": "79",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/panel.c#L79"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_layer.c",
     "lines": "524-581",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_layer.c",
     "lines": "69",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L69"
    }
   ]
  },
  {
   "id": "layer_edit",
   "name": "EDIT layer",
   "how_to_get_there": "Hold EDIT past the hold time (0.4 s by default, MENU > HOLD 0.3-0.6 s), or hold it and press a key or turn a knob.",
   "what_it_is": "INIT and RECALL on F3 and G3; on a DRUM track black keys mute the kit sounds; KNOB 1-4 the EDIT 1 values.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_layer.c",
     "lines": "55-66",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L55-L66"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_layer.c",
     "lines": "236-254",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L236-L254"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/panel.c",
     "lines": "80",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/panel.c#L80"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/panel.c",
     "lines": "79",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/panel.c#L79"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_layer.c",
     "lines": "524-581",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
    }
   ]
  },
  {
   "id": "layer_seq",
   "name": "SEQ TOOLS layer",
   "how_to_get_there": "Hold SEQ past the hold time (0.4 s by default, MENU > HOLD 0.3-0.6 s), or hold it and press a key or turn a knob. Only on SEQ > STEP, COMP, PATTERN, AUTOMATION and SHIFT.",
   "what_it_is": "Sequence tools on the white keys, DRUM lane on black keys; KNOB 1-4 length, division, swing, gate.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_layer.c",
     "lines": "55-66",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L55-L66"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_layer.c",
     "lines": "236-254",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L236-L254"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/panel.c",
     "lines": "80",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/panel.c#L80"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/panel.c",
     "lines": "79",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/panel.c#L79"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_layer.c",
     "lines": "524-581",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_layer.c",
     "lines": "102-108",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L102-L108"
    }
   ]
  },
  {
   "id": "layer_rec",
   "name": "REC layer",
   "how_to_get_there": "Hold REC past the hold time (0.4 s by default, MENU > HOLD 0.3-0.6 s), or hold it and press a key or turn a knob.",
   "what_it_is": "Clear the track and the metronome click.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_layer.c",
     "lines": "55-66",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L55-L66"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_layer.c",
     "lines": "236-254",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L236-L254"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/panel.c",
     "lines": "80",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/panel.c#L80"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/panel.c",
     "lines": "79",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/panel.c#L79"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_layer.c",
     "lines": "524-581",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
    }
   ]
  },
  {
   "id": "layer_save",
   "name": "SAVE layer (song)",
   "how_to_get_there": "Hold SAVE past the hold time (0.4 s by default, MENU > HOLD 0.3-0.6 s), or hold it and press a key or turn a knob.",
   "what_it_is": "Play and store sections A-D live, quick chains, loop or song, SONG REC, project switch.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_layer.c",
     "lines": "55-66",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L55-L66"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_layer.c",
     "lines": "236-254",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L236-L254"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/panel.c",
     "lines": "80",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/panel.c#L80"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/panel.c",
     "lines": "79",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/panel.c#L79"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_layer.c",
     "lines": "405-437",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L405-L437"
    }
   ]
  },
  {
   "id": "layer_macro",
   "name": "LFO layer (macros)",
   "how_to_get_there": "Hold LFO past the hold time (0.4 s by default, MENU > HOLD 0.3-0.6 s), or hold it and press a key or turn a knob.",
   "what_it_is": "KNOB 1-4 are macros M1-M4; F3 rolls new macro routes, G3 clears them.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_layer.c",
     "lines": "55-66",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L55-L66"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_layer.c",
     "lines": "236-254",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L236-L254"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/panel.c",
     "lines": "80",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/panel.c#L80"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/panel.c",
     "lines": "79",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/panel.c#L79"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_layer.c",
     "lines": "524-581",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_layer.c",
     "lines": "65",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L65"
    }
   ]
  },
  {
   "id": "fx_locked",
   "name": "FX layer locked open",
   "how_to_get_there": "Hold FX until its map shows, then let go without touching anything ([FX] LOCKED). Press FX again to unlock.",
   "what_it_is": "The FX layer stays open with both hands free: keys are effects, knobs are the FX macros.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_layer.c",
     "lines": "186-220",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L186-L220"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_layer.c",
     "lines": "155-182",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L155-L182"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_input.c",
     "lines": "1963-1967",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1963-L1967"
    }
   ]
  },
  {
   "id": "macro_latched",
   "name": "Macros latched",
   "how_to_get_there": "Hold LFO until its map shows, then let go ([LFO] LATCH). Press LFO again to unlatch.",
   "what_it_is": "KNOB 1-4 keep moving macros M1-M4 on every page; the macro map stays on screen.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_layer.c",
     "lines": "186-220",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L186-L220"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_input.c",
     "lines": "2295-2298",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2295-L2298"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_draw.c",
     "lines": "1700-1701",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_draw.c#L1700-L1701"
    }
   ]
  },
  {
   "id": "dly3",
   "name": "DLY 3",
   "how_to_get_there": "Press FX until DLY 3 appears, or hold FX and turn PRESETS.",
   "what_it_is": "Delay model and ping-pong on the shared delay bus.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "508-509",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L508-L509"
    }
   ]
  },
  {
   "id": "punch",
   "name": "PUNCH",
   "how_to_get_there": "Press FX until PUNCH appears, or hold FX and turn PRESETS.",
   "what_it_is": "The shared punch-in effects lane: length, resolution, status and clear.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "519",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L519"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_draw.c",
     "lines": "1017-1028",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_draw.c#L1017-L1028"
    }
   ]
  },
  {
   "id": "chord",
   "name": "CHORD",
   "how_to_get_there": "Press SEL until CHORD appears, or hold SEL and turn PRESETS.",
   "what_it_is": "One key plays a chord on a polyphonic melodic track; choose its shape, voicing and strum.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "522",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L522"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/seq.c",
     "lines": "230-288",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L288"
    }
   ]
  },
  {
   "id": "note",
   "name": "NOTE",
   "how_to_get_there": "Press SEQ until NOTE appears, or hold SEQ and turn PRESETS; PRESETS moves between steps.",
   "what_it_is": "Melodic note editing: focus a note or chord, change pitch, move it, or shift its timing; on DRUM, only step selection and microtiming are editable.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "568",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L568"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_input.c",
     "lines": "718-775",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L718-L775"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_input.c",
     "lines": "801-815",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L801-L815"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_input.c",
     "lines": "1456-1459",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1456-L1459"
    }
   ]
  },
  {
   "id": "stretch",
   "name": "STRETCH",
   "how_to_get_there": "Press SEQ until STRETCH appears, or hold SEQ and turn PRESETS.",
   "what_it_is": "Reshape the whole pattern by turning STRETCH or REPEAT; NUDGE moves the written steps and ROTATE changes their playback offset.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "569",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L569"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_input.c",
     "lines": "930-973",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L930-L973"
    }
   ]
  },
  {
   "id": "comp2",
   "name": "COMP 2",
   "how_to_get_there": "Press SEQ until COMP 2 appears, or hold SEQ and turn PRESETS.",
   "what_it_is": "A second component on the cursor step, with its type, value and EVERY or WALK/CLIMB rate; CHANCE and RATCH remain on COMP.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "571",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L571"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_input.c",
     "lines": "854-909",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L854-L909"
    }
   ]
  },
  {
   "id": "gen",
   "name": "GENERATOR",
   "how_to_get_there": "Turn SELECT on HOME, or hold HOME and turn SELECT elsewhere; while a song or quick chain is running or armed, GEN does not open and STOP TO EDIT appears.",
   "what_it_is": "Three SELECT pages configure a new piece: genre/seed/energy/form, four part amounts, then lead/complexity/swing/human variation; OCT+ generates, PLAY auditions, HOME or OCT- closes it. With FORM PARTS or SONG, when no section contains owner-stored work, generation stores A–C or A–D and replaces ARRANGE; sections reach flash when stopped and rows after about two stopped seconds. GLO + G4 restores the live music only; generated stored sections and ARRANGE rows stay changed.",
   "source": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/gen.c",
     "lines": "1407-1451",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/gen.c#L1407-L1451"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_input.c",
     "lines": "2141-2155",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2141-L2155"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_input.c",
     "lines": "1901-1909",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1901-L1909"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/gen.c",
     "lines": "938-944",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/gen.c#L938-L944"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/gen.c",
     "lines": "1038-1058",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/gen.c#L1038-L1058"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/project.c",
     "lines": "1838-1856",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/project.c#L1838-L1856"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/project.c",
     "lines": "1563-1574",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/project.c#L1563-L1574"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/song_main.c",
     "lines": "185-201",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L185-L201"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/song_main.c",
     "lines": "409-421",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L409-L421"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_input.c",
     "lines": "1904-1908",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1904-L1908"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_input.c",
     "lines": "2282-2285",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2282-L2285"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui.c",
     "lines": "473",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L473"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/song_main.c",
     "lines": "238-248",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L238-L248"
    }
   ]
  }
 ],
 "controls": {
  "button_fx": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Opens FX, DIST, AUTO PAN, DLY, DLY 2, DLY 3, REVERB, REVERB 2, CHORUS, SLICER, SL BUS, SL BUS 2, SL PITCH, MASTER and PUNCH; ECO hides CHORUS and the SLICER pages. From another group it returns to the last page used; within FX each released tap advances and wraps.",
    "short_label": "EFFECTS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "236-254",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L236-L254"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "278-292",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L278-L292"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1707-1747",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1707-L1747"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "503-519",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L503-L519"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "double_press",
    "action": "On an FX page, two taps within about 0.35 s jump to the start of the section after the one you were in (sections start at FX, SLICER, DLY, REVERB, CHORUS, MASTER).",
    "short_label": "NEXT SECTN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "710-711",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L710-L711"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Opens the FX punch-in layer while held: effects on the keys, mutes on black keys, FX macros on the knobs.",
    "short_label": "PUNCH-IN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "55-66",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L55-L66"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "6",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L6"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "3-10",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L3-L10"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "action": "Held until the map shows (0.4 s by default) and let go with nothing touched: the FX layer locks open ([FX] LOCKED).",
    "short_label": "LOCK FX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "186-220",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L186-L220"
     }
    ]
   },
   {
    "mode": "fx_locked",
    "gesture": "press",
    "action": "Unlocks the FX layer and does nothing else.",
    "short_label": "UNLOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "155-182",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L155-L182"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "While FX is held, steps marked FILL (SEQ > COMP) play; otherwise they stay silent.",
    "short_label": "FILL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2250",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2250"
     },
     {
      "kind": "doc",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "docs/MANUAL.md",
      "lines": "526",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/docs/MANUAL.md?plain=1#L526"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_rec",
    "action": "REC held first: clears the selected track's FX and slicer automation, and the punch-in lane (knob moves and step locks; the values stay). No dialog.",
    "short_label": "CLR FX AUTO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1264-1267",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1264-L1267"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1282-1319",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1282-L1319"
     }
    ]
   }
  ],
  "button_sel": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Opens SCL, SCL 2 and CHORD. From another group it returns to the last page used; within SCL each released tap advances and wraps.",
    "short_label": "SCALE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "236-254",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L236-L254"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "278-292",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L278-L292"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1707-1747",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1707-L1747"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "520-522",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L520-L522"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Opens the SEL (scale) layer: a key sets the root, knobs set root, scale, sequence offset and pitch.",
    "short_label": "SET ROOT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "55-66",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L55-L66"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "69",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L69"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_rec",
    "action": "REC held first: clears the selected track's SCL automation (knob moves and step locks; the values stay). No dialog.",
    "short_label": "CLR SCL AUT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1264-1267",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1264-L1267"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1282-1319",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1282-L1319"
     }
    ]
   }
  ],
  "button_env": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Opens ENV, then ENV DEST. From another group it returns to the page you were last on; on the group's own pages each press goes to the next one (round). Acts when you let go.",
    "short_label": "ENVELOPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2221-2233",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2221-L2233"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2236-2240",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2236-L2240"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1707-1747",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1707-L1747"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "495-499",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L495-L499"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "No layer. Held, it only changes what SELECT and PRESETS do (they step through the ENV pages).",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "55-66",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L55-L66"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1893-1926",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1893-L1926"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_rec",
    "action": "REC held first: clears the selected track's ENV automation (knob moves and step locks; the values stay). No dialog.",
    "short_label": "CLR ENV AUT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1264-1267",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1264-L1267"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1282-1319",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1282-L1319"
     }
    ]
   }
  ],
  "button_lfo": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Opens LFO, LFO DEST, MOD, MSEQ, MSEQ 2. From another group it returns to the page you were last on; on the group's own pages each press goes to the next one (round). Acts when you let go.",
    "short_label": "LFO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "236-254",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L236-L254"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "278-292",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L278-L292"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1707-1747",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1707-L1747"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "498-502",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L498-L502"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Opens the LFO (macro) layer: KNOB 1-4 are macros M1-M4, F3 rolls new macro routes, G3 clears them.",
    "short_label": "MACROS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "55-66",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L55-L66"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "598-631",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L598-L631"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "action": "Held until the map shows and let go: the macros latch, so KNOB 1-4 keep moving M1-M4 on every page ([LFO] LATCH).",
    "short_label": "LATCH MACRO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "186-220",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L186-L220"
     }
    ]
   },
   {
    "mode": "macro_latched",
    "gesture": "press",
    "action": "Unlatches the macros and does nothing else (the knobs edit the page again).",
    "short_label": "UNLATCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "155-182",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L155-L182"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_rec",
    "action": "REC held first: clears the selected track's LFO automation (knob moves and step locks; the values stay). No dialog.",
    "short_label": "CLR LFO AUT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1264-1267",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1264-L1267"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1282-1319",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1282-L1319"
     }
    ]
   }
  ],
  "button_edit": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Opens the sound pages for the track's engine (EDIT 1, EDIT 2, the engine's own pages, FILTER, VOICE; on DRUM the SOUND, LEVELS and STEREO pages come after FILTER). From another group it returns to the page you were last on; on the group's own pages each press goes to the next one (round). Acts when you let go.",
    "short_label": "SOUND EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "236-254",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L236-L254"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "278-292",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L278-L292"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1707-1747",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1707-L1747"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "523-549",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L523-L549"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Opens the EDIT layer: F3 INIT, G3 RECALL, on a DRUM track black keys mute the kit sounds; KNOB 1-4 edit EDIT 1.",
    "short_label": "INIT/RECALL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "55-66",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L55-L66"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "press",
    "action": "Clears the step under the cursor (and its locks) and moves the cursor on. With a step held: clears only that step's locks.",
    "short_label": "CLEAR STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1714-1732",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1714-L1732"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Clears the cursor step and moves on. With grid steps held: clears only their locks.",
    "short_label": "CLEAR STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1714-1732",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1714-L1732"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "626-640",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L626-L640"
     }
    ]
   },
   {
    "mode": "auto_list",
    "gesture": "press",
    "action": "Deletes the selected lock or automation record.",
    "short_label": "DELETE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1734-1737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1734-L1737"
     }
    ]
   },
   {
    "mode": "user",
    "gesture": "press",
    "action": "Renames the selected slot (opens NAME; only the name is written).",
    "short_label": "RENAME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1738-1741",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1738-L1741"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "press",
    "action": "Renames the selected slot (opens NAME; only the name is written).",
    "short_label": "RENAME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1738-1741",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1738-L1741"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_rec",
    "action": "REC held first: clears the selected track’s EDIT automation and step locks, including HUMAN, REC Q, CHORD, VOICING and STRUM through their shared parameter slots; stored values stay. No confirmation.",
    "short_label": "CLR ED AUTO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1264-1267",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1264-L1267"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1282-1319",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1282-L1319"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1297-1308",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1297-L1308"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/core.h",
      "lines": "111-123",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/core.h#L111-L123"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "544-548",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L544-L548"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/motion.c",
      "lines": "34-41",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/motion.c#L34-L41"
     }
    ]
   },
   {
    "mode": "note",
    "gesture": "press",
    "action": "Deletes the focused note without moving the cursor; with ALL focused, clears the step and its locks and advances. Holding a step instead clears only its locks. While a song or quick chain is running or armed, leaves it unchanged and shows STOP TO EDIT.",
    "short_label": "DELETE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1714-1732",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1714-L1732"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "473",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L473"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/song_main.c",
      "lines": "238-248",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L238-L248"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1714-1716",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1714-L1716"
     }
    ]
   }
  ],
  "button_arp": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Opens ARP, then ARP 2. From another group it returns to the page you were last on; on the group's own pages each press goes to the next one (round). Acts when you let go.",
    "short_label": "ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2221-2233",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2221-L2233"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2236-2240",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2236-L2240"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1707-1747",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1707-L1747"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "558-559",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L558-L559"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "No layer. Held, SELECT or PRESETS step through the ARP pages.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "55-66",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L55-L66"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1893-1926",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1893-L1926"
     }
    ]
   },
   {
    "mode": "step_rec",
    "gesture": "press",
    "action": "While a note or chord is held in step recording: toggles writing it as an arpeggio (KNOB 1 resolution, KNOB 2 order, KNOB 3 octaves); letting go of the keys writes it.",
    "short_label": "ARPEGGIATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2226-2230",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2226-L2230"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1351-1385",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1351-L1385"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_rec",
    "action": "REC held first: clears the selected track's ARP automation (knob moves and step locks; the values stay). No dialog.",
    "short_label": "CLR ARP AUT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1264-1267",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1264-L1267"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1282-1319",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1282-L1319"
     }
    ]
   }
  ],
  "button_glo": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Opens MIXER; further presses go to GLOBAL, SYSTEM and back to MIXER. Acts when you let go.",
    "short_label": "MIX/GLOBAL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "278-292",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L278-L292"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1707-1747",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1707-L1747"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "771-785",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L771-L785"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Opens the GLO (mix) layer: mutes, solos, levels, tap tempo, UNDO.",
    "short_label": "MIX LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "55-66",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L55-L66"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_rec",
    "action": "REC held first: clears the level and pan automation of every track (knob moves and step locks; the values stay). No dialog.",
    "short_label": "CLR MIX AUT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1264-1267",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1264-L1267"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1282-1319",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1282-L1319"
     }
    ]
   }
  ],
  "button_seq": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Opens the last SEQ page used (STEP on first entry); further taps cycle STEP, PATTERN, NOTE, STRETCH, COMP, COMP 2, TRACK, PLAYHEADS, AUTOMATION, AUTO LIST and MUTATE.",
    "short_label": "SEQUENCE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2163-2164",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2163-L2164"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "278-292",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L278-L292"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "420-446",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L420-L446"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "566-580",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L566-L580"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "hold",
    "action": "Opens SEQ TOOLS while held: sequence tools on the white keys, length, division, swing and gate on the knobs.",
    "short_label": "SEQ TOOLS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "102-108",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L102-L108"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "55-66",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L55-L66"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1954-1955",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1954-L1955"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "hold",
    "action": "Opens SEQ TOOLS while held: sequence tools on the white keys, length, division, swing and gate on the knobs.",
    "short_label": "SEQ TOOLS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "102-108",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L102-L108"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "55-66",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L55-L66"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1954-1955",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1954-L1955"
     }
    ]
   },
   {
    "mode": "comp",
    "gesture": "hold",
    "action": "Opens SEQ TOOLS while held: sequence tools on the white keys, length, division, swing and gate on the knobs.",
    "short_label": "SEQ TOOLS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "102-108",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L102-L108"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "55-66",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L55-L66"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1954-1955",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1954-L1955"
     }
    ]
   },
   {
    "mode": "pattern",
    "gesture": "hold",
    "action": "Opens SEQ TOOLS while held: sequence tools on the white keys, length, division, swing and gate on the knobs.",
    "short_label": "SEQ TOOLS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "102-108",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L102-L108"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "55-66",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L55-L66"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1954-1955",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1954-L1955"
     }
    ]
   },
   {
    "mode": "automation",
    "gesture": "hold",
    "action": "Opens SEQ TOOLS while held: sequence tools on the white keys, length, division, swing and gate on the knobs.",
    "short_label": "SEQ TOOLS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "102-108",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L102-L108"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "55-66",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L55-L66"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1954-1955",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1954-L1955"
     }
    ]
   },
   {
    "mode": "shift",
    "gesture": "hold",
    "action": "Opens SEQ TOOLS while held: sequence tools on the white keys, length, division, swing and gate on the knobs.",
    "short_label": "SEQ TOOLS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "102-108",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L102-L108"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "55-66",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L55-L66"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1954-1955",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1954-L1955"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "action": "Away from the pattern pages there is no SEQ layer: held about 0.7 s it simply opens the SEQ pages.",
    "short_label": "SEQUENCE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2163-2164",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2163-L2164"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1670-1685",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1670-L1685"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "102-108",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L102-L108"
     }
    ]
   },
   {
    "mode": "any_layer",
    "gesture": "press",
    "action": "Ignored while another layer's button is held (no page, no menu).",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1946-1962",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1946-L1962"
     }
    ]
   },
   {
    "mode": "note",
    "gesture": "hold",
    "action": "Opens SEQ TOOLS while held, with sequence tools on the white keys and length, division, swing and gate on the knobs.",
    "short_label": "SEQ TOOLS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "99-109",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L99-L109"
     }
    ]
   },
   {
    "mode": "comp2",
    "gesture": "hold",
    "action": "Opens SEQ TOOLS while held, with sequence tools on the white keys and length, division, swing and gate on the knobs.",
    "short_label": "SEQ TOOLS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "99-109",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L99-L109"
     }
    ]
   }
  ],
  "button_save": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Opens SAVE > USER (ready to save the track's sound); on SAVE pages each press goes to the next: USER, PROJECT, ARRANGE, TOOLS, PRESETS. Acts when you let go.",
    "short_label": "SAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "278-292",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L278-L292"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "535",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L535"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Opens the SAVE (song) layer: play or store sections A-D, chains, loop/song, SONG REC, project switch.",
    "short_label": "SONG LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "55-66",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L55-L66"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "405-437",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L405-L437"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Does nothing on the NAME screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2011-2014",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2011-L2014"
     }
    ]
   },
   {
    "mode": "any_layer",
    "gesture": "press",
    "action": "Ignored while another layer's button is held (no page, no menu).",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1946-1962",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1946-L1962"
     }
    ]
   }
  ],
  "button_home": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Goes to HOME (the ecosystem). Acts when you let go.",
    "short_label": "HOME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2165-2166",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2165-L2166"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "787-795",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L787-L795"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "action": "Held about 0.7 s: opens the MENU.",
    "short_label": "MENU",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1990-2000",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1990-L2000"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1670-1685",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1670-L1685"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Closes the MENU (settings are kept).",
    "short_label": "CLOSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1987-1989",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1987-L1989"
     }
    ]
   },
   {
    "mode": "about",
    "gesture": "press",
    "action": "Closes the MENU from ABOUT too.",
    "short_label": "CLOSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1987-1989",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1987-L1989"
     }
    ]
   },
   {
    "mode": "any_layer",
    "gesture": "press",
    "action": "Ignored while another layer's button is held (no page, no menu).",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1946-1962",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1946-L1962"
     }
    ]
   },
   {
    "mode": "gen",
    "gesture": "press",
    "action": "Closes GEN and returns to HOME, keeping the generated piece.",
    "short_label": "CLOSE GEN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2141-2150",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2141-L2150"
     }
    ]
   }
  ],
  "button_play_stop": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Starts or stops playback (all tracks). Stops a count-in. With the SAVE layer's D5 set to SONG, it plays the arrangement from any page.",
    "short_label": "PLAY/STOP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2173-2182",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2173-L2182"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "424-425",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L424-L425"
     }
    ]
   },
   {
    "mode": "arrange",
    "gesture": "press",
    "action": "Plays the song from the top, or stops it.",
    "short_label": "PLAY SONG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2173-2182",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2173-L2182"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "486-498",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L486-L498"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "While playing: restarts from the top without stopping (internal clock only). Stopped: starts.",
    "short_label": "RESTART",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "634-644",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L634-L644"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Stops playback if something started it meanwhile, so the name can be saved; never starts it.",
    "short_label": "STOP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2014-2016",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2014-L2016"
     }
    ]
   },
   {
    "mode": "gen",
    "gesture": "press",
    "action": "Starts or stops transport while GEN stays open; it starts ARRANGE when the SAVE layer’s PLAY setting is SONG. GEN selects SONG only after it successfully writes sections and rows for PARTS or SONG; with LOOP or protected owner-stored sections it keeps the previous PLAY setting.",
    "short_label": "PLAY STOP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2151-2155",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2151-L2155"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2151-2154",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2151-L2154"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/gen.c",
      "lines": "1055-1058",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/gen.c#L1055-L1058"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/gen.c",
      "lines": "937-943",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/gen.c#L937-L943"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/gen.c",
      "lines": "1038-1058",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/gen.c#L1038-L1058"
     }
    ]
   }
  ],
  "button_rec": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Arms or disarms recording on the selected track. Arming while stopped also starts playback: notes are recorded into the pattern and knob moves as automation.",
    "short_label": "REC ARM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "516-540",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L516-L540"
     },
     {
      "kind": "doc",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "docs/MANUAL.md",
      "lines": "492-494",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/docs/MANUAL.md?plain=1#L492-L494"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "press",
    "action": "While stopped: arms step recording (KEYS WRITE STEPS) and playback stays stopped. While playing: records live.",
    "short_label": "STEP REC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "529-532",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L529-L532"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Arms the drum track; stopped, playback starts. The lane keys then record live (the white keys stay the steps).",
    "short_label": "REC ARM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "535-536",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L535-L536"
     }
    ]
   },
   {
    "mode": "arrange",
    "gesture": "press",
    "action": "Does not arm here; the screen says to go to SEQ to record.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "523-526",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L523-L526"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Opens the REC layer: F3 clears the track, G3 steps the metronome click.",
    "short_label": "REC LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "55-66",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L55-L66"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "385-395",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L385-L395"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_seq",
    "action": "SEQ held, then REC: asks CLEAR ALL SEQUENCES? (every track's steps and automation, plus the punch-in lane); OCT+ clears.",
    "short_label": "CLEAR ALL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2183-2193",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2183-L2193"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2082-2094",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2082-L2094"
     }
    ]
   },
   {
    "mode": "note",
    "gesture": "press",
    "action": "On a melodic track while stopped, arms step recording without starting playback; while playing, records live. A drum track starts live recording.",
    "short_label": "RECORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "509-539",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L509-L539"
     }
    ]
   }
  ],
  "button_oct_down": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Shifts the keys down an octave (to -3).",
    "short_label": "OCT -",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2205-2220",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2205-L2220"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_with:button_oct_up",
    "action": "Both together: octave back to 0.",
    "short_label": "OCT 0",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2205-2220",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2205-L2220"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_with:button_oct_up",
    "action": "Both held 5 s: update (boot) mode for installing firmware; a countdown shows from 2 s and letting go cancels.",
    "short_label": "UPDATE 5S",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/main.c",
      "lines": "253-282",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/main.c#L253-L282"
     }
    ]
   },
   {
    "mode": "dialog",
    "gesture": "press",
    "action": "No: closes the dialog, nothing done.",
    "short_label": "NO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2023-2026",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2023-L2026"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2131-2137",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2131-L2137"
     }
    ]
   },
   {
    "mode": "dice_dialog",
    "gesture": "press",
    "action": "Cancels: puts back the part as it was before the first roll; the rest plays on.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2132-2136",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2132-L2136"
     }
    ]
   },
   {
    "mode": "user",
    "gesture": "press",
    "action": "Drops the picked action; with none picked, goes to HOME.",
    "short_label": "BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2241-2248",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2241-L2248"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "press",
    "action": "Drops the picked action; with none picked, goes to HOME.",
    "short_label": "BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2241-2248",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2241-L2248"
     }
    ]
   },
   {
    "mode": "tools",
    "gesture": "press",
    "action": "Drops the picked action; with none picked, goes to HOME.",
    "short_label": "BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2241-2248",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2241-L2248"
     }
    ]
   },
   {
    "mode": "automation",
    "gesture": "press",
    "action": "Drops the picked action; with none picked, goes to HOME.",
    "short_label": "BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2241-2248",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2241-L2248"
     }
    ]
   },
   {
    "mode": "arrange",
    "gesture": "press",
    "action": "Goes to HOME.",
    "short_label": "HOME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2241-2248",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2241-L2248"
     }
    ]
   },
   {
    "mode": "auto_list",
    "gesture": "press",
    "action": "Goes to HOME.",
    "short_label": "HOME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2241-2248",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2241-L2248"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_events.c",
      "lines": "14",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_events.c#L14"
     }
    ]
   },
   {
    "mode": "mutate",
    "gesture": "press",
    "action": "FREEZE: stops every mutation until pressed again (MUTATE FROZEN / FREE). No octave change here.",
    "short_label": "FREEZE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2210-2214",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2210-L2214"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Previous value of the selected row.",
    "short_label": "PREV",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_menu.c",
      "lines": "458-499",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_menu.c#L458-L499"
     }
    ]
   },
   {
    "mode": "about",
    "gesture": "press",
    "action": "Back to the menu tabs.",
    "short_label": "BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_menu.c",
      "lines": "458-499",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_menu.c#L458-L499"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Cancels: nothing is written.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "240-274",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L240-L274"
     }
    ]
   },
   {
    "mode": "layer_save",
    "gesture": "press_while_holding:button_save",
    "action": "Recalls the section playing as it was stored (on the next bar while playing).",
    "short_label": "RECALL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "659-682",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L659-L682"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/song_main.c",
      "lines": "203-211",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L203-L211"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing here (no octave shift inside this layer; JIANT has no put-back for layers).",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "659-682",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L659-L682"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2205-2220",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2205-L2220"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "135-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L135-L138"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Does nothing here (no octave shift inside this layer; JIANT has no put-back for layers).",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "659-682",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L659-L682"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2205-2220",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2205-L2220"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "135-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L135-L138"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Does nothing here (no octave shift inside this layer; JIANT has no put-back for layers).",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "659-682",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L659-L682"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2205-2220",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2205-L2220"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "135-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L135-L138"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "Does nothing here (no octave shift inside this layer; JIANT has no put-back for layers).",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "659-682",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L659-L682"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2205-2220",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2205-L2220"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "135-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L135-L138"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press_while_holding:button_rec",
    "action": "Does nothing here (no octave shift inside this layer; JIANT has no put-back for layers).",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "659-682",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L659-L682"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2205-2220",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2205-L2220"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "135-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L135-L138"
     }
    ]
   },
   {
    "mode": "layer_macro",
    "gesture": "press_while_holding:button_lfo",
    "action": "Does nothing here (no octave shift inside this layer; JIANT has no put-back for layers).",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "659-682",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L659-L682"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2205-2220",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2205-L2220"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "135-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L135-L138"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "With MENU > FX LATCH ON: turns every latched effect and FX macro off (FX ALL OFF). With FX LATCH OFF (the default) it just shifts the octave.",
    "short_label": "FX ALL OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "659-682",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L659-L682"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "135-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L135-L138"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2205-2220",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2205-L2220"
     }
    ]
   },
   {
    "mode": "fx_locked",
    "gesture": "press",
    "action": "Shifts the octave like anywhere else; it is FX ALL OFF only when MENU > FX LATCH is ON.",
    "short_label": "OCT -",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "135-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L135-L138"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2205-2220",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2205-L2220"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "129-134",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L129-L134"
     }
    ]
   },
   {
    "mode": "gen",
    "gesture": "press",
    "action": "Closes GEN, keeping the current piece. GLO + G4 restores the live music only; generated stored sections and ARRANGE rows stay changed. With FORM PARTS or SONG, when no section contains owner-stored work, generation stores A–C or A–D and replaces ARRANGE; sections reach flash when stopped and rows after about two stopped seconds.",
    "short_label": "CLOSE GEN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2131-2137",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2131-L2137"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/gen.c",
      "lines": "1354-1359",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/gen.c#L1354-L1359"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/gen.c",
      "lines": "938-944",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/gen.c#L938-L944"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/gen.c",
      "lines": "1038-1058",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/gen.c#L1038-L1058"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/project.c",
      "lines": "1838-1856",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/project.c#L1838-L1856"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/project.c",
      "lines": "1563-1574",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/project.c#L1563-L1574"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/song_main.c",
      "lines": "185-201",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L185-L201"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/song_main.c",
      "lines": "409-421",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L409-L421"
     }
    ]
   },
   {
    "mode": "punch",
    "gesture": "press",
    "action": "Drops the selected action; if none is selected, returns to HOME.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2241-2247",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2241-L2247"
     }
    ]
   }
  ],
  "button_oct_up": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Shifts the keys up an octave (to +3).",
    "short_label": "OCT +",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2205-2220",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2205-L2220"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_with:button_oct_down",
    "action": "Both together: octave back to 0.",
    "short_label": "OCT 0",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2205-2220",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2205-L2220"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_with:button_oct_down",
    "action": "Both held 5 s: update (boot) mode for installing firmware; a countdown shows from 2 s and letting go cancels.",
    "short_label": "UPDATE 5S",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/main.c",
      "lines": "253-282",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/main.c#L253-L282"
     }
    ]
   },
   {
    "mode": "dialog",
    "gesture": "press",
    "action": "Yes: does what the dialog asks. Acts when you let go.",
    "short_label": "YES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2023-2026",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2023-L2026"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1246-1262",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1246-L1262"
     }
    ]
   },
   {
    "mode": "dice_dialog",
    "gesture": "press",
    "action": "Keeps the diced part (GLO + G4 can still undo it).",
    "short_label": "KEEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2037-2038",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2037-L2038"
     }
    ]
   },
   {
    "mode": "user",
    "gesture": "press",
    "action": "Does the action picked with a knob (turned right): LOAD replaces the track's sound at once, with no question and no undo; ERASE and SAVE ask first when the slot is used.",
    "short_label": "DO IT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1200-1214",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1200-L1214"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/upreset.c",
      "lines": "300-312",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/upreset.c#L300-L312"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "press",
    "action": "Does the action picked with a knob (turned right): LOAD replaces the music at once with no question (GLO + G4 undoes it); SAVE asks first when the slot is used and needs playback stopped.",
    "short_label": "DO IT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1215-1231",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1215-L1231"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "555",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L555"
     }
    ]
   },
   {
    "mode": "tools",
    "gesture": "press",
    "action": "Runs the picked TOOLS action after a confirmation. The sixth action builds a CPU test song, replacing the current music; GLO + G4 restores it.",
    "short_label": "DO IT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1160-1184",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1160-L1184"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2069-2074",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2069-L2074"
     }
    ]
   },
   {
    "mode": "automation",
    "gesture": "press",
    "action": "Does the action picked with a knob (turned right); this page always asks first, then OCT+ again does it.",
    "short_label": "DO IT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1160-1184",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1160-L1184"
     }
    ]
   },
   {
    "mode": "arrange",
    "gesture": "press",
    "action": "Plays the song from the top, or stops it.",
    "short_label": "PLAY SONG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2241-2248",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2241-L2248"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1187-1188",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1187-L1188"
     }
    ]
   },
   {
    "mode": "auto_list",
    "gesture": "press",
    "action": "On + ADD LOCK: adds a lock at the step and parameter set there. On a record: switches it between LOCK and AUTO.",
    "short_label": "ADD/TOGGLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2241-2248",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2241-L2248"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_events.c",
      "lines": "170-203",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_events.c#L170-L203"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_events.c",
      "lines": "11-14",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_events.c#L11-L14"
     }
    ]
   },
   {
    "mode": "mutate",
    "gesture": "press",
    "action": "KEEP: the music as it is now becomes the anchor that ORBIT varies around. No octave change here.",
    "short_label": "KEEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2210-2214",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2210-L2214"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Next value of the selected row; on CALIBRATION, INIT SYSTEM or ABOUT: opens it.",
    "short_label": "NEXT/OPEN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_menu.c",
      "lines": "458-499",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_menu.c#L458-L499"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "124-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L124-L138"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Writes the name and saves.",
    "short_label": "WRITE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "240-274",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L240-L274"
     }
    ]
   },
   {
    "mode": "layer_save",
    "gesture": "press_while_holding:button_save",
    "action": "Stores the music now into the section currently playing (with none playing it says PLAY A SECTION FIRST); the flash copy is written once you stop.",
    "short_label": "STORE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "659-682",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L659-L682"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/song_main.c",
      "lines": "185-201",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L185-L201"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing here (no octave shift inside this layer; JIANT has no put-back for layers).",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "659-682",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L659-L682"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2205-2220",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2205-L2220"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "135-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L135-L138"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Does nothing here (no octave shift inside this layer; JIANT has no put-back for layers).",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "659-682",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L659-L682"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2205-2220",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2205-L2220"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "135-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L135-L138"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Does nothing here (no octave shift inside this layer; JIANT has no put-back for layers).",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "659-682",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L659-L682"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2205-2220",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2205-L2220"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "135-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L135-L138"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "Does nothing here (no octave shift inside this layer; JIANT has no put-back for layers).",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "659-682",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L659-L682"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2205-2220",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2205-L2220"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "135-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L135-L138"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press_while_holding:button_rec",
    "action": "Does nothing here (no octave shift inside this layer; JIANT has no put-back for layers).",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "659-682",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L659-L682"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2205-2220",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2205-L2220"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "135-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L135-L138"
     }
    ]
   },
   {
    "mode": "layer_macro",
    "gesture": "press_while_holding:button_lfo",
    "action": "Does nothing here (no octave shift inside this layer; JIANT has no put-back for layers).",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "659-682",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L659-L682"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2205-2220",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2205-L2220"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "135-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L135-L138"
     }
    ]
   },
   {
    "mode": "gen",
    "gesture": "press",
    "action": "If no song or quick chain is running or armed, generates a piece from the GEN settings and leaves GEN open; using unchanged settings again picks a new seed first. GLO + G4 restores the live music only; generated stored sections and ARRANGE rows stay changed. With FORM PARTS or SONG, when no section contains owner-stored work, generation stores A–C or A–D and replaces ARRANGE; sections reach flash when stopped and rows after about two stopped seconds. While a song or quick chain is running or armed, OCT+ instead closes GEN and generates nothing.",
    "short_label": "GENERATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/gen.c",
      "lines": "1354-1389",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/gen.c#L1354-L1389"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2039-2042",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2039-L2042"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/gen.c",
      "lines": "938-944",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/gen.c#L938-L944"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/gen.c",
      "lines": "1038-1058",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/gen.c#L1038-L1058"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/project.c",
      "lines": "1838-1856",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/project.c#L1838-L1856"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/project.c",
      "lines": "1563-1574",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/project.c#L1563-L1574"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/song_main.c",
      "lines": "185-201",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L185-L201"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/song_main.c",
      "lines": "409-421",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L409-L421"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2023-2041",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2023-L2041"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "473",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L473"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/song_main.c",
      "lines": "238-248",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L238-L248"
     }
    ]
   },
   {
    "mode": "punch",
    "gesture": "press",
    "action": "With CLEAR picked, opens a confirmation; OCT+ again erases the whole punch-in lane. Stop song playback first.",
    "short_label": "CLEAR LANE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1160-1170",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1160-L1170"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2044-2045",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2044-L2045"
     }
    ]
   }
  ],
  "encoder_select": [
   {
    "mode": "any",
    "gesture": "turn",
    "action": "Steps through the pages of the group you are in (one page a click, stopping at the first and last). Not the tempo since 0.6.67.",
    "short_label": "PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2279-2287",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2279-L2287"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1634-1654",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1634-L1654"
     }
    ]
   },
   {
    "mode": "home",
    "gesture": "turn",
    "action": "Opens GEN to choose a genre, seed, energy, form and part amounts; OCT+ makes the piece, SELECT changes its three pages, and HOME or OCT- closes it. GLO + G4 restores the live music only; generated stored sections and ARRANGE rows stay changed. With FORM PARTS or SONG, when no section contains owner-stored work, generation stores A–C or A–D and replaces ARRANGE; sections reach flash when stopped and rows after about two stopped seconds.",
    "short_label": "GENERATOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1898-1909",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1898-L1909"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2279-2287",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2279-L2287"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/gen.c",
      "lines": "1383-1389",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/gen.c#L1383-L1389"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/gen.c",
      "lines": "1408-1450",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/gen.c#L1408-L1450"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/gen.c",
      "lines": "938-944",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/gen.c#L938-L944"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/gen.c",
      "lines": "1038-1058",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/gen.c#L1038-L1058"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/project.c",
      "lines": "1838-1856",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/project.c#L1838-L1856"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/project.c",
      "lines": "1563-1574",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/project.c#L1563-L1574"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/song_main.c",
      "lines": "185-201",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L185-L201"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/song_main.c",
      "lines": "409-421",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L409-L421"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_home",
    "action": "Opens GEN to choose a genre, seed, energy, form and part amounts; OCT+ makes the piece, SELECT changes its three pages, and HOME or OCT- closes it. GLO + G4 restores the live music only; generated stored sections and ARRANGE rows stay changed. With FORM PARTS or SONG, when no section contains owner-stored work, generation stores A–C or A–D and replaces ARRANGE; sections reach flash when stopped and rows after about two stopped seconds.",
    "short_label": "GENERATOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1898-1909",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1898-L1909"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2279-2287",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2279-L2287"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/gen.c",
      "lines": "1383-1389",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/gen.c#L1383-L1389"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/gen.c",
      "lines": "1408-1450",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/gen.c#L1408-L1450"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/gen.c",
      "lines": "938-944",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/gen.c#L938-L944"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/gen.c",
      "lines": "1038-1058",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/gen.c#L1038-L1058"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/project.c",
      "lines": "1838-1856",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/project.c#L1838-L1856"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/project.c",
      "lines": "1563-1574",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/project.c#L1563-L1574"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/song_main.c",
      "lines": "185-201",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L185-L201"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/song_main.c",
      "lines": "409-421",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L409-L421"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_edit",
    "action": "Rolls a new variation of the selected track's sound (on DRUM, the kit) and plays it at once under KEEP DICED SOUND?; OCT+ keeps, OCT- puts back.",
    "short_label": "DICE SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1893-1926",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1893-L1926"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1609-1630",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1609-L1630"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1520-1523",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1520-L1523"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_seq",
    "action": "Writes a new sequence for the selected track in its scale (a beat on DRUM) under KEEP DICED SEQ?; OCT+ keeps, OCT- puts back.",
    "short_label": "DICE SEQ",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1893-1926",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1893-L1926"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1609-1630",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1609-L1630"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1520-1523",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1520-L1523"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_lfo",
    "action": "Rolls the selected track's LFO under KEEP DICED LFO?; OCT+ keeps, OCT- puts back.",
    "short_label": "DICE LFO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1893-1926",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1893-L1926"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1609-1630",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1609-L1630"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1520-1523",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1520-L1523"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_fx",
    "action": "Rolls the track's drive, sends and autopan and the shared reverb and delay under KEEP DICED FX?; OCT+ keeps, OCT- puts back.",
    "short_label": "DICE FX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1893-1926",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1893-L1926"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1609-1630",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1609-L1630"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1520-1523",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1520-L1523"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_glo",
    "action": "Sets the tempo (40-240 BPM), from any page. This is the SELECT tempo control since 0.6.67.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2274-2278",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2274-L2278"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1961-1962",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1961-L1962"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_env",
    "action": "Steps through that button's pages forwards or back (no wrap); letting go stays there.",
    "short_label": "JUMP PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1893-1926",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1893-L1926"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "60-91",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L60-L91"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_sel",
    "action": "Steps through that button's pages forwards or back (no wrap); letting go stays there.",
    "short_label": "JUMP PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1893-1926",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1893-L1926"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "60-91",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L60-L91"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_arp",
    "action": "Steps through that button's pages forwards or back (no wrap); letting go stays there.",
    "short_label": "JUMP PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1893-1926",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1893-L1926"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "60-91",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L60-L91"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_save",
    "action": "Steps through that button's pages forwards or back (no wrap); letting go stays there.",
    "short_label": "JUMP PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1893-1926",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1893-L1926"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "60-91",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L60-L91"
     }
    ]
   },
   {
    "mode": "dice_dialog",
    "gesture": "turn",
    "action": "Rolls the same part again.",
    "short_label": "DICE AGAIN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2138-2140",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2138-L2140"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "action": "Does nothing in the MENU.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_menu.c",
      "lines": "458-499",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_menu.c#L458-L499"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "turn",
    "action": "Does nothing on the NAME screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "240-274",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L240-L274"
     }
    ]
   },
   {
    "mode": "macro_latched",
    "gesture": "turn",
    "action": "Steps through pages even with macros latched; on HOME it opens GEN, although the latched map still hints at dice.",
    "short_label": "PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2279-2287",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2279-L2287"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "79",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L79"
     }
    ]
   },
   {
    "mode": "gen",
    "gesture": "turn",
    "action": "Cycles the three GEN pages in either direction; the turn that opened GEN is ignored until it has paused for 0.4 seconds.",
    "short_label": "GEN PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/gen.c",
      "lines": "1444-1450",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/gen.c#L1444-L1450"
     }
    ]
   }
  ],
  "encoder_presets": [
   {
    "mode": "any",
    "gesture": "turn",
    "action": "Changes the selected track’s sound across all factory and saved user sounds, keeping the steps, CHORD and pattern settings. Browsing a DRUM factory preset loads its kit into the section’s shared drum kit.",
    "short_label": "SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1450-1470",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1450-L1470"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1443-1449",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1443-L1449"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "14",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L14"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "985-1000",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L985-L1000"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "1137-1146",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L1137-L1146"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "turn",
    "action": "Moves the step cursor (as KNOB 1).",
    "short_label": "CURSOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1450-1470",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1450-L1470"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "turn",
    "action": "Moves the step cursor (as KNOB 1).",
    "short_label": "CURSOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1450-1470",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1450-L1470"
     }
    ]
   },
   {
    "mode": "comp",
    "gesture": "turn",
    "action": "Moves the step cursor (as KNOB 1).",
    "short_label": "CURSOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1450-1470",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1450-L1470"
     }
    ]
   },
   {
    "mode": "pattern",
    "gesture": "turn",
    "action": "Moves the step cursor.",
    "short_label": "CURSOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1450-1470",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1450-L1470"
     }
    ]
   },
   {
    "mode": "automation",
    "gesture": "turn",
    "action": "Moves the step cursor.",
    "short_label": "CURSOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1450-1470",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1450-L1470"
     }
    ]
   },
   {
    "mode": "shift",
    "gesture": "turn",
    "action": "Moves the step cursor.",
    "short_label": "CURSOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1450-1470",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1450-L1470"
     }
    ]
   },
   {
    "mode": "auto_list",
    "gesture": "turn",
    "action": "Picks the row (as KNOB 1).",
    "short_label": "ROW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1450-1470",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1450-L1470"
     }
    ]
   },
   {
    "mode": "user",
    "gesture": "turn",
    "action": "Picks the slot (as KNOB 1).",
    "short_label": "SLOT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1450-1470",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1450-L1470"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "turn",
    "action": "Picks the section A-D (as KNOB 2).",
    "short_label": "SECTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1450-1470",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1450-L1470"
     }
    ]
   },
   {
    "mode": "arrange",
    "gesture": "turn",
    "action": "Picks the row (as KNOB 1).",
    "short_label": "ROW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1450-1470",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1450-L1470"
     }
    ]
   },
   {
    "mode": "tools",
    "gesture": "turn",
    "action": "Picks the action in the list.",
    "short_label": "PICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1450-1470",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1450-L1470"
     }
    ]
   },
   {
    "mode": "mutate",
    "gesture": "turn",
    "action": "Changes the track's sound, as on most pages (these SEQ pages have no cursor).",
    "short_label": "SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1450-1470",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1450-L1470"
     }
    ]
   },
   {
    "mode": "fugue",
    "gesture": "turn",
    "action": "Changes the track's sound, as on most pages (these SEQ pages have no cursor).",
    "short_label": "SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1450-1470",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1450-L1470"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_fx",
    "action": "Steps through that button's pages forwards or back (no wrap); letting go stays there, with no tap or layer. Only before the layer's keys or knobs were used.",
    "short_label": "JUMP PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1893-1926",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1893-L1926"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "60-91",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L60-L91"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_sel",
    "action": "Steps through that button's pages forwards or back (no wrap); letting go stays there, with no tap or layer. Only before the layer's keys or knobs were used.",
    "short_label": "JUMP PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1893-1926",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1893-L1926"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "60-91",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L60-L91"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_env",
    "action": "Steps through that button's pages forwards or back (no wrap); letting go stays there, with no tap or layer. Only before the layer's keys or knobs were used.",
    "short_label": "JUMP PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1893-1926",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1893-L1926"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "60-91",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L60-L91"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_lfo",
    "action": "Steps through that button's pages forwards or back (no wrap); letting go stays there, with no tap or layer. Only before the layer's keys or knobs were used.",
    "short_label": "JUMP PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1893-1926",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1893-L1926"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "60-91",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L60-L91"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_edit",
    "action": "Steps through that button's pages forwards or back (no wrap); letting go stays there, with no tap or layer. Only before the layer's keys or knobs were used.",
    "short_label": "JUMP PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1893-1926",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1893-L1926"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "60-91",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L60-L91"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_glo",
    "action": "Steps through that button's pages forwards or back (no wrap); letting go stays there, with no tap or layer. Only before the layer's keys or knobs were used.",
    "short_label": "JUMP PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1893-1926",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1893-L1926"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "60-91",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L60-L91"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_save",
    "action": "Steps through that button's pages forwards or back (no wrap); letting go stays there, with no tap or layer. Only before the layer's keys or knobs were used.",
    "short_label": "JUMP PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1893-1926",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1893-L1926"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "60-91",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L60-L91"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_arp",
    "action": "Steps through that button's pages forwards or back (no wrap); letting go stays there, with no tap or layer. Only before the layer's keys or knobs were used.",
    "short_label": "JUMP PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1893-1926",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1893-L1926"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "60-91",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L60-L91"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_seq",
    "action": "Steps through that button's pages forwards or back (no wrap); letting go stays there, with no tap or layer. Only before the layer's keys or knobs were used.",
    "short_label": "JUMP PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1893-1926",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1893-L1926"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "60-91",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L60-L91"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "action": "Moves between the rows of the tab.",
    "short_label": "MENU ROW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_menu.c",
      "lines": "458-499",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_menu.c#L458-L499"
     }
    ]
   },
   {
    "mode": "about",
    "gesture": "turn",
    "action": "Scrolls the credits.",
    "short_label": "SCROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_menu.c",
      "lines": "458-499",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_menu.c#L458-L499"
     }
    ]
   },
   {
    "mode": "any_layer",
    "gesture": "turn",
    "action": "Ignored once the layer's keys or knobs have been used (a stray turn would change the sound).",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1946-1962",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1946-L1962"
     }
    ]
   },
   {
    "mode": "fx_locked",
    "gesture": "turn",
    "action": "Ignored while the FX layer is locked open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1963-1967",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1963-L1967"
     }
    ]
   },
   {
    "mode": "dialog",
    "gesture": "turn",
    "action": "Does nothing while a dialog is up.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2023-2026",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2023-L2026"
     }
    ]
   },
   {
    "mode": "dice_dialog",
    "gesture": "turn",
    "action": "Does nothing while a dialog is up.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2023-2026",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2023-L2026"
     }
    ]
   },
   {
    "mode": "note",
    "gesture": "turn",
    "action": "Moves the step cursor; KNOB 1 on this page chooses the focused note instead.",
    "short_label": "STEP CURSOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1450-1469",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1450-L1469"
     }
    ]
   },
   {
    "mode": "comp2",
    "gesture": "turn",
    "action": "Moves the step cursor, as KNOB 1.",
    "short_label": "STEP CURSOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1450-1469",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1450-L1469"
     }
    ]
   },
   {
    "mode": "stretch",
    "gesture": "turn",
    "action": "Browses the selected track’s sounds, as on most pages; this page has no step-cursor override.",
    "short_label": "SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1450-1470",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1450-L1470"
     }
    ]
   },
   {
    "mode": "gen",
    "gesture": "turn",
    "action": "Does nothing while GEN is open.",
    "short_label": "INACTIVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2141-2159",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2141-L2159"
     }
    ]
   }
  ],
  "encoder_algorithm": [
   {
    "mode": "any",
    "gesture": "turn",
    "action": "Selects the track on every page: T1-T4 with TRACKS 4 (the default), T1-T6 with TRACKS 6. Stops at the ends.",
    "short_label": "TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2271-2273",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2271-L2273"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "action": "Moves between the MENU tabs.",
    "short_label": "MENU TAB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_menu.c",
      "lines": "458-499",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_menu.c#L458-L499"
     }
    ]
   },
   {
    "mode": "any_layer",
    "gesture": "turn",
    "action": "Ignored while a layer's button is held.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1946-1962",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1946-L1962"
     }
    ]
   },
   {
    "mode": "dialog",
    "gesture": "turn",
    "action": "Does nothing while a dialog is up.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2023-2026",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2023-L2026"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2158",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2158"
     }
    ]
   },
   {
    "mode": "dice_dialog",
    "gesture": "turn",
    "action": "Does nothing while a dialog is up.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2023-2026",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2023-L2026"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2158",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2158"
     }
    ]
   },
   {
    "mode": "gen",
    "gesture": "turn",
    "action": "Does nothing while GEN is open.",
    "short_label": "INACTIVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2141-2159",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2141-L2159"
     }
    ]
   }
  ],
  "encoder_knob1": [
   {
    "mode": "home",
    "gesture": "turn",
    "action": "The selected track's main control 1: ANALOG cutoff, FM6 modulation, PHASE DCW, LOFI wave, VOICE vowel, WHEEL registration, NOISE frequency, DRUM morph. Knob moves are recorded as automation while armed.",
    "short_label": "MAIN 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "1391-1396",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L1391-L1396"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2318-2320",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2318-L2320"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_analog.c",
      "lines": "292",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_analog.c#L292"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_fm6.c",
      "lines": "508",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_fm6.c#L508"
     },
     {
      "kind": "doc",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "docs/MANUAL.md",
      "lines": "369-379",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/docs/MANUAL.md?plain=1#L369-L379"
     }
    ]
   },
   {
    "mode": "env",
    "gesture": "turn",
    "action": "Sets the attack; on FM6 it changes the carrier envelopes.",
    "short_label": "ATTACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "496",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L496"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_fm6.c",
      "lines": "339-347",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_fm6.c#L339-L347"
     }
    ]
   },
   {
    "mode": "env_dest",
    "gesture": "turn",
    "action": "Sets the env to filter.",
    "short_label": "ENV>FILTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "497",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L497"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "68",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L68"
     }
    ]
   },
   {
    "mode": "lfo",
    "gesture": "turn",
    "action": "The LFO rate; turned left past the slowest it switches to tempo divisions (4 bars to 1/32).",
    "short_label": "RATE/SYNC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "498",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L498"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "69-71",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L69-L71"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1135-1139",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1135-L1139"
     }
    ]
   },
   {
    "mode": "lfo_dest",
    "gesture": "turn",
    "action": "Sets the lfo to pitch.",
    "short_label": "LFO>PITCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "499",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L499"
     }
    ]
   },
   {
    "mode": "mod",
    "gesture": "turn",
    "action": "Which of the 4 matrix slots the other knobs edit.",
    "short_label": "MOD SLOT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "500",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L500"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1131-1134",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1131-L1134"
     }
    ]
   },
   {
    "mode": "mseq",
    "gesture": "turn",
    "action": "Which of the 16 modulation steps KNOB 2 edits.",
    "short_label": "MSEQ STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "501",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L501"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1123-1126",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1123-L1126"
     }
    ]
   },
   {
    "mode": "mseq2",
    "gesture": "turn",
    "action": "Sets the mseq div.",
    "short_label": "MSEQ DIV",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "502",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L502"
     }
    ]
   },
   {
    "mode": "fx",
    "gesture": "turn",
    "action": "The track's drive (DIST).",
    "short_label": "DRIVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "503",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L503"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1135-1139",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1135-L1139"
     }
    ]
   },
   {
    "mode": "dist",
    "gesture": "turn",
    "action": "Drive amount.",
    "short_label": "DRIVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "504",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L504"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "130-131",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L130-L131"
     }
    ]
   },
   {
    "mode": "autopan",
    "gesture": "turn",
    "action": "Sets the pan depth.",
    "short_label": "PAN DEPTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "505",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L505"
     }
    ]
   },
   {
    "mode": "slicer",
    "gesture": "turn",
    "action": "Sets the slicer mode.",
    "short_label": "SLICER MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "514",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L514"
     }
    ]
   },
   {
    "mode": "sl_bus",
    "gesture": "turn",
    "action": "Sets the t1 in.",
    "short_label": "T1 IN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "515",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L515"
     }
    ]
   },
   {
    "mode": "sl_bus2",
    "gesture": "turn",
    "action": "Sets the t5 in.",
    "short_label": "T5 IN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "516",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L516"
     }
    ]
   },
   {
    "mode": "sl_pitch",
    "gesture": "turn",
    "action": "Which of the 16 slicer pitch steps KNOB 2 edits.",
    "short_label": "PITCH STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "517",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L517"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1119-1122",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1119-L1122"
     }
    ]
   },
   {
    "mode": "dly",
    "gesture": "turn",
    "action": "Sets the time.",
    "short_label": "TIME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "506",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L506"
     }
    ]
   },
   {
    "mode": "dly2",
    "gesture": "turn",
    "action": "Sets the width.",
    "short_label": "WIDTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "507",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L507"
     }
    ]
   },
   {
    "mode": "reverb",
    "gesture": "turn",
    "action": "Sets the type.",
    "short_label": "TYPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "510",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L510"
     },
     {
      "kind": "doc",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "docs/MANUAL.md",
      "lines": "903-907",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/docs/MANUAL.md?plain=1#L903-L907"
     }
    ]
   },
   {
    "mode": "reverb2",
    "gesture": "turn",
    "action": "Sets the mod depth.",
    "short_label": "MOD DEPTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "511",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L511"
     }
    ]
   },
   {
    "mode": "chorus",
    "gesture": "turn",
    "action": "Sets the rate.",
    "short_label": "RATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "512",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L512"
     }
    ]
   },
   {
    "mode": "master",
    "gesture": "turn",
    "action": "Sets the clip.",
    "short_label": "CLIP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "518",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L518"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "turn",
    "action": "Sets the root.",
    "short_label": "ROOT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "520",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L520"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1776-1793",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1776-L1793"
     }
    ]
   },
   {
    "mode": "scl2",
    "gesture": "turn",
    "action": "Every sequence moved up or down the scale (+-14 steps; 0 is off).",
    "short_label": "ALL TR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "521",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L521"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "191",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L191"
     }
    ]
   },
   {
    "mode": "edit1",
    "gesture": "turn",
    "action": "Engine value 1 (its name and meaning depend on the engine).",
    "short_label": "ENGINE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "523",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L523"
     }
    ]
   },
   {
    "mode": "edit2",
    "gesture": "turn",
    "action": "Engine value 5 (depends on the engine).",
    "short_label": "ENGINE 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "524",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L524"
     }
    ]
   },
   {
    "mode": "retrig",
    "gesture": "turn",
    "action": "On: the formula restarts on each note.",
    "short_label": "RETRIG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "525",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L525"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "212",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L212"
     }
    ]
   },
   {
    "mode": "morph",
    "gesture": "turn",
    "action": "Morphs the wave; on ANALOG PWM it sets width, on SYNC or RING the ratio, and on SAW3 the spread.",
    "short_label": "MORPH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "526",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L526"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_graph.c",
      "lines": "358-378",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_graph.c#L358-L378"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "428-432",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L428-L432"
     }
    ]
   },
   {
    "mode": "kit3",
    "gesture": "turn",
    "action": "A band-pass on the metal sounds: off or 15 centres.",
    "short_label": "BAND-PASS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_dx.c",
      "lines": "98-104",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_dx.c#L98-L104"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1013-1016",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1013-L1016"
     }
    ]
   },
   {
    "mode": "xmod",
    "gesture": "turn",
    "action": "Sets the xmod rate.",
    "short_label": "XMOD RATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_dx.c",
      "lines": "58-63",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_dx.c#L58-L63"
     },
     {
      "kind": "doc",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "docs/MANUAL.md",
      "lines": "439-440",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/docs/MANUAL.md?plain=1#L439-L440"
     }
    ]
   },
   {
    "mode": "operator",
    "gesture": "turn",
    "action": "Which of the six operators the other knobs edit.",
    "short_label": "OPERATOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_fm6op.c",
      "lines": "7-9",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_fm6op.c#L7-L9"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1127-1130",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1127-L1130"
     }
    ]
   },
   {
    "mode": "op_env",
    "gesture": "turn",
    "action": "Which of the six operators the other knobs edit.",
    "short_label": "OPERATOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_fm6op.c",
      "lines": "7-9",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_fm6op.c#L7-L9"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1127-1130",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1127-L1130"
     }
    ]
   },
   {
    "mode": "operator2",
    "gesture": "turn",
    "action": "Which of the six operators the other knobs edit.",
    "short_label": "OPERATOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_fm6op.c",
      "lines": "7-9",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_fm6op.c#L7-L9"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1127-1130",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1127-L1130"
     }
    ]
   },
   {
    "mode": "filter",
    "gesture": "turn",
    "action": "Sets the filter type.",
    "short_label": "FILTER TYPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "534",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L534"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "535",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L535"
     }
    ]
   },
   {
    "mode": "sound1",
    "gesture": "turn",
    "action": "Which of the 8 kit sounds the page edits (striking a key also picks it).",
    "short_label": "KIT SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_dx.c",
      "lines": "53-96",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_dx.c#L53-L96"
     }
    ]
   },
   {
    "mode": "sound2",
    "gesture": "turn",
    "action": "Which of the 8 kit sounds the page edits (striking a key also picks it).",
    "short_label": "KIT SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_dx.c",
      "lines": "53-96",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_dx.c#L53-L96"
     }
    ]
   },
   {
    "mode": "sound3",
    "gesture": "turn",
    "action": "Which of the 8 kit sounds the page edits (striking a key also picks it).",
    "short_label": "KIT SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_dx.c",
      "lines": "53-96",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_dx.c#L53-L96"
     }
    ]
   },
   {
    "mode": "sound4",
    "gesture": "turn",
    "action": "Which of the 8 kit sounds the page edits (striking a key also picks it).",
    "short_label": "KIT SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_dx.c",
      "lines": "53-96",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_dx.c#L53-L96"
     }
    ]
   },
   {
    "mode": "levels",
    "gesture": "turn",
    "action": "Sets the kick level.",
    "short_label": "KICK LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "541",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L541"
     }
    ]
   },
   {
    "mode": "levels2",
    "gesture": "turn",
    "action": "Sets the o.hat level.",
    "short_label": "O.HAT LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "542",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L542"
     }
    ]
   },
   {
    "mode": "stereo",
    "gesture": "turn",
    "action": "The kit's stereo placement, one step at a time.",
    "short_label": "IMAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "543",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L543"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "221",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L221"
     }
    ]
   },
   {
    "mode": "voice",
    "gesture": "turn",
    "action": "POLY, MONO, LEGATO or UNISON.",
    "short_label": "VOICE MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "549",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L549"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1135-1139",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1135-L1139"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "turn",
    "action": "Sets the arp mode.",
    "short_label": "ARP MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "558",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L558"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1135-1139",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1135-L1139"
     }
    ]
   },
   {
    "mode": "arp2",
    "gesture": "turn",
    "action": "Sets the arp swing.",
    "short_label": "ARP SWING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "559",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L559"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1135-1139",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1135-L1139"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "turn",
    "action": "Moves the step cursor.",
    "short_label": "CURSOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "807-847",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L807-L847"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "turn",
    "action": "Moves the step cursor.",
    "short_label": "CURSOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "568-578",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L568-L578"
     }
    ]
   },
   {
    "mode": "comp",
    "gesture": "turn",
    "action": "Moves the step cursor.",
    "short_label": "CURSOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "854-909",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L854-L909"
     }
    ]
   },
   {
    "mode": "pattern",
    "gesture": "turn",
    "action": "Sets the length.",
    "short_label": "LENGTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "567",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L567"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1135-1139",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1135-L1139"
     }
    ]
   },
   {
    "mode": "automation",
    "gesture": "turn",
    "action": "Whether the track's automation plays (right on, left off).",
    "short_label": "AUTO ON/OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1021-1026",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1021-L1026"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "1435-1455",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L1435-L1455"
     }
    ]
   },
   {
    "mode": "auto_list",
    "gesture": "turn",
    "action": "Picks the row.",
    "short_label": "ROW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_events.c",
      "lines": "6-12",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_events.c#L6-L12"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_events.c",
      "lines": "113-167",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_events.c#L113-L167"
     }
    ]
   },
   {
    "mode": "mutate",
    "gesture": "turn",
    "action": "How often the sound changes by itself (OFF, every 1-32 bars).",
    "short_label": "SOUND EVERY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "580",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L580"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "222-226",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L222-L226"
     }
    ]
   },
   {
    "mode": "fugue",
    "gesture": "turn",
    "action": "Which of the extra playheads (2-4) the other knobs edit.",
    "short_label": "HEAD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "988-996",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L988-L996"
     }
    ]
   },
   {
    "mode": "shift",
    "gesture": "turn",
    "action": "Transposes the sequence by up to 24 semitones either way; drum hits keep their lanes.",
    "short_label": "PITCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "572",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L572"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "124",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L124"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "1397-1400",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L1397-L1400"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "turn",
    "action": "Sets the level.",
    "short_label": "LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "480-504",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L480-L504"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1135-1139",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1135-L1139"
     }
    ]
   },
   {
    "mode": "global",
    "gesture": "turn",
    "action": "Sets the bpm.",
    "short_label": "BPM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "550",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L550"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1135-1139",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1135-L1139"
     }
    ]
   },
   {
    "mode": "system",
    "gesture": "turn",
    "action": "4 tracks (T5-T6 asleep) or all 6; saved as a device setting.",
    "short_label": "TRACKS 4/6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "551",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L551"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1140-1145",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1140-L1145"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1146-1151",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1146-L1151"
     }
    ]
   },
   {
    "mode": "presets",
    "gesture": "turn",
    "action": "Steps through the sounds; choosing a DRUM factory preset also replaces the section's shared kit.",
    "short_label": "SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1079-1092",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1079-L1092"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "1137-1146",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L1137-L1146"
     }
    ]
   },
   {
    "mode": "user",
    "gesture": "turn",
    "action": "Picks the user slot U01-U32.",
    "short_label": "SLOT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1109-1112",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1109-L1112"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "1435-1455",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L1435-L1455"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1099-1103",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1099-L1103"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "turn",
    "action": "Picks the project (stopped only); the music you have stays as it is until you load or store.",
    "short_label": "PROJECT 1-8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "555",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L555"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1104-1108",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1104-L1108"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1099-1103",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1099-L1103"
     }
    ]
   },
   {
    "mode": "arrange",
    "gesture": "turn",
    "action": "Picks the row (then + ADD and END).",
    "short_label": "ROW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1027-1064",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1027-L1064"
     }
    ]
   },
   {
    "mode": "tools",
    "gesture": "turn",
    "action": "Picks CLEAR SEQ, INIT SOUND, DELETE ROW, CLEAR SONG, NEW PROJECT or CPU TEST; OCT+ opens its question before doing it.",
    "short_label": "PICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1093-1097",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1093-L1097"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_graph.c",
      "lines": "1619-1640",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_graph.c#L1619-L1640"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1182-1183",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1182-L1183"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn",
    "action": "Edits the value in the same column of the page shown (the four cards). Fast turns sweep wide values (MENU > KNOB ACCEL).",
    "short_label": "VALUE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2289-2325",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2289-L2325"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "460-476",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L460-L476"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "turn_while_holding:key_f3",
    "action": "Only while you are step-entering a note on the roll (REC armed, transport stopped) with its keys held: gives that step its own value of this knob's parameter on the sound page you used last (a parameter lock). Otherwise the knob does its usual STEP-page job. Not while a song plays.",
    "short_label": "LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "618-639",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L618-L639"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2251-2260",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2251-L2260"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "turn_while_holding:key_f3",
    "action": "While you hold one or more white step keys on the drum grid: gives those steps their own value of this knob's parameter on the sound page you used last (a parameter lock). Not while a song plays. F3 stands for whichever step key you hold.",
    "short_label": "LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "618-639",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L618-L639"
     }
    ]
   },
   {
    "mode": "macro_latched",
    "gesture": "turn",
    "action": "Moves macro M1 (whatever page is shown).",
    "short_label": "MACRO M1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2295-2298",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2295-L2298"
     }
    ]
   },
   {
    "mode": "layer_macro",
    "gesture": "turn_while_holding:button_lfo",
    "action": "Moves macro M1; the map shows where it is routed.",
    "short_label": "MACRO M1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "598-631",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L598-L631"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "action": "Changes the value of the selected row (any of the four knobs).",
    "short_label": "MENU VALUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_menu.c",
      "lines": "458-499",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_menu.c#L458-L499"
     }
    ]
   },
   {
    "mode": "dialog",
    "gesture": "turn",
    "action": "Does nothing while a dialog is up.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2023-2026",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2023-L2026"
     }
    ]
   },
   {
    "mode": "dice_dialog",
    "gesture": "turn",
    "action": "Does nothing while the dice dialog is up (SELECT rolls again).",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2023-2026",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2023-L2026"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2131-2140",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2131-L2140"
     }
    ]
   },
   {
    "mode": "step_rec",
    "gesture": "turn_while_holding:key_f3",
    "action": "While the note or chord is held: how many steps it lasts (1-16, ties after it); with ARP pressed, the arpeggio's resolution (1/16, 1/8, dotted 1/8, 1/4).",
    "short_label": "LENGTH/RES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2299-2303",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2299-L2303"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1342-1350",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1342-L1350"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "turn_while_holding:button_fx",
    "action": "FILTER macro on the whole mix: one way low-pass, the other high-pass. Snaps back when FX is let go (kept with FX LATCH ON).",
    "short_label": "FILTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "16-17",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L16-L17"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "598-631",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L598-L631"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "186-220",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L186-L220"
     }
    ]
   },
   {
    "mode": "fx_locked",
    "gesture": "turn",
    "action": "FILTER macro on the whole mix: one way low-pass, the other high-pass.",
    "short_label": "FILTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1963-1967",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1963-L1967"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "598-631",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L598-L631"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "turn_while_holding:button_glo",
    "action": "Level of track 1 (track 3 when T5 or T6 is selected); recorded like the MIXER level.",
    "short_label": "T1/T3 LVL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "598-631",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L598-L631"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/icons.c",
      "lines": "20",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/icons.c#L20"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "turn_while_holding:button_sel",
    "action": "The root (shared by every melodic track).",
    "short_label": "ROOT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "69",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L69"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "598-631",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L598-L631"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "turn_while_holding:button_edit",
    "action": "EDIT 1 value 1 of the track's engine, wherever you are.",
    "short_label": "ENGINE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "598-631",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L598-L631"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "55-66",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L55-L66"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "turn_while_holding:button_seq",
    "action": "Pattern length (1-64 steps).",
    "short_label": "LENGTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "71",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L71"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "598-631",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L598-L631"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "turn_while_holding:button_rec",
    "action": "Metronome click: OFF, REC (only while recording) or ON.",
    "short_label": "CLICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "598-631",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L598-L631"
     }
    ]
   },
   {
    "mode": "layer_save",
    "gesture": "turn_while_holding:button_save",
    "action": "Picks another project (1-8); the switch happens as you release SAVE, only while stopped, and its section A replaces the music (no undo).",
    "short_label": "PROJECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "598-631",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L598-L631"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "186-220",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L186-L220"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/song_main.c",
      "lines": "303-355",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L303-L355"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "turn",
    "action": "Moves the text cursor.",
    "short_label": "CURSOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "19",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L19"
     }
    ]
   },
   {
    "mode": "dly3",
    "gesture": "turn",
    "action": "Chooses ANALOG or DIGITAL delay.",
    "short_label": "TYPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "508-509",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L508-L509"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "179-180",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L179-L180"
     }
    ]
   },
   {
    "mode": "punch",
    "gesture": "turn",
    "action": "Sets the punch-in lane length, 1–64 steps.",
    "short_label": "LEN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "519",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L519"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "181-182",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L181-L182"
     }
    ]
   },
   {
    "mode": "chord",
    "gesture": "turn",
    "action": "Chooses OFF, TRIAD, 7TH, ADD9, SUS2, SUS4, MAJ, MIN, 7, MAJ7, MIN7 or POWER; CHORD applies to keys on a polyphonic melodic track.",
    "short_label": "CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "522",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L522"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "227-231",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L227-L231"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-259",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L259"
     }
    ]
   },
   {
    "mode": "note",
    "gesture": "turn",
    "action": "Picks the whole chord or one note to edit; on DRUM it moves the step cursor instead.",
    "short_label": "FOCUS / STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "727-729",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L727-L729"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "811-815",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L811-L815"
     }
    ]
   },
   {
    "mode": "stretch",
    "gesture": "turn",
    "action": "Spreads or squeezes the pattern by factors 2–8 as turned; x1 restores the base, notes beyond step 64 are cut, and automation and locks move with the steps. While a song or quick chain is running or armed, leaves it unchanged and shows STOP TO EDIT.",
    "short_label": "STRETCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "930-958",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L930-L958"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_tools.c",
      "lines": "444-476",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_tools.c#L444-L476"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "473",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L473"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/song_main.c",
      "lines": "238-248",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L238-L248"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "930-938",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L930-L938"
     }
    ]
   },
   {
    "mode": "comp2",
    "gesture": "turn",
    "action": "Moves the step cursor.",
    "short_label": "STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "571",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L571"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "860",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L860"
     }
    ]
   },
   {
    "mode": "gen",
    "gesture": "turn",
    "action": "Page 1: chooses RANDOM or a genre; page 2: DRUMS amount; page 3: LEAD amount.",
    "short_label": "GENRE / PART",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/gen.c",
      "lines": "1408-1441",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/gen.c#L1408-L1441"
     }
    ]
   }
  ],
  "encoder_knob2": [
   {
    "mode": "home",
    "gesture": "turn",
    "action": "The selected track's main control 2: ANALOG resonance, FM6 ratio, PHASE envelope, LOFI duty, VOICE buzz, WHEEL percussion, NOISE peak, DRUM tune. Knob moves are recorded as automation while armed.",
    "short_label": "MAIN 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "1391-1396",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L1391-L1396"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2318-2320",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2318-L2320"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_analog.c",
      "lines": "292",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_analog.c#L292"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_fm6.c",
      "lines": "508",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_fm6.c#L508"
     },
     {
      "kind": "doc",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "docs/MANUAL.md",
      "lines": "369-379",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/docs/MANUAL.md?plain=1#L369-L379"
     }
    ]
   },
   {
    "mode": "env",
    "gesture": "turn",
    "action": "Sets the decay; on FM6 it changes the carrier envelopes.",
    "short_label": "DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "496",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L496"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_fm6.c",
      "lines": "339-347",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_fm6.c#L339-L347"
     }
    ]
   },
   {
    "mode": "env_dest",
    "gesture": "turn",
    "action": "Sets the env to pitch.",
    "short_label": "ENV>PITCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "497",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L497"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "68",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L68"
     }
    ]
   },
   {
    "mode": "lfo",
    "gesture": "turn",
    "action": "Sets the wave.",
    "short_label": "WAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "498",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L498"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "69-71",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L69-L71"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1135-1139",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1135-L1139"
     }
    ]
   },
   {
    "mode": "lfo_dest",
    "gesture": "turn",
    "action": "Sets the lfo to filter.",
    "short_label": "LFO>FILTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "499",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L499"
     }
    ]
   },
   {
    "mode": "mod",
    "gesture": "turn",
    "action": "Sets the source.",
    "short_label": "SOURCE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "500",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L500"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1131-1134",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1131-L1134"
     }
    ]
   },
   {
    "mode": "mseq",
    "gesture": "turn",
    "action": "The picked modulation step's level.",
    "short_label": "STEP LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "501",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L501"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1123-1126",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1123-L1126"
     }
    ]
   },
   {
    "mode": "mseq2",
    "gesture": "turn",
    "action": "Nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "502",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L502"
     }
    ]
   },
   {
    "mode": "fx",
    "gesture": "turn",
    "action": "Sets the chorus send.",
    "short_label": "CHORUS SEND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "503",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L503"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1135-1139",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1135-L1139"
     }
    ]
   },
   {
    "mode": "dist",
    "gesture": "turn",
    "action": "Sets the drive type.",
    "short_label": "DRIVE TYPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "504",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L504"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "130-131",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L130-L131"
     }
    ]
   },
   {
    "mode": "autopan",
    "gesture": "turn",
    "action": "Sets the pan rate.",
    "short_label": "PAN RATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "505",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L505"
     }
    ]
   },
   {
    "mode": "slicer",
    "gesture": "turn",
    "action": "Sets the pattern.",
    "short_label": "PATTERN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "514",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L514"
     }
    ]
   },
   {
    "mode": "sl_bus",
    "gesture": "turn",
    "action": "Sets the t2 in.",
    "short_label": "T2 IN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "515",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L515"
     }
    ]
   },
   {
    "mode": "sl_bus2",
    "gesture": "turn",
    "action": "Sets the t6 in.",
    "short_label": "T6 IN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "516",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L516"
     }
    ]
   },
   {
    "mode": "sl_pitch",
    "gesture": "turn",
    "action": "The picked slicer step's pitch (+-24 semitones).",
    "short_label": "STEP PITCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "517",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L517"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1119-1122",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1119-L1122"
     }
    ]
   },
   {
    "mode": "dly",
    "gesture": "turn",
    "action": "Sets delay feedback from 0 to 120%; ANALOG can build into self-oscillation above 100%.",
    "short_label": "FEEDBACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "150",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L150"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/fx.c",
      "lines": "424-427",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/fx.c#L424-L427"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "179",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L179"
     }
    ]
   },
   {
    "mode": "dly2",
    "gesture": "turn",
    "action": "Sets the grain pitch.",
    "short_label": "GRAIN PITCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "507",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L507"
     }
    ]
   },
   {
    "mode": "reverb",
    "gesture": "turn",
    "action": "Sets the size.",
    "short_label": "SIZE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "510",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L510"
     },
     {
      "kind": "doc",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "docs/MANUAL.md",
      "lines": "903-907",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/docs/MANUAL.md?plain=1#L903-L907"
     }
    ]
   },
   {
    "mode": "reverb2",
    "gesture": "turn",
    "action": "Sets the mod rate.",
    "short_label": "MOD RATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "511",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L511"
     }
    ]
   },
   {
    "mode": "chorus",
    "gesture": "turn",
    "action": "Sets the depth.",
    "short_label": "DEPTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "512",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L512"
     }
    ]
   },
   {
    "mode": "master",
    "gesture": "turn",
    "action": "Sets the punch.",
    "short_label": "PUNCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "518",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L518"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "turn",
    "action": "Sets the scale.",
    "short_label": "SCALE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "520",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L520"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1776-1793",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1776-L1793"
     }
    ]
   },
   {
    "mode": "scl2",
    "gesture": "turn",
    "action": "Nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "521",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L521"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "191",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L191"
     }
    ]
   },
   {
    "mode": "edit1",
    "gesture": "turn",
    "action": "Sets the engine 2.",
    "short_label": "ENGINE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "523",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L523"
     }
    ]
   },
   {
    "mode": "edit2",
    "gesture": "turn",
    "action": "Sets the engine 6.",
    "short_label": "ENGINE 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "524",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L524"
     }
    ]
   },
   {
    "mode": "retrig",
    "gesture": "turn",
    "action": "Nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "525",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L525"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "212",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L212"
     }
    ]
   },
   {
    "mode": "morph",
    "gesture": "turn",
    "action": "Nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "526",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L526"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "214",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L214"
     }
    ]
   },
   {
    "mode": "kit3",
    "gesture": "turn",
    "action": "Feedback (off or 1-15).",
    "short_label": "FEEDBACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_dx.c",
      "lines": "98-104",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_dx.c#L98-L104"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1013-1016",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1013-L1016"
     }
    ]
   },
   {
    "mode": "xmod",
    "gesture": "turn",
    "action": "Sets the xmod depth.",
    "short_label": "XMOD DEPTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_dx.c",
      "lines": "58-63",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_dx.c#L58-L63"
     },
     {
      "kind": "doc",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "docs/MANUAL.md",
      "lines": "439-440",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/docs/MANUAL.md?plain=1#L439-L440"
     }
    ]
   },
   {
    "mode": "operator",
    "gesture": "turn",
    "action": "The operator's frequency ratio, or its fixed frequency.",
    "short_label": "RATIO/FIXED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_fm6op.c",
      "lines": "7-9",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_fm6op.c#L7-L9"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1127-1130",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1127-L1130"
     }
    ]
   },
   {
    "mode": "op_env",
    "gesture": "turn",
    "action": "Which envelope stage KNOB 3 and 4 edit.",
    "short_label": "ENV STAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_fm6op.c",
      "lines": "7-9",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_fm6op.c#L7-L9"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1127-1130",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1127-L1130"
     }
    ]
   },
   {
    "mode": "operator2",
    "gesture": "turn",
    "action": "Sets the op mode.",
    "short_label": "OP MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_fm6op.c",
      "lines": "7-9",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_fm6op.c#L7-L9"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1127-1130",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1127-L1130"
     }
    ]
   },
   {
    "mode": "filter",
    "gesture": "turn",
    "action": "Sets the cutoff.",
    "short_label": "CUTOFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "534",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L534"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "535",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L535"
     }
    ]
   },
   {
    "mode": "sound1",
    "gesture": "turn",
    "action": "Which side, A or B, of the sound the next pages edit.",
    "short_label": "SIDE A/B",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_dx.c",
      "lines": "53-96",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_dx.c#L53-L96"
     }
    ]
   },
   {
    "mode": "sound2",
    "gesture": "turn",
    "action": "Sets the decay.",
    "short_label": "DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_dx.c",
      "lines": "53-96",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_dx.c#L53-L96"
     }
    ]
   },
   {
    "mode": "sound3",
    "gesture": "turn",
    "action": "The sound's wave and noise filter mode (24 combinations).",
    "short_label": "WAVE/FILTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_dx.c",
      "lines": "53-96",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_dx.c#L53-L96"
     }
    ]
   },
   {
    "mode": "sound4",
    "gesture": "turn",
    "action": "A second, detuned oscillator on the sound (off or 1-15).",
    "short_label": "LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_dx.c",
      "lines": "53-96",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_dx.c#L53-L96"
     }
    ]
   },
   {
    "mode": "levels",
    "gesture": "turn",
    "action": "Sets the snare level.",
    "short_label": "SNARE LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "541",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L541"
     }
    ]
   },
   {
    "mode": "levels2",
    "gesture": "turn",
    "action": "Sets the tom level.",
    "short_label": "TOM LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "542",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L542"
     }
    ]
   },
   {
    "mode": "stereo",
    "gesture": "turn",
    "action": "Nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "543",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L543"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "221",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L221"
     }
    ]
   },
   {
    "mode": "voice",
    "gesture": "turn",
    "action": "Sets the glide.",
    "short_label": "GLIDE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "549",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L549"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1135-1139",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1135-L1139"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "turn",
    "action": "Sets the arp rate.",
    "short_label": "ARP RATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "558",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L558"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1135-1139",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1135-L1139"
     }
    ]
   },
   {
    "mode": "arp2",
    "gesture": "turn",
    "action": "Sets the probability.",
    "short_label": "PROBABILITY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "559",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L559"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1135-1139",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1135-L1139"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "turn",
    "action": "Transposes the cursor step (an empty step gets the last note played).",
    "short_label": "NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "807-847",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L807-L847"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "turn",
    "action": "The drum lane (kick to bell).",
    "short_label": "DRUM LANE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "568-578",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L568-L578"
     }
    ]
   },
   {
    "mode": "comp",
    "gesture": "turn",
    "action": "Picks the first component: OFF, CHANCE, RATCH, arpeggios, TRIG, RAND, OCT, TONAL, BEND, ECHO, PULSE, JUMP, REV, FILL, KILL, WALK or CLIMB.",
    "short_label": "COMP TYPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "558-559",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L558-L559"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "870-884",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L870-L884"
     }
    ]
   },
   {
    "mode": "pattern",
    "gesture": "turn",
    "action": "Sets the division.",
    "short_label": "DIVISION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "567",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L567"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1135-1139",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1135-L1139"
     }
    ]
   },
   {
    "mode": "automation",
    "gesture": "turn",
    "action": "Shows how many automation events the track has; turning does nothing.",
    "short_label": "EVENT COUNT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1021-1026",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1021-L1026"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "1435-1455",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L1435-L1455"
     }
    ]
   },
   {
    "mode": "auto_list",
    "gesture": "turn",
    "action": "Moves the record to another step where its parameter is free.",
    "short_label": "STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_events.c",
      "lines": "6-12",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_events.c#L6-L12"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_events.c",
      "lines": "113-167",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_events.c#L113-L167"
     }
    ]
   },
   {
    "mode": "mutate",
    "gesture": "turn",
    "action": "How often the pattern changes by itself (OFF, every 1-32 bars).",
    "short_label": "PATTERN EVRY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "580",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L580"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "222-226",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L222-L226"
     }
    ]
   },
   {
    "mode": "fugue",
    "gesture": "turn",
    "action": "That playhead's speed relative to the track (OFF, 1/4 to x4).",
    "short_label": "HEAD RATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "988-996",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L988-L996"
     }
    ]
   },
   {
    "mode": "shift",
    "gesture": "turn",
    "action": "Sets the whole track's chance of playing each step.",
    "short_label": "CHANCE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "572",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L572"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "978-981",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L978-L981"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "turn",
    "action": "Sets the pan.",
    "short_label": "PAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "480-504",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L480-L504"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1135-1139",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1135-L1139"
     }
    ]
   },
   {
    "mode": "global",
    "gesture": "turn",
    "action": "Sets the swing.",
    "short_label": "SWING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "550",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L550"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1135-1139",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1135-L1139"
     }
    ]
   },
   {
    "mode": "system",
    "gesture": "turn",
    "action": "How heavy the sound may get: FULL, LITE or ECO.",
    "short_label": "LOAD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "551",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L551"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1140-1145",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1140-L1145"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1146-1151",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1146-L1151"
     }
    ]
   },
   {
    "mode": "presets",
    "gesture": "turn",
    "action": "Jumps to the next or previous engine's sounds.",
    "short_label": "ENGINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1079-1092",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1079-L1092"
     }
    ]
   },
   {
    "mode": "user",
    "gesture": "turn",
    "action": "Picks LOAD (OCT+ does it).",
    "short_label": "LOAD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1109-1112",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1109-L1112"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "1435-1455",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L1435-L1455"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1099-1103",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1099-L1103"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "turn",
    "action": "Picks the section.",
    "short_label": "SECTION A-D",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "555",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L555"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1104-1108",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1104-L1108"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1099-1103",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1099-L1103"
     }
    ]
   },
   {
    "mode": "arrange",
    "gesture": "turn",
    "action": "The row's section A-D; turned left past A it asks DELETE ROW?; on + ADD it adds a row; on END it sets STOP, x2-x8 or LOOP.",
    "short_label": "SECTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1027-1064",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1027-L1064"
     }
    ]
   },
   {
    "mode": "tools",
    "gesture": "turn",
    "action": "Picks CLEAR SEQ, INIT SOUND, DELETE ROW, CLEAR SONG, NEW PROJECT or CPU TEST; OCT+ opens its question before doing it.",
    "short_label": "PICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1093-1097",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1093-L1097"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_graph.c",
      "lines": "1619-1640",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_graph.c#L1619-L1640"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1182-1183",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1182-L1183"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn",
    "action": "Edits the value in the same column of the page shown (the four cards). Fast turns sweep wide values (MENU > KNOB ACCEL).",
    "short_label": "VALUE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2289-2325",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2289-L2325"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "460-476",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L460-L476"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "turn_while_holding:key_f3",
    "action": "Only while you are step-entering a note on the roll (REC armed, transport stopped) with its keys held: gives that step its own value of this knob's parameter on the sound page you used last (a parameter lock). Otherwise the knob does its usual STEP-page job. Not while a song plays.",
    "short_label": "LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "618-639",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L618-L639"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2251-2260",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2251-L2260"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "turn_while_holding:key_f3",
    "action": "While you hold one or more white step keys on the drum grid: gives those steps their own value of this knob's parameter on the sound page you used last (a parameter lock). Not while a song plays. F3 stands for whichever step key you hold.",
    "short_label": "LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "618-639",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L618-L639"
     }
    ]
   },
   {
    "mode": "macro_latched",
    "gesture": "turn",
    "action": "Moves macro M2 (whatever page is shown).",
    "short_label": "MACRO M2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2295-2298",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2295-L2298"
     }
    ]
   },
   {
    "mode": "layer_macro",
    "gesture": "turn_while_holding:button_lfo",
    "action": "Moves macro M2; the map shows where it is routed.",
    "short_label": "MACRO M2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "598-631",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L598-L631"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "action": "Changes the value of the selected row (any of the four knobs).",
    "short_label": "MENU VALUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_menu.c",
      "lines": "458-499",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_menu.c#L458-L499"
     }
    ]
   },
   {
    "mode": "dialog",
    "gesture": "turn",
    "action": "Does nothing while a dialog is up.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2023-2026",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2023-L2026"
     }
    ]
   },
   {
    "mode": "dice_dialog",
    "gesture": "turn",
    "action": "Does nothing while the dice dialog is up (SELECT rolls again).",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2023-2026",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2023-L2026"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2131-2140",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2131-L2140"
     }
    ]
   },
   {
    "mode": "step_rec",
    "gesture": "turn_while_holding:key_f3",
    "action": "With ARP pressed while holding: the arpeggio order (UP, DOWN, UP-DN, RND). Without ARP: a parameter lock.",
    "short_label": "ARP ORDER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2299-2303",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2299-L2303"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1342-1350",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1342-L1350"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "turn_while_holding:button_fx",
    "action": "CRUSH macro on the whole mix. Snaps back when FX is let go (kept with FX LATCH ON).",
    "short_label": "CRUSH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "16-17",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L16-L17"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "598-631",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L598-L631"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "186-220",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L186-L220"
     }
    ]
   },
   {
    "mode": "fx_locked",
    "gesture": "turn",
    "action": "CRUSH macro on the whole mix.",
    "short_label": "CRUSH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1963-1967",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1963-L1967"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "598-631",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L598-L631"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "turn_while_holding:button_glo",
    "action": "Level of track 2 (track 4 when T5 or T6 is selected); recorded like the MIXER level.",
    "short_label": "T2/T4 LVL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "598-631",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L598-L631"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/icons.c",
      "lines": "20",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/icons.c#L20"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "turn_while_holding:button_sel",
    "action": "The scale (shared by every melodic track).",
    "short_label": "SCALE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "69",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L69"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "598-631",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L598-L631"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "turn_while_holding:button_edit",
    "action": "EDIT 1 value 2 of the track's engine, wherever you are.",
    "short_label": "ENGINE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "598-631",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L598-L631"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "55-66",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L55-L66"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "turn_while_holding:button_seq",
    "action": "Step division.",
    "short_label": "DIVISION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "71",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L71"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "598-631",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L598-L631"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "turn_while_holding:button_rec",
    "action": "Nothing in the REC layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "598-631",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L598-L631"
     }
    ]
   },
   {
    "mode": "layer_save",
    "gesture": "turn_while_holding:button_save",
    "action": "Nothing in the SAVE layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "598-631",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L598-L631"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "turn",
    "action": "Changes the character at the cursor.",
    "short_label": "CHARACTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "19",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L19"
     }
    ]
   },
   {
    "mode": "dly3",
    "gesture": "turn",
    "action": "Switches delay ping-pong on or off; it is bypassed while grain delay is active.",
    "short_label": "PING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "508-509",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L508-L509"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "179-180",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L179-L180"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/fx.c",
      "lines": "1033-1037",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/fx.c#L1033-L1037"
     }
    ]
   },
   {
    "mode": "punch",
    "gesture": "turn",
    "action": "Chooses the punch-in lane step size: 1/8, 1/16 or 1/32.",
    "short_label": "RES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "519",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L519"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "18-21",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L18-L21"
     }
    ]
   },
   {
    "mode": "chord",
    "gesture": "turn",
    "action": "Chooses CLOSE, LEAD, OPEN or +BASS voicing.",
    "short_label": "VOICING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "522",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L522"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "227-231",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L227-L231"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "262-275",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L262-L275"
     }
    ]
   },
   {
    "mode": "note",
    "gesture": "turn",
    "action": "Transposes the focused note or whole chord; does nothing on DRUM.",
    "short_label": "PITCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "730-736",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L730-L736"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "811-815",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L811-L815"
     }
    ]
   },
   {
    "mode": "stretch",
    "gesture": "turn",
    "action": "Sets 2–8 copies in total, or as many full copies as fit within 64 steps; x2 adds one copy to the original. OFF restores the base; automation and locks follow. A running or armed song or quick chain blocks the edit with STOP TO EDIT.",
    "short_label": "REPEAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "930-958",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L930-L958"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_tools.c",
      "lines": "477-500",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_tools.c#L477-L500"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_tools.c",
      "lines": "476-485",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_tools.c#L476-L485"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "473",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L473"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/song_main.c",
      "lines": "238-248",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L238-L248"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "930-938",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L930-L938"
     }
    ]
   },
   {
    "mode": "comp2",
    "gesture": "turn",
    "action": "Picks the step's second component; CHANCE and RATCH are only on COMP. While a song or quick chain is running or armed, leaves it unchanged and shows STOP TO EDIT.",
    "short_label": "TYPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "571",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L571"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "870-884",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L870-L884"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "473",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L473"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/song_main.c",
      "lines": "238-248",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L238-L248"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "854-861",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L854-L861"
     }
    ]
   },
   {
    "mode": "gen",
    "gesture": "turn",
    "action": "Page 1: seed 0000–9999; page 2: BASS amount; page 3: complexity.",
    "short_label": "SEED / PART",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/gen.c",
      "lines": "1408-1441",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/gen.c#L1408-L1441"
     }
    ]
   }
  ],
  "encoder_knob3": [
   {
    "mode": "home",
    "gesture": "turn",
    "action": "The selected track's main control 3: ANALOG attack, FM6 MEG, PHASE detune, LOFI crush, VOICE breath, WHEEL drive, NOISE colour, DRUM tone. Knob moves are recorded as automation while armed.",
    "short_label": "MAIN 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "1391-1396",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L1391-L1396"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2318-2320",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2318-L2320"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_analog.c",
      "lines": "292",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_analog.c#L292"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_fm6.c",
      "lines": "508",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_fm6.c#L508"
     },
     {
      "kind": "doc",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "docs/MANUAL.md",
      "lines": "369-379",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/docs/MANUAL.md?plain=1#L369-L379"
     }
    ]
   },
   {
    "mode": "env",
    "gesture": "turn",
    "action": "Sets the sustain; on FM6 it changes the carrier envelopes.",
    "short_label": "SUSTAIN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "496",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L496"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_fm6.c",
      "lines": "339-347",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_fm6.c#L339-L347"
     }
    ]
   },
   {
    "mode": "env_dest",
    "gesture": "turn",
    "action": "Sets the env to shape.",
    "short_label": "ENV>SHAPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "497",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L497"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "68",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L68"
     }
    ]
   },
   {
    "mode": "lfo",
    "gesture": "turn",
    "action": "Where each new phrase restarts the LFO; left past 0 is FREE (never restarted).",
    "short_label": "PHASE/FREE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "498",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L498"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "69-71",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L69-L71"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1135-1139",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1135-L1139"
     }
    ]
   },
   {
    "mode": "lfo_dest",
    "gesture": "turn",
    "action": "Sets the lfo to shape.",
    "short_label": "LFO>SHAPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "499",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L499"
     }
    ]
   },
   {
    "mode": "mod",
    "gesture": "turn",
    "action": "Picks the modulation destination, including delay time, feedback, tone and mix, reverb size and damping, and chorus rate and depth.",
    "short_label": "DESTINATION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "46-52",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L46-L52"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "500",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L500"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "623-630",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L623-L630"
     }
    ]
   },
   {
    "mode": "mseq",
    "gesture": "turn",
    "action": "The modulation sequence's length.",
    "short_label": "MSEQ LENGTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "501",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L501"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1123-1126",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1123-L1126"
     }
    ]
   },
   {
    "mode": "mseq2",
    "gesture": "turn",
    "action": "Nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "502",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L502"
     }
    ]
   },
   {
    "mode": "fx",
    "gesture": "turn",
    "action": "Sets the delay send.",
    "short_label": "DELAY SEND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "503",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L503"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1135-1139",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1135-L1139"
     }
    ]
   },
   {
    "mode": "dist",
    "gesture": "turn",
    "action": "Sets the drive tone.",
    "short_label": "DRIVE TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "504",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L504"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "130-131",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L130-L131"
     }
    ]
   },
   {
    "mode": "autopan",
    "gesture": "turn",
    "action": "Sets the pan sync.",
    "short_label": "PAN SYNC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "505",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L505"
     }
    ]
   },
   {
    "mode": "slicer",
    "gesture": "turn",
    "action": "Sets the rate.",
    "short_label": "RATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "514",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L514"
     }
    ]
   },
   {
    "mode": "sl_bus",
    "gesture": "turn",
    "action": "Sets the t3 in.",
    "short_label": "T3 IN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "515",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L515"
     }
    ]
   },
   {
    "mode": "sl_bus2",
    "gesture": "turn",
    "action": "Sets the fx in.",
    "short_label": "FX IN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "516",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L516"
     }
    ]
   },
   {
    "mode": "sl_pitch",
    "gesture": "turn",
    "action": "Sets the length.",
    "short_label": "LENGTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "517",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L517"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1119-1122",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1119-L1122"
     }
    ]
   },
   {
    "mode": "dly",
    "gesture": "turn",
    "action": "Sets the tone.",
    "short_label": "TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "506",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L506"
     }
    ]
   },
   {
    "mode": "dly2",
    "gesture": "turn",
    "action": "Sets the grain spray.",
    "short_label": "GRAIN SPRAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "507",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L507"
     }
    ]
   },
   {
    "mode": "reverb",
    "gesture": "turn",
    "action": "Damping; on RESO, which track's lowest note the chord follows.",
    "short_label": "DAMP/FOLLOW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "510",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L510"
     },
     {
      "kind": "doc",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "docs/MANUAL.md",
      "lines": "903-907",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/docs/MANUAL.md?plain=1#L903-L907"
     }
    ]
   },
   {
    "mode": "reverb2",
    "gesture": "turn",
    "action": "Sets the input tone.",
    "short_label": "INPUT TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "511",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L511"
     }
    ]
   },
   {
    "mode": "chorus",
    "gesture": "turn",
    "action": "Sets the stereo.",
    "short_label": "STEREO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "512",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L512"
     }
    ]
   },
   {
    "mode": "master",
    "gesture": "turn",
    "action": "Sets the duck.",
    "short_label": "DUCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "518",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L518"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "turn",
    "action": "How the keys follow the scale: OFF, SNAP, WHITE (white keys walk the scale, black keys silent), SEQ.",
    "short_label": "KEY MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "520",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L520"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1776-1793",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1776-L1793"
     }
    ]
   },
   {
    "mode": "scl2",
    "gesture": "turn",
    "action": "Nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "521",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L521"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "191",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L191"
     }
    ]
   },
   {
    "mode": "edit1",
    "gesture": "turn",
    "action": "Sets the engine 3.",
    "short_label": "ENGINE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "523",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L523"
     }
    ]
   },
   {
    "mode": "edit2",
    "gesture": "turn",
    "action": "Sets the engine 7.",
    "short_label": "ENGINE 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "524",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L524"
     }
    ]
   },
   {
    "mode": "retrig",
    "gesture": "turn",
    "action": "Nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "525",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L525"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "212",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L212"
     }
    ]
   },
   {
    "mode": "morph",
    "gesture": "turn",
    "action": "Nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "526",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L526"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "214",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L214"
     }
    ]
   },
   {
    "mode": "kit3",
    "gesture": "turn",
    "action": "Nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_dx.c",
      "lines": "98-104",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_dx.c#L98-L104"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1013-1016",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1013-L1016"
     }
    ]
   },
   {
    "mode": "xmod",
    "gesture": "turn",
    "action": "Sets the xmod shape.",
    "short_label": "XMOD SHAPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_dx.c",
      "lines": "58-63",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_dx.c#L58-L63"
     },
     {
      "kind": "doc",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "docs/MANUAL.md",
      "lines": "439-440",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/docs/MANUAL.md?plain=1#L439-L440"
     }
    ]
   },
   {
    "mode": "operator",
    "gesture": "turn",
    "action": "Sets the fine.",
    "short_label": "FINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_fm6op.c",
      "lines": "7-9",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_fm6op.c#L7-L9"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1127-1130",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1127-L1130"
     }
    ]
   },
   {
    "mode": "op_env",
    "gesture": "turn",
    "action": "Sets the stage rate.",
    "short_label": "STAGE RATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_fm6op.c",
      "lines": "7-9",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_fm6op.c#L7-L9"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1127-1130",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1127-L1130"
     }
    ]
   },
   {
    "mode": "operator2",
    "gesture": "turn",
    "action": "Sets the detune.",
    "short_label": "DETUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_fm6op.c",
      "lines": "7-9",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_fm6op.c#L7-L9"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1127-1130",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1127-L1130"
     }
    ]
   },
   {
    "mode": "filter",
    "gesture": "turn",
    "action": "Sets the resonance.",
    "short_label": "RESONANCE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "534",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L534"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "535",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L535"
     }
    ]
   },
   {
    "mode": "sound1",
    "gesture": "turn",
    "action": "Transposes the sequence +-24 semitones.",
    "short_label": "PITCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_dx.c",
      "lines": "53-96",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_dx.c#L53-L96"
     }
    ]
   },
   {
    "mode": "sound2",
    "gesture": "turn",
    "action": "Sets the noise.",
    "short_label": "NOISE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_dx.c",
      "lines": "53-96",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_dx.c#L53-L96"
     }
    ]
   },
   {
    "mode": "sound3",
    "gesture": "turn",
    "action": "The type of pitch movement (DECAY, LONG, NOISE, SINE).",
    "short_label": "DROP TYPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_dx.c",
      "lines": "53-96",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_dx.c#L53-L96"
     }
    ]
   },
   {
    "mode": "sound4",
    "gesture": "turn",
    "action": "Feedback (off or 1-15).",
    "short_label": "FEEDBACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_dx.c",
      "lines": "53-96",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_dx.c#L53-L96"
     }
    ]
   },
   {
    "mode": "levels",
    "gesture": "turn",
    "action": "Sets the clap level.",
    "short_label": "CLAP LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "541",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L541"
     }
    ]
   },
   {
    "mode": "levels2",
    "gesture": "turn",
    "action": "Sets the rim level.",
    "short_label": "RIM LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "542",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L542"
     }
    ]
   },
   {
    "mode": "stereo",
    "gesture": "turn",
    "action": "Nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "543",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L543"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "221",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L221"
     }
    ]
   },
   {
    "mode": "voice",
    "gesture": "turn",
    "action": "Sets the glide mode.",
    "short_label": "GLIDE MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "549",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L549"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1135-1139",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1135-L1139"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "turn",
    "action": "Sets the arp octaves.",
    "short_label": "ARP OCTAVES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "558",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L558"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1135-1139",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1135-L1139"
     }
    ]
   },
   {
    "mode": "arp2",
    "gesture": "turn",
    "action": "Key latch on/off (with MODE OFF the notes keep sounding after you let go).",
    "short_label": "HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "559",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L559"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1135-1139",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1135-L1139"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "turn",
    "action": "NOTE, TIE or REST.",
    "short_label": "NOTE/TIE/RST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "807-847",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L807-L847"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "turn",
    "action": "The selected lane's hit at the cursor (right on, left off).",
    "short_label": "HIT ON/OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "568-578",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L568-L578"
     }
    ]
   },
   {
    "mode": "comp",
    "gesture": "turn",
    "action": "Changes the first component's value; for an arp it steps through order and range, and for WALK or CLIMB through direction and range.",
    "short_label": "VALUE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "888-903",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L888-L903"
     }
    ]
   },
   {
    "mode": "pattern",
    "gesture": "turn",
    "action": "Sets the swing.",
    "short_label": "SWING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "567",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L567"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1135-1139",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1135-L1139"
     }
    ]
   },
   {
    "mode": "automation",
    "gesture": "turn",
    "action": "Shows how many step locks the track has; turning does nothing.",
    "short_label": "LOCK COUNT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1021-1026",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1021-L1026"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "1435-1455",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L1435-L1455"
     }
    ]
   },
   {
    "mode": "auto_list",
    "gesture": "turn",
    "action": "The record's parameter.",
    "short_label": "PARAMETER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_events.c",
      "lines": "6-12",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_events.c#L6-L12"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_events.c",
      "lines": "113-167",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_events.c#L113-L167"
     }
    ]
   },
   {
    "mode": "mutate",
    "gesture": "turn",
    "action": "Sets the amount.",
    "short_label": "AMOUNT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "580",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L580"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "222-226",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L222-L226"
     }
    ]
   },
   {
    "mode": "fugue",
    "gesture": "turn",
    "action": "That playhead's direction (forward, reverse, ping-pong, random).",
    "short_label": "DIRECTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "988-996",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L988-L996"
     }
    ]
   },
   {
    "mode": "shift",
    "gesture": "turn",
    "action": "Sets HUMAN: random variation in velocity, delayed starts, gate length, decay and release; the written steps stay put.",
    "short_label": "HUMAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "572",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L572"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "1555-1577",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L1555-L1577"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "turn",
    "action": "Sets the reverb send.",
    "short_label": "REVERB SEND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "480-504",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L480-L504"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1135-1139",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1135-L1139"
     }
    ]
   },
   {
    "mode": "global",
    "gesture": "turn",
    "action": "The clock: INT, USB or TRS.",
    "short_label": "CLOCK SRC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "550",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L550"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1135-1139",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1135-L1139"
     }
    ]
   },
   {
    "mode": "system",
    "gesture": "turn",
    "action": "MIDI IN routing: channels 1-6 to tracks 1-6, or every channel to the selected track.",
    "short_label": "MIDI ROUTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "551",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L551"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1140-1145",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1140-L1145"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1146-1151",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1146-L1151"
     }
    ]
   },
   {
    "mode": "presets",
    "gesture": "turn",
    "action": "Marks or unmarks the sound as a favourite.",
    "short_label": "FAVOURITE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1079-1092",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1079-L1092"
     }
    ]
   },
   {
    "mode": "user",
    "gesture": "turn",
    "action": "Picks ERASE (OCT+ asks first).",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1109-1112",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1109-L1112"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "1435-1455",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L1435-L1455"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1099-1103",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1099-L1103"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "turn",
    "action": "Picks LOAD of the section (OCT+ loads it, stopping playback; GLO + G4 undoes).",
    "short_label": "LOAD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "555",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L555"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1104-1108",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1104-L1108"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1099-1103",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1099-L1103"
     }
    ]
   },
   {
    "mode": "arrange",
    "gesture": "turn",
    "action": "The row's length in bars (1-64); on + ADD it adds a row.",
    "short_label": "BARS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1027-1064",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1027-L1064"
     }
    ]
   },
   {
    "mode": "tools",
    "gesture": "turn",
    "action": "Picks CLEAR SEQ, INIT SOUND, DELETE ROW, CLEAR SONG, NEW PROJECT or CPU TEST; OCT+ opens its question before doing it.",
    "short_label": "PICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1093-1097",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1093-L1097"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_graph.c",
      "lines": "1619-1640",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_graph.c#L1619-L1640"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1182-1183",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1182-L1183"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn",
    "action": "Edits the value in the same column of the page shown (the four cards). Fast turns sweep wide values (MENU > KNOB ACCEL).",
    "short_label": "VALUE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2289-2325",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2289-L2325"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "460-476",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L460-L476"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "turn_while_holding:key_f3",
    "action": "Only while you are step-entering a note on the roll (REC armed, transport stopped) with its keys held: gives that step its own value of this knob's parameter on the sound page you used last (a parameter lock). Otherwise the knob does its usual STEP-page job. Not while a song plays.",
    "short_label": "LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "618-639",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L618-L639"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2251-2260",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2251-L2260"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "turn_while_holding:key_f3",
    "action": "While you hold one or more white step keys on the drum grid: gives those steps their own value of this knob's parameter on the sound page you used last (a parameter lock). Not while a song plays. F3 stands for whichever step key you hold.",
    "short_label": "LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "618-639",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L618-L639"
     }
    ]
   },
   {
    "mode": "macro_latched",
    "gesture": "turn",
    "action": "Moves macro M3 (whatever page is shown).",
    "short_label": "MACRO M3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2295-2298",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2295-L2298"
     }
    ]
   },
   {
    "mode": "layer_macro",
    "gesture": "turn_while_holding:button_lfo",
    "action": "Moves macro M3; the map shows where it is routed.",
    "short_label": "MACRO M3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "598-631",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L598-L631"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "action": "Changes the value of the selected row (any of the four knobs).",
    "short_label": "MENU VALUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_menu.c",
      "lines": "458-499",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_menu.c#L458-L499"
     }
    ]
   },
   {
    "mode": "dialog",
    "gesture": "turn",
    "action": "Does nothing while a dialog is up.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2023-2026",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2023-L2026"
     }
    ]
   },
   {
    "mode": "dice_dialog",
    "gesture": "turn",
    "action": "Does nothing while the dice dialog is up (SELECT rolls again).",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2023-2026",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2023-L2026"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2131-2140",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2131-L2140"
     }
    ]
   },
   {
    "mode": "step_rec",
    "gesture": "turn_while_holding:key_f3",
    "action": "With ARP pressed while holding: the arpeggio's octaves (1-3). Without ARP: a parameter lock.",
    "short_label": "ARP OCTAVES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2299-2303",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2299-L2303"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1342-1350",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1342-L1350"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "turn_while_holding:button_fx",
    "action": "THROW macro: feeds the dry signal to the delay and the reverb. Snaps back when FX is let go (kept with FX LATCH ON).",
    "short_label": "THROW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "16-17",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L16-L17"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "598-631",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L598-L631"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "186-220",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L186-L220"
     }
    ]
   },
   {
    "mode": "fx_locked",
    "gesture": "turn",
    "action": "THROW macro: feeds the dry signal to the delay and the reverb.",
    "short_label": "THROW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1963-1967",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1963-L1967"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "598-631",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L598-L631"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "turn_while_holding:button_glo",
    "action": "Level of track 3 (track 5 when T5 or T6 is selected); recorded like the MIXER level.",
    "short_label": "T3/T5 LVL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "598-631",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L598-L631"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/icons.c",
      "lines": "20",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/icons.c#L20"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "turn_while_holding:button_sel",
    "action": "Rotates the track's sequence playback, as STRETCH > ROTATE.",
    "short_label": "ROTATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "69",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L69"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "621-629",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L621-L629"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "123",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L123"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "turn_while_holding:button_edit",
    "action": "EDIT 1 value 3 of the track's engine, wherever you are.",
    "short_label": "ENGINE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "598-631",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L598-L631"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "55-66",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L55-L66"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "turn_while_holding:button_seq",
    "action": "Swing.",
    "short_label": "SWING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "71",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L71"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "598-631",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L598-L631"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "turn_while_holding:button_rec",
    "action": "Nothing in the REC layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "598-631",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L598-L631"
     }
    ]
   },
   {
    "mode": "layer_save",
    "gesture": "turn_while_holding:button_save",
    "action": "Nothing in the SAVE layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "598-631",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L598-L631"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "turn",
    "action": "Nothing on the NAME screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "240-274",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L240-L274"
     }
    ]
   },
   {
    "mode": "dly3",
    "gesture": "turn",
    "action": "Nothing on this page.",
    "short_label": "UNUSED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "508-509",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L508-L509"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "179-180",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L179-L180"
     }
    ]
   },
   {
    "mode": "punch",
    "gesture": "turn",
    "action": "Shows recording, playback or the count of filled steps; turning does nothing.",
    "short_label": "STATUS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "519",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L519"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_draw.c",
      "lines": "1017-1028",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_draw.c#L1017-L1028"
     }
    ]
   },
   {
    "mode": "chord",
    "gesture": "turn",
    "action": "Spreads chord notes from low to high, from together to about 63 ms between notes; recorded chords are strummed on playback too.",
    "short_label": "STRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "522",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L522"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "227-231",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L227-L231"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "288",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L288"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "1571-1597",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L1571-L1597"
     }
    ]
   },
   {
    "mode": "note",
    "gesture": "turn",
    "action": "Moves the focused note or whole chord one step left or right when space permits; does nothing on DRUM.",
    "short_label": "MOVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "737-775",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L737-L775"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "811-815",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L811-L815"
     }
    ]
   },
   {
    "mode": "stretch",
    "gesture": "turn",
    "action": "Shifts all written steps one position left or right within the pattern length; blocked during song playback.",
    "short_label": "NUDGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "961-968",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L961-L968"
     }
    ]
   },
   {
    "mode": "comp2",
    "gesture": "turn",
    "action": "Changes its value, an arp's order and range, or WALK/CLIMB direction and range. While a song or quick chain is running or armed, leaves it unchanged and shows STOP TO EDIT.",
    "short_label": "VALUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "571",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L571"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "892-903",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L892-L903"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "473",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L473"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/song_main.c",
      "lines": "238-248",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L238-L248"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "854-861",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L854-L861"
     }
    ]
   },
   {
    "mode": "gen",
    "gesture": "turn",
    "action": "Page 1: energy; page 2: CHORDS amount; page 3: swing, including AUTO.",
    "short_label": "ENERGY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/gen.c",
      "lines": "1408-1441",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/gen.c#L1408-L1441"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/gen.c",
      "lines": "1408-1409",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/gen.c#L1408-L1409"
     }
    ]
   }
  ],
  "encoder_knob4": [
   {
    "mode": "home",
    "gesture": "turn",
    "action": "The selected track's main control 4: release on ANALOG, PHASE, LOFI and NOISE; FM6 slot, VOICE talk, WHEEL rotor, DRUM decay. Knob moves are recorded as automation while armed.",
    "short_label": "MAIN 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "1391-1396",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L1391-L1396"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2318-2320",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2318-L2320"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_analog.c",
      "lines": "292",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_analog.c#L292"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_fm6.c",
      "lines": "508",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_fm6.c#L508"
     },
     {
      "kind": "doc",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "docs/MANUAL.md",
      "lines": "369-379",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/docs/MANUAL.md?plain=1#L369-L379"
     }
    ]
   },
   {
    "mode": "env",
    "gesture": "turn",
    "action": "Sets the release; on FM6 it changes the carrier envelopes.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "496",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L496"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_fm6.c",
      "lines": "339-347",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_fm6.c#L339-L347"
     }
    ]
   },
   {
    "mode": "env_dest",
    "gesture": "turn",
    "action": "Sets the env loop.",
    "short_label": "ENV LOOP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "497",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L497"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "68",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L68"
     }
    ]
   },
   {
    "mode": "lfo",
    "gesture": "turn",
    "action": "Sets the fade.",
    "short_label": "FADE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "498",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L498"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "69-71",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L69-L71"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1135-1139",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1135-L1139"
     }
    ]
   },
   {
    "mode": "lfo_dest",
    "gesture": "turn",
    "action": "Sets the lfo to amp.",
    "short_label": "LFO>AMP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "499",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L499"
     }
    ]
   },
   {
    "mode": "mod",
    "gesture": "turn",
    "action": "Sets the amount.",
    "short_label": "AMOUNT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "500",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L500"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1131-1134",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1131-L1134"
     }
    ]
   },
   {
    "mode": "mseq",
    "gesture": "turn",
    "action": "Sets the slew.",
    "short_label": "SLEW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "501",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L501"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1123-1126",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1123-L1126"
     }
    ]
   },
   {
    "mode": "mseq2",
    "gesture": "turn",
    "action": "Nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "502",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L502"
     }
    ]
   },
   {
    "mode": "fx",
    "gesture": "turn",
    "action": "Sets the reverb send.",
    "short_label": "REVERB SEND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "503",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L503"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1135-1139",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1135-L1139"
     }
    ]
   },
   {
    "mode": "dist",
    "gesture": "turn",
    "action": "Nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "504",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L504"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "130-131",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L130-L131"
     }
    ]
   },
   {
    "mode": "autopan",
    "gesture": "turn",
    "action": "Sets the pan wave.",
    "short_label": "PAN WAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "505",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L505"
     }
    ]
   },
   {
    "mode": "slicer",
    "gesture": "turn",
    "action": "Sets the depth.",
    "short_label": "DEPTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "514",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L514"
     }
    ]
   },
   {
    "mode": "sl_bus",
    "gesture": "turn",
    "action": "Sets the t4 in.",
    "short_label": "T4 IN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "515",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L515"
     }
    ]
   },
   {
    "mode": "sl_bus2",
    "gesture": "turn",
    "action": "Nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "516",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L516"
     }
    ]
   },
   {
    "mode": "sl_pitch",
    "gesture": "turn",
    "action": "Whether the slicer's pitch steps follow semitones or the song's scale.",
    "short_label": "SCALE SNAP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "517",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L517"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1119-1122",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1119-L1122"
     }
    ]
   },
   {
    "mode": "dly",
    "gesture": "turn",
    "action": "Sets the mix.",
    "short_label": "MIX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "506",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L506"
     }
    ]
   },
   {
    "mode": "dly2",
    "gesture": "turn",
    "action": "Sets the delay's wow and flutter amount.",
    "short_label": "MOD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "507",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L507"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "183",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L183"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1135-1139",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1135-L1139"
     }
    ]
   },
   {
    "mode": "reverb",
    "gesture": "turn",
    "action": "Pre-delay on ROOM and SPRING, AIR on SHIMMER and CLOUD, the chord's pitch on RESO.",
    "short_label": "PRE/AIR/PIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "510",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L510"
     },
     {
      "kind": "doc",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "docs/MANUAL.md",
      "lines": "903-907",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/docs/MANUAL.md?plain=1#L903-L907"
     }
    ]
   },
   {
    "mode": "reverb2",
    "gesture": "turn",
    "action": "Sets the width.",
    "short_label": "WIDTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "511",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L511"
     }
    ]
   },
   {
    "mode": "chorus",
    "gesture": "turn",
    "action": "Nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "512",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L512"
     }
    ]
   },
   {
    "mode": "master",
    "gesture": "turn",
    "action": "Sets the duck rel.",
    "short_label": "DUCK REL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "518",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L518"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "turn",
    "action": "Sets the transpose.",
    "short_label": "TRANSPOSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "520",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L520"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1776-1793",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1776-L1793"
     }
    ]
   },
   {
    "mode": "scl2",
    "gesture": "turn",
    "action": "Nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "521",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L521"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "191",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L191"
     }
    ]
   },
   {
    "mode": "edit1",
    "gesture": "turn",
    "action": "Sets the engine 4.",
    "short_label": "ENGINE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "523",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L523"
     }
    ]
   },
   {
    "mode": "edit2",
    "gesture": "turn",
    "action": "Sets the engine 8.",
    "short_label": "ENGINE 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "524",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L524"
     }
    ]
   },
   {
    "mode": "retrig",
    "gesture": "turn",
    "action": "Nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "525",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L525"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "212",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L212"
     }
    ]
   },
   {
    "mode": "morph",
    "gesture": "turn",
    "action": "Nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "526",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L526"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "214",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L214"
     }
    ]
   },
   {
    "mode": "kit3",
    "gesture": "turn",
    "action": "Nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_dx.c",
      "lines": "98-104",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_dx.c#L98-L104"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1013-1016",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1013-L1016"
     }
    ]
   },
   {
    "mode": "xmod",
    "gesture": "turn",
    "action": "Sets the xmod rand.",
    "short_label": "XMOD RAND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_dx.c",
      "lines": "58-63",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_dx.c#L58-L63"
     },
     {
      "kind": "doc",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "docs/MANUAL.md",
      "lines": "439-440",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/docs/MANUAL.md?plain=1#L439-L440"
     }
    ]
   },
   {
    "mode": "operator",
    "gesture": "turn",
    "action": "Sets the op level.",
    "short_label": "OP LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_fm6op.c",
      "lines": "7-9",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_fm6op.c#L7-L9"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1127-1130",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1127-L1130"
     }
    ]
   },
   {
    "mode": "op_env",
    "gesture": "turn",
    "action": "Sets the stage level.",
    "short_label": "STAGE LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_fm6op.c",
      "lines": "7-9",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_fm6op.c#L7-L9"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1127-1130",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1127-L1130"
     }
    ]
   },
   {
    "mode": "operator2",
    "gesture": "turn",
    "action": "Sets the velocity.",
    "short_label": "VELOCITY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_fm6op.c",
      "lines": "7-9",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_fm6op.c#L7-L9"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1127-1130",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1127-L1130"
     }
    ]
   },
   {
    "mode": "filter",
    "gesture": "turn",
    "action": "ANALOG's own drive; on other engines the track's DIST.",
    "short_label": "DRIVE/DIST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "534",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L534"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "535",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L535"
     }
    ]
   },
   {
    "mode": "sound1",
    "gesture": "turn",
    "action": "How far the sound's pitch falls.",
    "short_label": "PITCH DROP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_dx.c",
      "lines": "53-96",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_dx.c#L53-L96"
     }
    ]
   },
   {
    "mode": "sound2",
    "gesture": "turn",
    "action": "Sets the colour.",
    "short_label": "COLOUR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_dx.c",
      "lines": "53-96",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_dx.c#L53-L96"
     }
    ]
   },
   {
    "mode": "sound3",
    "gesture": "turn",
    "action": "Drive on or off.",
    "short_label": "DRIVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_dx.c",
      "lines": "53-96",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_dx.c#L53-L96"
     }
    ]
   },
   {
    "mode": "sound4",
    "gesture": "turn",
    "action": "This sound alone into chorus, delay or reverb, with an amount.",
    "short_label": "SEND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_dx.c",
      "lines": "53-96",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_dx.c#L53-L96"
     }
    ]
   },
   {
    "mode": "levels",
    "gesture": "turn",
    "action": "Sets the c.hat level.",
    "short_label": "C.HAT LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "541",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L541"
     }
    ]
   },
   {
    "mode": "levels2",
    "gesture": "turn",
    "action": "Sets the bell level.",
    "short_label": "BELL LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "542",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L542"
     }
    ]
   },
   {
    "mode": "stereo",
    "gesture": "turn",
    "action": "Nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "543",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L543"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "221",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L221"
     }
    ]
   },
   {
    "mode": "voice",
    "gesture": "turn",
    "action": "Sets the priority.",
    "short_label": "PRIORITY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "549",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L549"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1135-1139",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1135-L1139"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "turn",
    "action": "Sets the arp gate.",
    "short_label": "ARP GATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "558",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L558"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1135-1139",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1135-L1139"
     }
    ]
   },
   {
    "mode": "arp2",
    "gesture": "turn",
    "action": "Sets the note order.",
    "short_label": "NOTE ORDER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "559",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L559"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1135-1139",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1135-L1139"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "turn",
    "action": "None, accent, slide or both.",
    "short_label": "ACC/SLIDE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "807-847",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L807-L847"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "turn",
    "action": "The hit's accent (right on, left off).",
    "short_label": "ACCENT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "568-578",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L568-L578"
     }
    ]
   },
   {
    "mode": "comp",
    "gesture": "turn",
    "action": "Sets an arp's rate, RATCH/ECHO spacing, or how many loops each WALK/CLIMB move waits; for other types, sets EVERY, the loops when both components apply.",
    "short_label": "RATE / EVERY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "862-868",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L862-L868"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "886-908",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L886-L908"
     }
    ]
   },
   {
    "mode": "pattern",
    "gesture": "turn",
    "action": "Sets the gate.",
    "short_label": "GATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "567",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L567"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1135-1139",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1135-L1139"
     }
    ]
   },
   {
    "mode": "automation",
    "gesture": "turn",
    "action": "Picks CLEAR (OCT+ asks first).",
    "short_label": "CLEAR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1021-1026",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1021-L1026"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "1435-1455",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L1435-L1455"
     }
    ]
   },
   {
    "mode": "auto_list",
    "gesture": "turn",
    "action": "The record's value.",
    "short_label": "VALUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_events.c",
      "lines": "6-12",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_events.c#L6-L12"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_events.c",
      "lines": "113-167",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_events.c#L113-L167"
     }
    ]
   },
   {
    "mode": "mutate",
    "gesture": "turn",
    "action": "ORBIT varies around a kept anchor; DRIFT keeps going from where it is.",
    "short_label": "ORBIT/DRIFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "580",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L580"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "222-226",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L222-L226"
     }
    ]
   },
   {
    "mode": "fugue",
    "gesture": "turn",
    "action": "That playhead's interval in scale steps (+-14).",
    "short_label": "INTERVAL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "988-996",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L988-L996"
     }
    ]
   },
   {
    "mode": "shift",
    "gesture": "turn",
    "action": "Sets live recording quantization: 100% snaps to the grid; lower values keep more of the timing you played.",
    "short_label": "REC Q",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "572",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L572"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "548-565",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L548-L565"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "turn",
    "action": "The track's mute (right on, left off).",
    "short_label": "MUTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "480-504",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L480-L504"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1135-1139",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1135-L1139"
     }
    ]
   },
   {
    "mode": "global",
    "gesture": "turn",
    "action": "Sets the tune.",
    "short_label": "TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "550",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L550"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1135-1139",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1135-L1139"
     }
    ]
   },
   {
    "mode": "system",
    "gesture": "turn",
    "action": "Shows the audio load in percent; turning does nothing.",
    "short_label": "CPU (SHOW)",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "551",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L551"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1140-1145",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1140-L1145"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1146-1151",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1146-L1151"
     }
    ]
   },
   {
    "mode": "presets",
    "gesture": "turn",
    "action": "Browse all sounds or only favourites.",
    "short_label": "LIST FILTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1079-1092",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1079-L1092"
     }
    ]
   },
   {
    "mode": "user",
    "gesture": "turn",
    "action": "Picks SAVE (OCT+ opens NAME, then saves; stopped only).",
    "short_label": "SAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1109-1112",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1109-L1112"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "1435-1455",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L1435-L1455"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1099-1103",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1099-L1103"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "turn",
    "action": "Picks SAVE (OCT+ opens NAME, then saves; stopped only).",
    "short_label": "SAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "555",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L555"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1104-1108",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1104-L1108"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1099-1103",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1099-L1103"
     }
    ]
   },
   {
    "mode": "arrange",
    "gesture": "turn",
    "action": "Right stores a scene (mutes, macros, held punch-ins) on the row, left clears it.",
    "short_label": "SCENE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1027-1064",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1027-L1064"
     }
    ]
   },
   {
    "mode": "tools",
    "gesture": "turn",
    "action": "Picks CLEAR SEQ, INIT SOUND, DELETE ROW, CLEAR SONG, NEW PROJECT or CPU TEST; OCT+ opens its question before doing it.",
    "short_label": "PICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1093-1097",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1093-L1097"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_graph.c",
      "lines": "1619-1640",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_graph.c#L1619-L1640"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1182-1183",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1182-L1183"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn",
    "action": "Edits the value in the same column of the page shown (the four cards). Fast turns sweep wide values (MENU > KNOB ACCEL).",
    "short_label": "VALUE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2289-2325",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2289-L2325"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "460-476",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L460-L476"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "turn_while_holding:key_f3",
    "action": "Only while you are step-entering a note on the roll (REC armed, transport stopped) with its keys held: gives that step its own value of this knob's parameter on the sound page you used last (a parameter lock). Otherwise the knob does its usual STEP-page job. Not while a song plays.",
    "short_label": "LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "618-639",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L618-L639"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2251-2260",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2251-L2260"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "turn_while_holding:key_f3",
    "action": "While you hold one or more white step keys on the drum grid: gives those steps their own value of this knob's parameter on the sound page you used last (a parameter lock). Not while a song plays. F3 stands for whichever step key you hold.",
    "short_label": "LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "618-639",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L618-L639"
     }
    ]
   },
   {
    "mode": "macro_latched",
    "gesture": "turn",
    "action": "Moves macro M4 (whatever page is shown).",
    "short_label": "MACRO M4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2295-2298",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2295-L2298"
     }
    ]
   },
   {
    "mode": "layer_macro",
    "gesture": "turn_while_holding:button_lfo",
    "action": "Moves macro M4; the map shows where it is routed.",
    "short_label": "MACRO M4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "598-631",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L598-L631"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "action": "Changes the value of the selected row (any of the four knobs).",
    "short_label": "MENU VALUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_menu.c",
      "lines": "458-499",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_menu.c#L458-L499"
     }
    ]
   },
   {
    "mode": "dialog",
    "gesture": "turn",
    "action": "Does nothing while a dialog is up.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2023-2026",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2023-L2026"
     }
    ]
   },
   {
    "mode": "dice_dialog",
    "gesture": "turn",
    "action": "Does nothing while the dice dialog is up (SELECT rolls again).",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2023-2026",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2023-L2026"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2131-2140",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2131-L2140"
     }
    ]
   },
   {
    "mode": "step_rec",
    "gesture": "turn_while_holding:key_f3",
    "action": "A parameter lock on the step being entered.",
    "short_label": "LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2299-2303",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2299-L2303"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1342-1350",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1342-L1350"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "turn_while_holding:button_fx",
    "action": "DEPTH macro: the REPEAT effect's level. Snaps back when FX is let go (kept with FX LATCH ON).",
    "short_label": "DEPTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "16-17",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L16-L17"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "598-631",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L598-L631"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "186-220",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L186-L220"
     }
    ]
   },
   {
    "mode": "fx_locked",
    "gesture": "turn",
    "action": "DEPTH macro: the REPEAT effect's level.",
    "short_label": "DEPTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1963-1967",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1963-L1967"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "598-631",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L598-L631"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "turn_while_holding:button_glo",
    "action": "Level of track 4 (track 6 when T5 or T6 is selected); recorded like the MIXER level.",
    "short_label": "T4/T6 LVL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "598-631",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L598-L631"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/icons.c",
      "lines": "20",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/icons.c#L20"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "turn_while_holding:button_sel",
    "action": "Sets the track's sequence pitch, as TRACK > PITCH.",
    "short_label": "SEQ PITCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "69",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L69"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "621-629",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L621-L629"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "572",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L572"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "turn_while_holding:button_edit",
    "action": "EDIT 1 value 4 of the track's engine, wherever you are.",
    "short_label": "ENGINE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "598-631",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L598-L631"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "55-66",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L55-L66"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "turn_while_holding:button_seq",
    "action": "Gate length.",
    "short_label": "GATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "71",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L71"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "598-631",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L598-L631"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "turn_while_holding:button_rec",
    "action": "Nothing in the REC layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "598-631",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L598-L631"
     }
    ]
   },
   {
    "mode": "layer_save",
    "gesture": "turn_while_holding:button_save",
    "action": "Nothing in the SAVE layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "598-631",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L598-L631"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "turn",
    "action": "Nothing on the NAME screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "240-274",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L240-L274"
     }
    ]
   },
   {
    "mode": "dly3",
    "gesture": "turn",
    "action": "Nothing on this page.",
    "short_label": "UNUSED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "508-509",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L508-L509"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "179-180",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L179-L180"
     }
    ]
   },
   {
    "mode": "punch",
    "gesture": "turn",
    "action": "Picks CLEAR when turned right; OCT+ asks before emptying the punch-in lane.",
    "short_label": "CLEAR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "519",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L519"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "1441",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L1441"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1099-1102",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1099-L1102"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1166-1170",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1166-L1170"
     }
    ]
   },
   {
    "mode": "chord",
    "gesture": "turn",
    "action": "Nothing on this page.",
    "short_label": "UNUSED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "522",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L522"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "227-231",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L227-L231"
     }
    ]
   },
   {
    "mode": "note",
    "gesture": "turn",
    "action": "Shifts this step's start from half a step early to 7/16 late, in sixteenths of a step; works on DRUM too.",
    "short_label": "MICRO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "801-815",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L801-L815"
     }
    ]
   },
   {
    "mode": "stretch",
    "gesture": "turn",
    "action": "Rotates sequence playback by up to 32 steps either way without moving its written steps; recordable as automation.",
    "short_label": "ROTATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "969-972",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L969-L972"
     }
    ]
   },
   {
    "mode": "comp2",
    "gesture": "turn",
    "action": "Sets EVERY, the loops when both components apply; on WALK or CLIMB sets how many loops each move waits instead. While a song or quick chain is running or armed, leaves it unchanged and shows STOP TO EDIT.",
    "short_label": "EVERY / RATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "571",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L571"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "862-868",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L862-L868"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "899-900",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L899-L900"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "473",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L473"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/song_main.c",
      "lines": "238-248",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L238-L248"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "854-861",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L854-L861"
     }
    ]
   },
   {
    "mode": "gen",
    "gesture": "turn",
    "action": "Page 1: LOOP, PARTS or SONG form; page 2: ARP amount; page 3: HUMAN amount.",
    "short_label": "FORM / HUMAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/gen.c",
      "lines": "1408-1441",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/gen.c#L1408-L1441"
     }
    ]
   }
  ],
  "knob_master": [
   {
    "mode": "any",
    "gesture": "turn",
    "action": "Sets speaker and analog output volume. USB stereo follows it at USB LEVEL MASTER; FIXED and -6/-12/-18/-24 dB keep USB independent. USB STEMS always bypasses this knob, while the USB LEVEL attenuation still applies.",
    "short_label": "VOLUME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/master.c",
      "lines": "8-15",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/master.c#L8-L15"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/menu_items.c",
      "lines": "79-85",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/menu_items.c#L79-L85"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/fx.c",
      "lines": "1190-1209",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/fx.c#L1190-L1209"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/usb.c",
      "lines": "1063-1070",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/usb.c#L1063-L1070"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/usb.c",
      "lines": "1167-1182",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/usb.c#L1167-L1182"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/audio.c",
      "lines": "30-43",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/audio.c#L30-L43"
     }
    ]
   }
  ],
  "key_f3": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays F3 with the octave and track transpose applied; on a POLY melodic track, CHORD can expand it to a voiced or strummed chord, which also feeds the arpeggiator.",
    "short_label": "F3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-286",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L286"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "781-845",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L781-L845"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/voice.c",
      "lines": "502-524",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/voice.c#L502-L524"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With KEY MODE (QUANT) WHITE: the white keys walk the scale with C4 as the root, one scale note per key, on every page.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     }
    ]
   },
   {
    "mode": "drum_track",
    "gesture": "press",
    "action": "Strikes the tom sound, -7 semitones (General MIDI drum note 29 at octave 0; OCT moves the map).",
    "short_label": "TOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "469-473",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L469-L473"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "84-93",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L84-L93"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "94",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L94"
     }
    ]
   },
   {
    "mode": "arp_trns",
    "gesture": "press",
    "action": "In ARP TRNS, plays no note: sets the sequence shift from C4 to the mapped key before track transpose; WHITE ignores black keys and the shift stays after release. With CHORD on a POLY track, each generated tone updates the shift, so the last tone sets it.",
    "short_label": "TRANSPOSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "695-711",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L695-L711"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-240",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L240"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "770-805",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L770-L805"
     }
    ]
   },
   {
    "mode": "step_rec",
    "gesture": "press",
    "action": "Writes the played note or CHORD result into the cursor step, up to four notes; MONO keeps the last note. Releasing all keys completes the entry and advances the cursor.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1386-1445",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1386-L1445"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1351-1385",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1351-L1385"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Step 1 of the page shown (steps 1, 17, 33, 49 on pages 1-4): adds the selected lane's hit there, or takes it away when you let go (unless you held it for a lock); the cursor moves there.",
    "short_label": "STEP 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "582-616",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L582-L616"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "643-655",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L643-L655"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "REPEAT 1/8: audio repeat of the last 1/8 (dimmed below about 81 BPM), while the key is held (MENU > FX LATCH ON: each press toggles it).",
    "short_label": "RPT 1/8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "3-21",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L3-L21"
     }
    ]
   },
   {
    "mode": "fx_locked",
    "gesture": "press",
    "action": "REPEAT 1/8: audio repeat of the last 1/8 (dimmed below about 81 BPM), while the key is held (MENU > FX LATCH ON: each press toggles it).",
    "short_label": "RPT 1/8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "3-21",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L3-L21"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Solos track 1 while held.",
    "short_label": "SOLO T1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "520-523",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L520-L523"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "With a melodic track selected: sets the root to F on every melodic track. With a DRUM track selected only that drum track's root changes, which you don't hear.",
    "short_label": "ROOT F",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1775-1793",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1775-L1793"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "553",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L553"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "INIT: asks, then sets the track's sound to its engine's default values, dry (FM6 the init voice; DRUM also the factory kit). Steps stay.",
    "short_label": "INIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "76",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L76"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "1152-1168",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L1152-L1168"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2095-2105",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2095-L2105"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "Clears the track's steps 1 to LEN. No undo.",
    "short_label": "CLEAR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_tools.c",
      "lines": "3-12",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_tools.c#L3-L12"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_tools.c",
      "lines": "14-15",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_tools.c#L14-L15"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "323-343",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L323-L343"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press_while_holding:button_rec",
    "action": "Clears the selected track's steps and automation at once (no dialog; GLO + G4 undoes it).",
    "short_label": "CLEAR TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "385-395",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L385-L395"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "347-370",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L347-L370"
     }
    ]
   },
   {
    "mode": "layer_save",
    "gesture": "press_while_holding:button_save",
    "action": "Plays section A: it comes in at the next bar if playing, straight away if stopped. Several sections tapped during one hold make a quick chain.",
    "short_label": "PLAY A",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "405-437",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L405-L437"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "400-404",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L400-L404"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/song_main.c",
      "lines": "154-183",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L154-L183"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/song_main.c",
      "lines": "213-251",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L213-L251"
     }
    ]
   },
   {
    "mode": "layer_macro",
    "gesture": "press_while_holding:button_lfo",
    "action": "Rolls new macro routes: every track's macro routes go, and tracks sounding right now get up to two new ones each.",
    "short_label": "DICE ROUTES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "460-507",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L460-L507"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Types AB phone-style (another tap inside 0.8 s moves on to the next one); in 123 mode one digit or symbol per key.",
    "short_label": "TYPE AB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "12-19",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L12-L19"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "240-274",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L240-L274"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "Any key cancels calibration and keeps the old table.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2331-2332",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2331-L2332"
     }
    ]
   }
  ],
  "key_fs3": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays F#3 with the octave and track transpose applied; on a POLY melodic track, CHORD can expand it to a voiced or strummed chord, which also feeds the arpeggiator.",
    "short_label": "F#3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-286",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L286"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "781-845",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L781-L845"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/voice.c",
      "lines": "502-524",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/voice.c#L502-L524"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With KEY MODE (QUANT) WHITE: silent. With SNAP or SEQ: plays, rounded down into the scale. The setting is shared by every melodic track, so it applies on every page.",
    "short_label": "OFF-SCALE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     }
    ]
   },
   {
    "mode": "drum_track",
    "gesture": "press",
    "action": "Strikes the c.hat sound (General MIDI drum note 30 at octave 0; OCT moves the map).",
    "short_label": "C.HAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "469-473",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L469-L473"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "84-93",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L84-L93"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "94",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L94"
     }
    ]
   },
   {
    "mode": "arp_trns",
    "gesture": "press",
    "action": "In ARP TRNS, plays no note: sets the sequence shift from C4 to the mapped key before track transpose; WHITE ignores black keys and the shift stays after release. With CHORD on a POLY track, each generated tone updates the shift, so the last tone sets it.",
    "short_label": "TRANSPOSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "695-711",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L695-L711"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-240",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L240"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "770-805",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L770-L805"
     }
    ]
   },
   {
    "mode": "step_rec",
    "gesture": "press",
    "action": "Writes the played note or CHORD result into the cursor step, up to four notes; MONO keeps the last note. Releasing all keys completes the entry and advances the cursor.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1386-1445",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1386-L1445"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1351-1385",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1351-L1385"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Selects drum lane 1 (kick) and plays it.",
    "short_label": "KICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "582-616",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L582-L616"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "866-923",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L866-L923"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "145",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L145"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Mutes track 1 while held (not saved).",
    "short_label": "MUTE T1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     }
    ]
   },
   {
    "mode": "fx_locked",
    "gesture": "press",
    "action": "Mutes track 1 while held (not saved).",
    "short_label": "MUTE T1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Mutes or unmutes track 1 (stays; saved with the project and in scenes).",
    "short_label": "MUTE T1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "520-523",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L520-L523"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "With a melodic track selected: sets the root to F# on every melodic track. With a DRUM track selected only that drum track's root changes, which you don't hear.",
    "short_label": "ROOT F#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1775-1793",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1775-L1793"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "553",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L553"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "On a DRUM track: mutes or unmutes kit sound 1 (kick); saved with the section. Other engines: nothing.",
    "short_label": "MUTE KICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "561-562",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L561-L562"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "61-63",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L61-L63"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "111",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L111"
     },
     {
      "kind": "doc",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "docs/MANUAL.md",
      "lines": "332",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/docs/MANUAL.md?plain=1#L332"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "DRUM: picks lane 1 (kick) for the lane tools.",
    "short_label": "KICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press_while_holding:button_rec",
    "action": "Nothing in the REC layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_save",
    "gesture": "press_while_holding:button_save",
    "action": "Nothing in the SAVE layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_macro",
    "gesture": "press_while_holding:button_lfo",
    "action": "Nothing in the LFO layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Moves the text cursor left (repeats while held).",
    "short_label": "CURSOR <",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "64-74",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L64-L74"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "12-19",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L12-L19"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "Any key cancels calibration and keeps the old table.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2331-2332",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2331-L2332"
     }
    ]
   }
  ],
  "key_g3": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays G3 with the octave and track transpose applied; on a POLY melodic track, CHORD can expand it to a voiced or strummed chord, which also feeds the arpeggiator.",
    "short_label": "G3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-286",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L286"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "781-845",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L781-L845"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/voice.c",
      "lines": "502-524",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/voice.c#L502-L524"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With KEY MODE (QUANT) WHITE: the white keys walk the scale with C4 as the root, one scale note per key, on every page.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     }
    ]
   },
   {
    "mode": "drum_track",
    "gesture": "press",
    "action": "Strikes the tom sound, -4 semitones (General MIDI drum note 31 at octave 0; OCT moves the map).",
    "short_label": "TOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "469-473",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L469-L473"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "84-93",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L84-L93"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "94",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L94"
     }
    ]
   },
   {
    "mode": "arp_trns",
    "gesture": "press",
    "action": "In ARP TRNS, plays no note: sets the sequence shift from C4 to the mapped key before track transpose; WHITE ignores black keys and the shift stays after release. With CHORD on a POLY track, each generated tone updates the shift, so the last tone sets it.",
    "short_label": "TRANSPOSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "695-711",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L695-L711"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-240",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L240"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "770-805",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L770-L805"
     }
    ]
   },
   {
    "mode": "step_rec",
    "gesture": "press",
    "action": "Writes the played note or CHORD result into the cursor step, up to four notes; MONO keeps the last note. Releasing all keys completes the entry and advances the cursor.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1386-1445",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1386-L1445"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1351-1385",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1351-L1385"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Step 2 of the page shown (steps 2, 18, 34, 50 on pages 1-4): adds the selected lane's hit there, or takes it away when you let go (unless you held it for a lock); the cursor moves there.",
    "short_label": "STEP 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "582-616",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L582-L616"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "643-655",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L643-L655"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "REPEAT 1/16: audio repeat of the last 1/16, while the key is held (MENU > FX LATCH ON: each press toggles it).",
    "short_label": "RPT 1/16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "3-21",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L3-L21"
     }
    ]
   },
   {
    "mode": "fx_locked",
    "gesture": "press",
    "action": "REPEAT 1/16: audio repeat of the last 1/16, while the key is held (MENU > FX LATCH ON: each press toggles it).",
    "short_label": "RPT 1/16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "3-21",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L3-L21"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Solos track 2 while held.",
    "short_label": "SOLO T2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "520-523",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L520-L523"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "With a melodic track selected: sets the root to G on every melodic track. With a DRUM track selected only that drum track's root changes, which you don't hear.",
    "short_label": "ROOT G",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1775-1793",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1775-L1793"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "553",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L553"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "RECALL: asks, then brings back the track's sound as the current section stored it (with its kit on DRUM). NOTHING SAVED if there is none.",
    "short_label": "RECALL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "76",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L76"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2106-2111",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2106-L2111"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "Reverses the steps (locks move with them). No undo.",
    "short_label": "REVERSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_tools.c",
      "lines": "3-12",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_tools.c#L3-L12"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_tools.c",
      "lines": "14-15",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_tools.c#L14-L15"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "323-343",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L323-L343"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press_while_holding:button_rec",
    "action": "Steps the metronome click: OFF, REC (while recording), ON.",
    "short_label": "CLICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "385-395",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L385-L395"
     }
    ]
   },
   {
    "mode": "layer_save",
    "gesture": "press_while_holding:button_save",
    "action": "Plays section B: it comes in at the next bar if playing, straight away if stopped. Several sections tapped during one hold make a quick chain.",
    "short_label": "PLAY B",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "405-437",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L405-L437"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "400-404",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L400-L404"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/song_main.c",
      "lines": "154-183",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L154-L183"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/song_main.c",
      "lines": "213-251",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L213-L251"
     }
    ]
   },
   {
    "mode": "layer_macro",
    "gesture": "press_while_holding:button_lfo",
    "action": "Clears every track's macro routes.",
    "short_label": "CLEAR ROUTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "460-507",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L460-L507"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Types CD phone-style (another tap inside 0.8 s moves on to the next one); in 123 mode one digit or symbol per key.",
    "short_label": "TYPE CD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "12-19",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L12-L19"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "240-274",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L240-L274"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "Any key cancels calibration and keeps the old table.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2331-2332",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2331-L2332"
     }
    ]
   }
  ],
  "key_gs3": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays G#3 with the octave and track transpose applied; on a POLY melodic track, CHORD can expand it to a voiced or strummed chord, which also feeds the arpeggiator.",
    "short_label": "G#3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-286",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L286"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "781-845",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L781-L845"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/voice.c",
      "lines": "502-524",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/voice.c#L502-L524"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With KEY MODE (QUANT) WHITE: silent. With SNAP or SEQ: plays, rounded down into the scale. The setting is shared by every melodic track, so it applies on every page.",
    "short_label": "OFF-SCALE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     }
    ]
   },
   {
    "mode": "drum_track",
    "gesture": "press",
    "action": "Strikes the c.hat sound, -2 semitones (General MIDI drum note 32 at octave 0; OCT moves the map).",
    "short_label": "C.HAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "469-473",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L469-L473"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "84-93",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L84-L93"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "94",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L94"
     }
    ]
   },
   {
    "mode": "arp_trns",
    "gesture": "press",
    "action": "In ARP TRNS, plays no note: sets the sequence shift from C4 to the mapped key before track transpose; WHITE ignores black keys and the shift stays after release. With CHORD on a POLY track, each generated tone updates the shift, so the last tone sets it.",
    "short_label": "TRANSPOSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "695-711",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L695-L711"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-240",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L240"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "770-805",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L770-L805"
     }
    ]
   },
   {
    "mode": "step_rec",
    "gesture": "press",
    "action": "Writes the played note or CHORD result into the cursor step, up to four notes; MONO keeps the last note. Releasing all keys completes the entry and advances the cursor.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1386-1445",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1386-L1445"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1351-1385",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1351-L1385"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Selects drum lane 2 (snare) and plays it.",
    "short_label": "SNARE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "582-616",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L582-L616"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "866-923",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L866-L923"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "145",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L145"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Mutes track 2 while held (not saved).",
    "short_label": "MUTE T2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     }
    ]
   },
   {
    "mode": "fx_locked",
    "gesture": "press",
    "action": "Mutes track 2 while held (not saved).",
    "short_label": "MUTE T2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Mutes or unmutes track 2 (stays; saved with the project and in scenes).",
    "short_label": "MUTE T2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "520-523",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L520-L523"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "With a melodic track selected: sets the root to G# on every melodic track. With a DRUM track selected only that drum track's root changes, which you don't hear.",
    "short_label": "ROOT G#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1775-1793",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1775-L1793"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "553",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L553"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "On a DRUM track: mutes or unmutes kit sound 2 (snare); saved with the section. Other engines: nothing.",
    "short_label": "MUTE SNARE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "561-562",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L561-L562"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "61-63",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L61-L63"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "111",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L111"
     },
     {
      "kind": "doc",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "docs/MANUAL.md",
      "lines": "332",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/docs/MANUAL.md?plain=1#L332"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "DRUM: picks lane 2 (snare) for the lane tools.",
    "short_label": "SNARE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press_while_holding:button_rec",
    "action": "Nothing in the REC layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_save",
    "gesture": "press_while_holding:button_save",
    "action": "Nothing in the SAVE layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_macro",
    "gesture": "press_while_holding:button_lfo",
    "action": "Nothing in the LFO layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Types a space.",
    "short_label": "SPACE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "64-74",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L64-L74"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "12-19",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L12-L19"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "Any key cancels calibration and keeps the old table.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2331-2332",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2331-L2332"
     }
    ]
   }
  ],
  "key_a3": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays A3 with the octave and track transpose applied; on a POLY melodic track, CHORD can expand it to a voiced or strummed chord, which also feeds the arpeggiator.",
    "short_label": "A3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-286",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L286"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "781-845",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L781-L845"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/voice.c",
      "lines": "502-524",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/voice.c#L502-L524"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With KEY MODE (QUANT) WHITE: the white keys walk the scale with C4 as the root, one scale note per key, on every page.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     }
    ]
   },
   {
    "mode": "drum_track",
    "gesture": "press",
    "action": "Strikes the tom sound (General MIDI drum note 33 at octave 0; OCT moves the map).",
    "short_label": "TOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "469-473",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L469-L473"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "84-93",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L84-L93"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "94",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L94"
     }
    ]
   },
   {
    "mode": "arp_trns",
    "gesture": "press",
    "action": "In ARP TRNS, plays no note: sets the sequence shift from C4 to the mapped key before track transpose; WHITE ignores black keys and the shift stays after release. With CHORD on a POLY track, each generated tone updates the shift, so the last tone sets it.",
    "short_label": "TRANSPOSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "695-711",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L695-L711"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-240",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L240"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "770-805",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L770-L805"
     }
    ]
   },
   {
    "mode": "step_rec",
    "gesture": "press",
    "action": "Writes the played note or CHORD result into the cursor step, up to four notes; MONO keeps the last note. Releasing all keys completes the entry and advances the cursor.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1386-1445",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1386-L1445"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1351-1385",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1351-L1385"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Step 3 of the page shown (steps 3, 19, 35, 51 on pages 1-4): adds the selected lane's hit there, or takes it away when you let go (unless you held it for a lock); the cursor moves there.",
    "short_label": "STEP 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "582-616",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L582-L616"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "643-655",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L643-L655"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "REPEAT 1/32: audio repeat of the last 1/32, while the key is held (MENU > FX LATCH ON: each press toggles it).",
    "short_label": "RPT 1/32",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "3-21",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L3-L21"
     }
    ]
   },
   {
    "mode": "fx_locked",
    "gesture": "press",
    "action": "REPEAT 1/32: audio repeat of the last 1/32, while the key is held (MENU > FX LATCH ON: each press toggles it).",
    "short_label": "RPT 1/32",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "3-21",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L3-L21"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Solos track 3 while held.",
    "short_label": "SOLO T3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "520-523",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L520-L523"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "With a melodic track selected: sets the root to A on every melodic track. With a DRUM track selected only that drum track's root changes, which you don't hear.",
    "short_label": "ROOT A",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1775-1793",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1775-L1793"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "553",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L553"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Nothing in the EDIT layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "76",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L76"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "Shifts the steps one to the left. No undo.",
    "short_label": "SHIFT <",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_tools.c",
      "lines": "3-12",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_tools.c#L3-L12"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_tools.c",
      "lines": "14-15",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_tools.c#L14-L15"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "323-343",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L323-L343"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press_while_holding:button_rec",
    "action": "Nothing in the REC layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_save",
    "gesture": "press_while_holding:button_save",
    "action": "Plays section C: it comes in at the next bar if playing, straight away if stopped. Several sections tapped during one hold make a quick chain.",
    "short_label": "PLAY C",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "405-437",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L405-L437"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "400-404",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L400-L404"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/song_main.c",
      "lines": "154-183",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L154-L183"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/song_main.c",
      "lines": "213-251",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L213-L251"
     }
    ]
   },
   {
    "mode": "layer_macro",
    "gesture": "press_while_holding:button_lfo",
    "action": "Nothing in the LFO layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Types EF phone-style (another tap inside 0.8 s moves on to the next one); in 123 mode one digit or symbol per key.",
    "short_label": "TYPE EF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "12-19",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L12-L19"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "240-274",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L240-L274"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "Any key cancels calibration and keeps the old table.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2331-2332",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2331-L2332"
     }
    ]
   }
  ],
  "key_as3": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays A#3 with the octave and track transpose applied; on a POLY melodic track, CHORD can expand it to a voiced or strummed chord, which also feeds the arpeggiator.",
    "short_label": "A#3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-286",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L286"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "781-845",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L781-L845"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/voice.c",
      "lines": "502-524",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/voice.c#L502-L524"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With KEY MODE (QUANT) WHITE: silent. With SNAP or SEQ: plays, rounded down into the scale. The setting is shared by every melodic track, so it applies on every page.",
    "short_label": "OFF-SCALE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     }
    ]
   },
   {
    "mode": "drum_track",
    "gesture": "press",
    "action": "Strikes the o.hat sound (General MIDI drum note 34 at octave 0; OCT moves the map).",
    "short_label": "O.HAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "469-473",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L469-L473"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "84-93",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L84-L93"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "94",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L94"
     }
    ]
   },
   {
    "mode": "arp_trns",
    "gesture": "press",
    "action": "In ARP TRNS, plays no note: sets the sequence shift from C4 to the mapped key before track transpose; WHITE ignores black keys and the shift stays after release. With CHORD on a POLY track, each generated tone updates the shift, so the last tone sets it.",
    "short_label": "TRANSPOSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "695-711",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L695-L711"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-240",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L240"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "770-805",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L770-L805"
     }
    ]
   },
   {
    "mode": "step_rec",
    "gesture": "press",
    "action": "Writes the played note or CHORD result into the cursor step, up to four notes; MONO keeps the last note. Releasing all keys completes the entry and advances the cursor.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1386-1445",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1386-L1445"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1351-1385",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1351-L1385"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Selects drum lane 3 (clap) and plays it.",
    "short_label": "CLAP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "582-616",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L582-L616"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "866-923",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L866-L923"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "145",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L145"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Mutes track 3 while held (not saved).",
    "short_label": "MUTE T3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     }
    ]
   },
   {
    "mode": "fx_locked",
    "gesture": "press",
    "action": "Mutes track 3 while held (not saved).",
    "short_label": "MUTE T3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Mutes or unmutes track 3 (stays; saved with the project and in scenes).",
    "short_label": "MUTE T3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "520-523",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L520-L523"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "With a melodic track selected: sets the root to A# on every melodic track. With a DRUM track selected only that drum track's root changes, which you don't hear.",
    "short_label": "ROOT A#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1775-1793",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1775-L1793"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "553",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L553"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "On a DRUM track: mutes or unmutes kit sound 3 (clap); saved with the section. Other engines: nothing.",
    "short_label": "MUTE CLAP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "561-562",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L561-L562"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "61-63",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L61-L63"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "111",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L111"
     },
     {
      "kind": "doc",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "docs/MANUAL.md",
      "lines": "332",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/docs/MANUAL.md?plain=1#L332"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "DRUM: picks lane 3 (clap) for the lane tools.",
    "short_label": "CLAP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press_while_holding:button_rec",
    "action": "Nothing in the REC layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_save",
    "gesture": "press_while_holding:button_save",
    "action": "Nothing in the SAVE layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_macro",
    "gesture": "press_while_holding:button_lfo",
    "action": "Nothing in the LFO layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Moves the text cursor right (repeats while held).",
    "short_label": "CURSOR >",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "64-74",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L64-L74"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "12-19",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L12-L19"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "Any key cancels calibration and keeps the old table.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2331-2332",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2331-L2332"
     }
    ]
   }
  ],
  "key_b3": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays B3 with the octave and track transpose applied; on a POLY melodic track, CHORD can expand it to a voiced or strummed chord, which also feeds the arpeggiator.",
    "short_label": "B3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-286",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L286"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "781-845",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L781-L845"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/voice.c",
      "lines": "502-524",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/voice.c#L502-L524"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With KEY MODE (QUANT) WHITE: the white keys walk the scale with C4 as the root, one scale note per key, on every page.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     }
    ]
   },
   {
    "mode": "drum_track",
    "gesture": "press",
    "action": "Strikes the kick sound, -2 semitones (General MIDI drum note 35 at octave 0; OCT moves the map).",
    "short_label": "KICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "469-473",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L469-L473"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "84-93",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L84-L93"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "94",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L94"
     }
    ]
   },
   {
    "mode": "arp_trns",
    "gesture": "press",
    "action": "In ARP TRNS, plays no note: sets the sequence shift from C4 to the mapped key before track transpose; WHITE ignores black keys and the shift stays after release. With CHORD on a POLY track, each generated tone updates the shift, so the last tone sets it.",
    "short_label": "TRANSPOSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "695-711",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L695-L711"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-240",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L240"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "770-805",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L770-L805"
     }
    ]
   },
   {
    "mode": "step_rec",
    "gesture": "press",
    "action": "Writes the played note or CHORD result into the cursor step, up to four notes; MONO keeps the last note. Releasing all keys completes the entry and advances the cursor.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1386-1445",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1386-L1445"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1351-1385",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1351-L1385"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Step 4 of the page shown (steps 4, 20, 36, 52 on pages 1-4): adds the selected lane's hit there, or takes it away when you let go (unless you held it for a lock); the cursor moves there.",
    "short_label": "STEP 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "582-616",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L582-L616"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "643-655",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L643-L655"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "LPF: low-pass sweep on the mix, while the key is held (MENU > FX LATCH ON: each press toggles it).",
    "short_label": "LOW-PASS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "3-21",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L3-L21"
     }
    ]
   },
   {
    "mode": "fx_locked",
    "gesture": "press",
    "action": "LPF: low-pass sweep on the mix, while the key is held (MENU > FX LATCH ON: each press toggles it).",
    "short_label": "LOW-PASS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "3-21",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L3-L21"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Solos track 4 while held.",
    "short_label": "SOLO T4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "520-523",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L520-L523"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "With a melodic track selected: sets the root to B on every melodic track. With a DRUM track selected only that drum track's root changes, which you don't hear.",
    "short_label": "ROOT B",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1775-1793",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1775-L1793"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "553",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L553"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Nothing in the EDIT layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "76",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L76"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "Shifts the steps one to the right. No undo.",
    "short_label": "SHIFT >",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_tools.c",
      "lines": "3-12",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_tools.c#L3-L12"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_tools.c",
      "lines": "14-15",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_tools.c#L14-L15"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "323-343",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L323-L343"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press_while_holding:button_rec",
    "action": "Nothing in the REC layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_save",
    "gesture": "press_while_holding:button_save",
    "action": "Plays section D: it comes in at the next bar if playing, straight away if stopped. Several sections tapped during one hold make a quick chain.",
    "short_label": "PLAY D",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "405-437",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L405-L437"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "400-404",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L400-L404"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/song_main.c",
      "lines": "154-183",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L154-L183"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/song_main.c",
      "lines": "213-251",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L213-L251"
     }
    ]
   },
   {
    "mode": "layer_macro",
    "gesture": "press_while_holding:button_lfo",
    "action": "Nothing in the LFO layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Types GH phone-style (another tap inside 0.8 s moves on to the next one); in 123 mode one digit or symbol per key.",
    "short_label": "TYPE GH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "12-19",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L12-L19"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "240-274",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L240-L274"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "Any key cancels calibration and keeps the old table.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2331-2332",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2331-L2332"
     }
    ]
   }
  ],
  "key_c4": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays C4 with the octave and track transpose applied; on a POLY melodic track, CHORD can expand it to a voiced or strummed chord, which also feeds the arpeggiator.",
    "short_label": "C4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-286",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L286"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "781-845",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L781-L845"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/voice.c",
      "lines": "502-524",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/voice.c#L502-L524"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With KEY MODE (QUANT) WHITE: the white keys walk the scale with C4 as the root, one scale note per key, on every page.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     }
    ]
   },
   {
    "mode": "drum_track",
    "gesture": "press",
    "action": "Strikes the kick sound (General MIDI drum note 36 at octave 0; OCT moves the map).",
    "short_label": "KICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "469-473",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L469-L473"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "84-93",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L84-L93"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "94",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L94"
     }
    ]
   },
   {
    "mode": "arp_trns",
    "gesture": "press",
    "action": "In ARP TRNS, plays no note: sets the sequence shift from C4 to the mapped key before track transpose; WHITE ignores black keys and the shift stays after release. With CHORD on a POLY track, each generated tone updates the shift, so the last tone sets it.",
    "short_label": "TRANSPOSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "695-711",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L695-L711"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-240",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L240"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "770-805",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L770-L805"
     }
    ]
   },
   {
    "mode": "step_rec",
    "gesture": "press",
    "action": "Writes the played note or CHORD result into the cursor step, up to four notes; MONO keeps the last note. Releasing all keys completes the entry and advances the cursor.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1386-1445",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1386-L1445"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1351-1385",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1351-L1385"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Step 5 of the page shown (steps 5, 21, 37, 53 on pages 1-4): adds the selected lane's hit there, or takes it away when you let go (unless you held it for a lock); the cursor moves there.",
    "short_label": "STEP 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "582-616",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L582-L616"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "643-655",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L643-L655"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "HPF: high-pass sweep on the mix, while the key is held (MENU > FX LATCH ON: each press toggles it).",
    "short_label": "HIGH-PASS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "3-21",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L3-L21"
     }
    ]
   },
   {
    "mode": "fx_locked",
    "gesture": "press",
    "action": "HPF: high-pass sweep on the mix, while the key is held (MENU > FX LATCH ON: each press toggles it).",
    "short_label": "HIGH-PASS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "3-21",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L3-L21"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Solos track 5 while held.",
    "short_label": "SOLO T5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "520-523",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L520-L523"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "With a melodic track selected: sets the root to C on every melodic track. With a DRUM track selected only that drum track's root changes, which you don't hear.",
    "short_label": "ROOT C",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1775-1793",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1775-L1793"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "553",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L553"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Nothing in the EDIT layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "76",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L76"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "New random steps. No undo.",
    "short_label": "RANDOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_tools.c",
      "lines": "3-12",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_tools.c#L3-L12"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_tools.c",
      "lines": "14-15",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_tools.c#L14-L15"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "323-343",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L323-L343"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press_while_holding:button_rec",
    "action": "Nothing in the REC layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_save",
    "gesture": "press_while_holding:button_save",
    "action": "Stores the music now into section A of the project (works while playing; reaches flash when you stop).",
    "short_label": "STORE A",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "405-437",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L405-L437"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "400-404",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L400-L404"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/song_main.c",
      "lines": "185-201",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L185-L201"
     }
    ]
   },
   {
    "mode": "layer_macro",
    "gesture": "press_while_holding:button_lfo",
    "action": "Nothing in the LFO layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Types IJK phone-style (another tap inside 0.8 s moves on to the next one); in 123 mode one digit or symbol per key.",
    "short_label": "TYPE IJK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "12-19",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L12-L19"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "240-274",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L240-L274"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "Any key cancels calibration and keeps the old table.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2331-2332",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2331-L2332"
     }
    ]
   }
  ],
  "key_cs4": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays C#4 with the octave and track transpose applied; on a POLY melodic track, CHORD can expand it to a voiced or strummed chord, which also feeds the arpeggiator.",
    "short_label": "C#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-286",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L286"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "781-845",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L781-L845"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/voice.c",
      "lines": "502-524",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/voice.c#L502-L524"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With KEY MODE (QUANT) WHITE: silent. With SNAP or SEQ: plays, rounded down into the scale. The setting is shared by every melodic track, so it applies on every page.",
    "short_label": "OFF-SCALE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     }
    ]
   },
   {
    "mode": "drum_track",
    "gesture": "press",
    "action": "Strikes the rim sound (General MIDI drum note 37 at octave 0; OCT moves the map).",
    "short_label": "RIM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "469-473",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L469-L473"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "84-93",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L84-L93"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "94",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L94"
     }
    ]
   },
   {
    "mode": "arp_trns",
    "gesture": "press",
    "action": "In ARP TRNS, plays no note: sets the sequence shift from C4 to the mapped key before track transpose; WHITE ignores black keys and the shift stays after release. With CHORD on a POLY track, each generated tone updates the shift, so the last tone sets it.",
    "short_label": "TRANSPOSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "695-711",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L695-L711"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-240",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L240"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "770-805",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L770-L805"
     }
    ]
   },
   {
    "mode": "step_rec",
    "gesture": "press",
    "action": "Writes the played note or CHORD result into the cursor step, up to four notes; MONO keeps the last note. Releasing all keys completes the entry and advances the cursor.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1386-1445",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1386-L1445"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1351-1385",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1351-L1385"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Selects drum lane 4 (c.hat) and plays it.",
    "short_label": "C.HAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "582-616",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L582-L616"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "866-923",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L866-L923"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "145",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L145"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Mutes track 4 while held (not saved).",
    "short_label": "MUTE T4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     }
    ]
   },
   {
    "mode": "fx_locked",
    "gesture": "press",
    "action": "Mutes track 4 while held (not saved).",
    "short_label": "MUTE T4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Mutes or unmutes track 4 (stays; saved with the project and in scenes).",
    "short_label": "MUTE T4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "520-523",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L520-L523"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "With a melodic track selected: sets the root to C# on every melodic track. With a DRUM track selected only that drum track's root changes, which you don't hear.",
    "short_label": "ROOT C#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1775-1793",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1775-L1793"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "553",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L553"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "On a DRUM track: mutes or unmutes kit sound 4 (c.hat); saved with the section. Other engines: nothing.",
    "short_label": "MUTE C.HAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "561-562",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L561-L562"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "61-63",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L61-L63"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "111",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L111"
     },
     {
      "kind": "doc",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "docs/MANUAL.md",
      "lines": "332",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/docs/MANUAL.md?plain=1#L332"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "DRUM: picks lane 4 (c.hat) for the lane tools.",
    "short_label": "C.HAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press_while_holding:button_rec",
    "action": "Nothing in the REC layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_save",
    "gesture": "press_while_holding:button_save",
    "action": "Nothing in the SAVE layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_macro",
    "gesture": "press_while_holding:button_lfo",
    "action": "Nothing in the LFO layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Deletes the character before the cursor (repeats while held).",
    "short_label": "DELETE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "64-74",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L64-L74"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "12-19",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L12-L19"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "Any key cancels calibration and keeps the old table.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2331-2332",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2331-L2332"
     }
    ]
   }
  ],
  "key_d4": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays D4 with the octave and track transpose applied; on a POLY melodic track, CHORD can expand it to a voiced or strummed chord, which also feeds the arpeggiator.",
    "short_label": "D4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-286",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L286"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "781-845",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L781-L845"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/voice.c",
      "lines": "502-524",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/voice.c#L502-L524"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With KEY MODE (QUANT) WHITE: the white keys walk the scale with C4 as the root, one scale note per key, on every page.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     }
    ]
   },
   {
    "mode": "drum_track",
    "gesture": "press",
    "action": "Strikes the snare sound (General MIDI drum note 38 at octave 0; OCT moves the map).",
    "short_label": "SNARE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "469-473",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L469-L473"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "84-93",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L84-L93"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "94",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L94"
     }
    ]
   },
   {
    "mode": "arp_trns",
    "gesture": "press",
    "action": "In ARP TRNS, plays no note: sets the sequence shift from C4 to the mapped key before track transpose; WHITE ignores black keys and the shift stays after release. With CHORD on a POLY track, each generated tone updates the shift, so the last tone sets it.",
    "short_label": "TRANSPOSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "695-711",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L695-L711"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-240",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L240"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "770-805",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L770-L805"
     }
    ]
   },
   {
    "mode": "step_rec",
    "gesture": "press",
    "action": "Writes the played note or CHORD result into the cursor step, up to four notes; MONO keeps the last note. Releasing all keys completes the entry and advances the cursor.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1386-1445",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1386-L1445"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1351-1385",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1351-L1385"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Step 6 of the page shown (steps 6, 22, 38, 54 on pages 1-4): adds the selected lane's hit there, or takes it away when you let go (unless you held it for a lock); the cursor moves there.",
    "short_label": "STEP 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "582-616",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L582-L616"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "643-655",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L643-L655"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "OCT-: every voice an octave down, while the key is held (MENU > FX LATCH ON: each press toggles it). Comes in on the next 1/16 while playing; with REC armed and playing it is recorded into the section's punch-in lane.",
    "short_label": "NOTES OCT-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/pfx.c",
      "lines": "3-20",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/pfx.c#L3-L20"
     }
    ]
   },
   {
    "mode": "fx_locked",
    "gesture": "press",
    "action": "OCT-: every voice an octave down, while the key is held (MENU > FX LATCH ON: each press toggles it). Comes in on the next 1/16 while playing; with REC armed and playing it is recorded into the section's punch-in lane.",
    "short_label": "NOTES OCT-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/pfx.c",
      "lines": "3-20",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/pfx.c#L3-L20"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Solos track 6 while held.",
    "short_label": "SOLO T6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "520-523",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L520-L523"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "With a melodic track selected: sets the root to D on every melodic track. With a DRUM track selected only that drum track's root changes, which you don't hear.",
    "short_label": "ROOT D",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1775-1793",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1775-L1793"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "553",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L553"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Nothing in the EDIT layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "76",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L76"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "Changes the pattern a little each press (COOKED 1, 2, ...). No undo.",
    "short_label": "COOK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_tools.c",
      "lines": "3-12",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_tools.c#L3-L12"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_tools.c",
      "lines": "14-15",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_tools.c#L14-L15"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "323-343",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L323-L343"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press_while_holding:button_rec",
    "action": "Nothing in the REC layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_save",
    "gesture": "press_while_holding:button_save",
    "action": "Stores the music now into section B of the project (works while playing; reaches flash when you stop).",
    "short_label": "STORE B",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "405-437",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L405-L437"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "400-404",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L400-L404"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/song_main.c",
      "lines": "185-201",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L185-L201"
     }
    ]
   },
   {
    "mode": "layer_macro",
    "gesture": "press_while_holding:button_lfo",
    "action": "Nothing in the LFO layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Types LM phone-style (another tap inside 0.8 s moves on to the next one); in 123 mode one digit or symbol per key.",
    "short_label": "TYPE LM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "12-19",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L12-L19"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "240-274",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L240-L274"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "Any key cancels calibration and keeps the old table.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2331-2332",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2331-L2332"
     }
    ]
   }
  ],
  "key_ds4": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays D#4 with the octave and track transpose applied; on a POLY melodic track, CHORD can expand it to a voiced or strummed chord, which also feeds the arpeggiator.",
    "short_label": "D#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-286",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L286"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "781-845",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L781-L845"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/voice.c",
      "lines": "502-524",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/voice.c#L502-L524"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With KEY MODE (QUANT) WHITE: silent. With SNAP or SEQ: plays, rounded down into the scale. The setting is shared by every melodic track, so it applies on every page.",
    "short_label": "OFF-SCALE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     }
    ]
   },
   {
    "mode": "drum_track",
    "gesture": "press",
    "action": "Strikes the clap sound (General MIDI drum note 39 at octave 0; OCT moves the map).",
    "short_label": "CLAP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "469-473",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L469-L473"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "84-93",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L84-L93"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "94",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L94"
     }
    ]
   },
   {
    "mode": "arp_trns",
    "gesture": "press",
    "action": "In ARP TRNS, plays no note: sets the sequence shift from C4 to the mapped key before track transpose; WHITE ignores black keys and the shift stays after release. With CHORD on a POLY track, each generated tone updates the shift, so the last tone sets it.",
    "short_label": "TRANSPOSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "695-711",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L695-L711"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-240",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L240"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "770-805",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L770-L805"
     }
    ]
   },
   {
    "mode": "step_rec",
    "gesture": "press",
    "action": "Writes the played note or CHORD result into the cursor step, up to four notes; MONO keeps the last note. Releasing all keys completes the entry and advances the cursor.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1386-1445",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1386-L1445"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1351-1385",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1351-L1385"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Selects drum lane 5 (o.hat) and plays it.",
    "short_label": "O.HAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "582-616",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L582-L616"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "866-923",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L866-L923"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "145",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L145"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Mutes track 5 while held (not saved).",
    "short_label": "MUTE T5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     }
    ]
   },
   {
    "mode": "fx_locked",
    "gesture": "press",
    "action": "Mutes track 5 while held (not saved).",
    "short_label": "MUTE T5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Mutes or unmutes track 5 (stays; saved with the project and in scenes).",
    "short_label": "MUTE T5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "520-523",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L520-L523"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "With a melodic track selected: sets the root to D# on every melodic track. With a DRUM track selected only that drum track's root changes, which you don't hear.",
    "short_label": "ROOT D#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1775-1793",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1775-L1793"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "553",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L553"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "On a DRUM track: mutes or unmutes kit sound 5 (o.hat); saved with the section. Other engines: nothing.",
    "short_label": "MUTE O.HAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "561-562",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L561-L562"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "61-63",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L61-L63"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "111",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L111"
     },
     {
      "kind": "doc",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "docs/MANUAL.md",
      "lines": "332",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/docs/MANUAL.md?plain=1#L332"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "DRUM: picks lane 5 (o.hat) for the lane tools.",
    "short_label": "O.HAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press_while_holding:button_rec",
    "action": "Nothing in the REC layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_save",
    "gesture": "press_while_holding:button_save",
    "action": "Nothing in the SAVE layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_macro",
    "gesture": "press_while_holding:button_lfo",
    "action": "Nothing in the LFO layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Switches the white keys between letters and digits/symbols.",
    "short_label": "ABC/123",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "64-74",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L64-L74"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "12-19",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L12-L19"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "Any key cancels calibration and keeps the old table.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2331-2332",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2331-L2332"
     }
    ]
   }
  ],
  "key_e4": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays E4 with the octave and track transpose applied; on a POLY melodic track, CHORD can expand it to a voiced or strummed chord, which also feeds the arpeggiator.",
    "short_label": "E4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-286",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L286"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "781-845",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L781-L845"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/voice.c",
      "lines": "502-524",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/voice.c#L502-L524"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With KEY MODE (QUANT) WHITE: the white keys walk the scale with C4 as the root, one scale note per key, on every page.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     }
    ]
   },
   {
    "mode": "drum_track",
    "gesture": "press",
    "action": "Strikes the snare sound, +2 semitones (General MIDI drum note 40 at octave 0; OCT moves the map).",
    "short_label": "SNARE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "469-473",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L469-L473"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "84-93",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L84-L93"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "94",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L94"
     }
    ]
   },
   {
    "mode": "arp_trns",
    "gesture": "press",
    "action": "In ARP TRNS, plays no note: sets the sequence shift from C4 to the mapped key before track transpose; WHITE ignores black keys and the shift stays after release. With CHORD on a POLY track, each generated tone updates the shift, so the last tone sets it.",
    "short_label": "TRANSPOSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "695-711",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L695-L711"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-240",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L240"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "770-805",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L770-L805"
     }
    ]
   },
   {
    "mode": "step_rec",
    "gesture": "press",
    "action": "Writes the played note or CHORD result into the cursor step, up to four notes; MONO keeps the last note. Releasing all keys completes the entry and advances the cursor.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1386-1445",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1386-L1445"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1351-1385",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1351-L1385"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Step 7 of the page shown (steps 7, 23, 39, 55 on pages 1-4): adds the selected lane's hit there, or takes it away when you let go (unless you held it for a lock); the cursor moves there.",
    "short_label": "STEP 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "582-616",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L582-L616"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "643-655",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L643-L655"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "OCT+: every voice an octave up, while the key is held (MENU > FX LATCH ON: each press toggles it). Comes in on the next 1/16 while playing; with REC armed and playing it is recorded into the section's punch-in lane.",
    "short_label": "NOTES OCT+",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/pfx.c",
      "lines": "3-20",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/pfx.c#L3-L20"
     }
    ]
   },
   {
    "mode": "fx_locked",
    "gesture": "press",
    "action": "OCT+: every voice an octave up, while the key is held (MENU > FX LATCH ON: each press toggles it). Comes in on the next 1/16 while playing; with REC armed and playing it is recorded into the section's punch-in lane.",
    "short_label": "NOTES OCT+",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/pfx.c",
      "lines": "3-20",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/pfx.c#L3-L20"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Unmutes every track and drum group.",
    "short_label": "UNMUTE ALL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "520-523",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L520-L523"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "With a melodic track selected: sets the root to E on every melodic track. With a DRUM track selected only that drum track's root changes, which you don't hear.",
    "short_label": "ROOT E",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1775-1793",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1775-L1793"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "553",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L553"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Nothing in the EDIT layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "76",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L76"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "DRUM tracks only: a new beat. No undo.",
    "short_label": "BEAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_tools.c",
      "lines": "3-12",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_tools.c#L3-L12"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_tools.c",
      "lines": "14-15",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_tools.c#L14-L15"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "323-343",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L323-L343"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press_while_holding:button_rec",
    "action": "Nothing in the REC layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_save",
    "gesture": "press_while_holding:button_save",
    "action": "Stores the music now into section C of the project (works while playing; reaches flash when you stop).",
    "short_label": "STORE C",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "405-437",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L405-L437"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "400-404",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L400-L404"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/song_main.c",
      "lines": "185-201",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L185-L201"
     }
    ]
   },
   {
    "mode": "layer_macro",
    "gesture": "press_while_holding:button_lfo",
    "action": "Nothing in the LFO layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Types NO phone-style (another tap inside 0.8 s moves on to the next one); in 123 mode one digit or symbol per key.",
    "short_label": "TYPE NO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "12-19",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L12-L19"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "240-274",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L240-L274"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "Any key cancels calibration and keeps the old table.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2331-2332",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2331-L2332"
     }
    ]
   }
  ],
  "key_f4": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays F4 with the octave and track transpose applied; on a POLY melodic track, CHORD can expand it to a voiced or strummed chord, which also feeds the arpeggiator.",
    "short_label": "F4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-286",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L286"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "781-845",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L781-L845"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/voice.c",
      "lines": "502-524",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/voice.c#L502-L524"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With KEY MODE (QUANT) WHITE: the white keys walk the scale with C4 as the root, one scale note per key, on every page.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     }
    ]
   },
   {
    "mode": "drum_track",
    "gesture": "press",
    "action": "Strikes the tom sound, -7 semitones (General MIDI drum note 41 at octave 0; OCT moves the map).",
    "short_label": "TOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "469-473",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L469-L473"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "84-93",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L84-L93"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "94",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L94"
     }
    ]
   },
   {
    "mode": "arp_trns",
    "gesture": "press",
    "action": "In ARP TRNS, plays no note: sets the sequence shift from C4 to the mapped key before track transpose; WHITE ignores black keys and the shift stays after release. With CHORD on a POLY track, each generated tone updates the shift, so the last tone sets it.",
    "short_label": "TRANSPOSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "695-711",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L695-L711"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-240",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L240"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "770-805",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L770-L805"
     }
    ]
   },
   {
    "mode": "step_rec",
    "gesture": "press",
    "action": "Writes the played note or CHORD result into the cursor step, up to four notes; MONO keeps the last note. Releasing all keys completes the entry and advances the cursor.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1386-1445",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1386-L1445"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1351-1385",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1351-L1385"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Step 8 of the page shown (steps 8, 24, 40, 56 on pages 1-4): adds the selected lane's hit there, or takes it away when you let go (unless you held it for a lock); the cursor moves there.",
    "short_label": "STEP 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "582-616",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L582-L616"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "643-655",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L643-L655"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "1/2 TEMPO: the sequencer at half speed, while the key is held (MENU > FX LATCH ON: each press toggles it). Comes in on the next 1/16 while playing; with REC armed and playing it is recorded into the section's punch-in lane.",
    "short_label": "HALF TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/pfx.c",
      "lines": "3-20",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/pfx.c#L3-L20"
     }
    ]
   },
   {
    "mode": "fx_locked",
    "gesture": "press",
    "action": "1/2 TEMPO: the sequencer at half speed, while the key is held (MENU > FX LATCH ON: each press toggles it). Comes in on the next 1/16 while playing; with REC armed and playing it is recorded into the section's punch-in lane.",
    "short_label": "HALF TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/pfx.c",
      "lines": "3-20",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/pfx.c#L3-L20"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Tap tempo: from the third tap the tempo follows your taps (internal clock only).",
    "short_label": "TAP TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "520-523",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L520-L523"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "299-320",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L299-L320"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "With a melodic track selected: sets the root to F on every melodic track. With a DRUM track selected only that drum track's root changes, which you don't hear.",
    "short_label": "ROOT F",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1775-1793",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1775-L1793"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "553",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L553"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Nothing in the EDIT layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "76",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L76"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "Clears the track's automation and its locks but keeps the steps. No undo.",
    "short_label": "CLR AUTO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_tools.c",
      "lines": "3-12",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_tools.c#L3-L12"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_tools.c",
      "lines": "14-15",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_tools.c#L14-L15"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "323-343",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L323-L343"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press_while_holding:button_rec",
    "action": "Nothing in the REC layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_save",
    "gesture": "press_while_holding:button_save",
    "action": "Stores the music now into section D of the project (works while playing; reaches flash when you stop).",
    "short_label": "STORE D",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "405-437",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L405-L437"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "400-404",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L400-L404"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/song_main.c",
      "lines": "185-201",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L185-L201"
     }
    ]
   },
   {
    "mode": "layer_macro",
    "gesture": "press_while_holding:button_lfo",
    "action": "Nothing in the LFO layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Types PQ phone-style (another tap inside 0.8 s moves on to the next one); in 123 mode one digit or symbol per key.",
    "short_label": "TYPE PQ",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "12-19",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L12-L19"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "240-274",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L240-L274"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "Any key cancels calibration and keeps the old table.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2331-2332",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2331-L2332"
     }
    ]
   }
  ],
  "key_fs4": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays F#4 with the octave and track transpose applied; on a POLY melodic track, CHORD can expand it to a voiced or strummed chord, which also feeds the arpeggiator.",
    "short_label": "F#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-286",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L286"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "781-845",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L781-L845"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/voice.c",
      "lines": "502-524",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/voice.c#L502-L524"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With KEY MODE (QUANT) WHITE: silent. With SNAP or SEQ: plays, rounded down into the scale. The setting is shared by every melodic track, so it applies on every page.",
    "short_label": "OFF-SCALE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     }
    ]
   },
   {
    "mode": "drum_track",
    "gesture": "press",
    "action": "Strikes the c.hat sound (General MIDI drum note 42 at octave 0; OCT moves the map).",
    "short_label": "C.HAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "469-473",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L469-L473"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "84-93",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L84-L93"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "94",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L94"
     }
    ]
   },
   {
    "mode": "arp_trns",
    "gesture": "press",
    "action": "In ARP TRNS, plays no note: sets the sequence shift from C4 to the mapped key before track transpose; WHITE ignores black keys and the shift stays after release. With CHORD on a POLY track, each generated tone updates the shift, so the last tone sets it.",
    "short_label": "TRANSPOSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "695-711",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L695-L711"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-240",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L240"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "770-805",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L770-L805"
     }
    ]
   },
   {
    "mode": "step_rec",
    "gesture": "press",
    "action": "Writes the played note or CHORD result into the cursor step, up to four notes; MONO keeps the last note. Releasing all keys completes the entry and advances the cursor.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1386-1445",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1386-L1445"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1351-1385",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1351-L1385"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Selects drum lane 6 (tom) and plays it.",
    "short_label": "TOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "582-616",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L582-L616"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "866-923",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L866-L923"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "145",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L145"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Mutes track 6 while held (not saved).",
    "short_label": "MUTE T6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     }
    ]
   },
   {
    "mode": "fx_locked",
    "gesture": "press",
    "action": "Mutes track 6 while held (not saved).",
    "short_label": "MUTE T6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Mutes or unmutes track 6 (stays; saved with the project and in scenes).",
    "short_label": "MUTE T6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "520-523",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L520-L523"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "With a melodic track selected: sets the root to F# on every melodic track. With a DRUM track selected only that drum track's root changes, which you don't hear.",
    "short_label": "ROOT F#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1775-1793",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1775-L1793"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "553",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L553"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "On a DRUM track: mutes or unmutes kit sound 6 (tom); saved with the section. Other engines: nothing.",
    "short_label": "MUTE TOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "561-562",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L561-L562"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "61-63",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L61-L63"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "111",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L111"
     },
     {
      "kind": "doc",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "docs/MANUAL.md",
      "lines": "332",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/docs/MANUAL.md?plain=1#L332"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "DRUM: picks lane 6 (tom) for the lane tools.",
    "short_label": "TOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press_while_holding:button_rec",
    "action": "Nothing in the REC layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_save",
    "gesture": "press_while_holding:button_save",
    "action": "Nothing in the SAVE layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_macro",
    "gesture": "press_while_holding:button_lfo",
    "action": "Nothing in the LFO layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Moves the text cursor left (repeats while held).",
    "short_label": "CURSOR <",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "64-74",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L64-L74"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "12-19",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L12-L19"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "Any key cancels calibration and keeps the old table.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2331-2332",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2331-L2332"
     }
    ]
   }
  ],
  "key_g4": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays G4 with the octave and track transpose applied; on a POLY melodic track, CHORD can expand it to a voiced or strummed chord, which also feeds the arpeggiator.",
    "short_label": "G4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-286",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L286"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "781-845",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L781-L845"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/voice.c",
      "lines": "502-524",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/voice.c#L502-L524"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With KEY MODE (QUANT) WHITE: the white keys walk the scale with C4 as the root, one scale note per key, on every page.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     }
    ]
   },
   {
    "mode": "drum_track",
    "gesture": "press",
    "action": "Strikes the tom sound, -4 semitones (General MIDI drum note 43 at octave 0; OCT moves the map).",
    "short_label": "TOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "469-473",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L469-L473"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "84-93",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L84-L93"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "94",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L94"
     }
    ]
   },
   {
    "mode": "arp_trns",
    "gesture": "press",
    "action": "In ARP TRNS, plays no note: sets the sequence shift from C4 to the mapped key before track transpose; WHITE ignores black keys and the shift stays after release. With CHORD on a POLY track, each generated tone updates the shift, so the last tone sets it.",
    "short_label": "TRANSPOSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "695-711",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L695-L711"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-240",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L240"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "770-805",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L770-L805"
     }
    ]
   },
   {
    "mode": "step_rec",
    "gesture": "press",
    "action": "Writes the played note or CHORD result into the cursor step, up to four notes; MONO keeps the last note. Releasing all keys completes the entry and advances the cursor.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1386-1445",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1386-L1445"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1351-1385",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1351-L1385"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Step 9 of the page shown (steps 9, 25, 41, 57 on pages 1-4): adds the selected lane's hit there, or takes it away when you let go (unless you held it for a lock); the cursor moves there.",
    "short_label": "STEP 9",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "582-616",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L582-L616"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "643-655",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L643-L655"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "DEC-: short, plucky decays, while the key is held (MENU > FX LATCH ON: each press toggles it). Comes in on the next 1/16 while playing; with REC armed and playing it is recorded into the section's punch-in lane.",
    "short_label": "SHORT DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/pfx.c",
      "lines": "3-20",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/pfx.c#L3-L20"
     }
    ]
   },
   {
    "mode": "fx_locked",
    "gesture": "press",
    "action": "DEC-: short, plucky decays, while the key is held (MENU > FX LATCH ON: each press toggles it). Comes in on the next 1/16 while playing; with REC armed and playing it is recorded into the section's punch-in lane.",
    "short_label": "SHORT DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/pfx.c",
      "lines": "3-20",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/pfx.c#L3-L20"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "UNDO the last big change, including generation, STRETCH, clears, INIT, RECALL and project LOAD; press again to redo. Section jumps and project switches set no undo point. Unavailable during song playback; lost at power-off. After GEN, this restores the live music but leaves its stored sections and arrangement unchanged.",
    "short_label": "UNDO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1196",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1196"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1221",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1221"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "358",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L358"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/gen.c",
      "lines": "1354-1367",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/gen.c#L1354-L1367"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/song_main.c",
      "lines": "140-180",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L140-L180"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/song_main.c",
      "lines": "306-352",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L306-L352"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "520-523",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L520-L523"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/gen.c",
      "lines": "938-944",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/gen.c#L938-L944"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/gen.c",
      "lines": "1038-1058",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/gen.c#L1038-L1058"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/project.c",
      "lines": "1838-1856",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/project.c#L1838-L1856"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/project.c",
      "lines": "1563-1574",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/project.c#L1563-L1574"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/song_main.c",
      "lines": "185-201",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L185-L201"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/song_main.c",
      "lines": "409-421",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L409-L421"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "With a melodic track selected: sets the root to G on every melodic track. With a DRUM track selected only that drum track's root changes, which you don't hear.",
    "short_label": "ROOT G",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1775-1793",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1775-L1793"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "553",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L553"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Nothing in the EDIT layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "76",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L76"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "DRUM only: clears the selected lane. No undo.",
    "short_label": "LANE CLEAR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_tools.c",
      "lines": "3-12",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_tools.c#L3-L12"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_tools.c",
      "lines": "14-15",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_tools.c#L14-L15"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "323-343",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L323-L343"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press_while_holding:button_rec",
    "action": "Nothing in the REC layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_save",
    "gesture": "press_while_holding:button_save",
    "action": "Nothing in the SAVE layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "405-437",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L405-L437"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "400-404",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L400-L404"
     }
    ]
   },
   {
    "mode": "layer_macro",
    "gesture": "press_while_holding:button_lfo",
    "action": "Nothing in the LFO layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Types RS phone-style (another tap inside 0.8 s moves on to the next one); in 123 mode one digit or symbol per key.",
    "short_label": "TYPE RS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "12-19",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L12-L19"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "240-274",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L240-L274"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "Any key cancels calibration and keeps the old table.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2331-2332",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2331-L2332"
     }
    ]
   }
  ],
  "key_gs4": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays G#4 with the octave and track transpose applied; on a POLY melodic track, CHORD can expand it to a voiced or strummed chord, which also feeds the arpeggiator.",
    "short_label": "G#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-286",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L286"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "781-845",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L781-L845"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/voice.c",
      "lines": "502-524",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/voice.c#L502-L524"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With KEY MODE (QUANT) WHITE: silent. With SNAP or SEQ: plays, rounded down into the scale. The setting is shared by every melodic track, so it applies on every page.",
    "short_label": "OFF-SCALE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     }
    ]
   },
   {
    "mode": "drum_track",
    "gesture": "press",
    "action": "Strikes the c.hat sound, -2 semitones (General MIDI drum note 44 at octave 0; OCT moves the map).",
    "short_label": "C.HAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "469-473",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L469-L473"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "84-93",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L84-L93"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "94",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L94"
     }
    ]
   },
   {
    "mode": "arp_trns",
    "gesture": "press",
    "action": "In ARP TRNS, plays no note: sets the sequence shift from C4 to the mapped key before track transpose; WHITE ignores black keys and the shift stays after release. With CHORD on a POLY track, each generated tone updates the shift, so the last tone sets it.",
    "short_label": "TRANSPOSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "695-711",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L695-L711"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-240",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L240"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "770-805",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L770-L805"
     }
    ]
   },
   {
    "mode": "step_rec",
    "gesture": "press",
    "action": "Writes the played note or CHORD result into the cursor step, up to four notes; MONO keeps the last note. Releasing all keys completes the entry and advances the cursor.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1386-1445",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1386-L1445"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1351-1385",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1351-L1385"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Selects drum lane 7 (rim) and plays it.",
    "short_label": "RIM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "582-616",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L582-L616"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "866-923",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L866-L923"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "145",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L145"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Nothing in the FX layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     }
    ]
   },
   {
    "mode": "fx_locked",
    "gesture": "press",
    "action": "Nothing in the FX layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Mutes or unmutes the DRUM-X kick group (the kick) on every DRUM track.",
    "short_label": "MUTE KICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "520-523",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L520-L523"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "58-59",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L58-L59"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "With a melodic track selected: sets the root to G# on every melodic track. With a DRUM track selected only that drum track's root changes, which you don't hear.",
    "short_label": "ROOT G#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1775-1793",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1775-L1793"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "553",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L553"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "On a DRUM track: mutes or unmutes kit sound 7 (rim); saved with the section. Other engines: nothing.",
    "short_label": "MUTE RIM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "561-562",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L561-L562"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "61-63",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L61-L63"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "111",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L111"
     },
     {
      "kind": "doc",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "docs/MANUAL.md",
      "lines": "332",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/docs/MANUAL.md?plain=1#L332"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "DRUM: picks lane 7 (rim) for the lane tools.",
    "short_label": "RIM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press_while_holding:button_rec",
    "action": "Nothing in the REC layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_save",
    "gesture": "press_while_holding:button_save",
    "action": "Nothing in the SAVE layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_macro",
    "gesture": "press_while_holding:button_lfo",
    "action": "Nothing in the LFO layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Types a space.",
    "short_label": "SPACE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "64-74",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L64-L74"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "12-19",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L12-L19"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "Any key cancels calibration and keeps the old table.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2331-2332",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2331-L2332"
     }
    ]
   }
  ],
  "key_a4": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays A4 with the octave and track transpose applied; on a POLY melodic track, CHORD can expand it to a voiced or strummed chord, which also feeds the arpeggiator.",
    "short_label": "A4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-286",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L286"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "781-845",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L781-L845"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/voice.c",
      "lines": "502-524",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/voice.c#L502-L524"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With KEY MODE (QUANT) WHITE: the white keys walk the scale with C4 as the root, one scale note per key, on every page.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     }
    ]
   },
   {
    "mode": "drum_track",
    "gesture": "press",
    "action": "Strikes the tom sound (General MIDI drum note 45 at octave 0; OCT moves the map).",
    "short_label": "TOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "469-473",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L469-L473"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "84-93",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L84-L93"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "94",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L94"
     }
    ]
   },
   {
    "mode": "arp_trns",
    "gesture": "press",
    "action": "In ARP TRNS, plays no note: sets the sequence shift from C4 to the mapped key before track transpose; WHITE ignores black keys and the shift stays after release. With CHORD on a POLY track, each generated tone updates the shift, so the last tone sets it.",
    "short_label": "TRANSPOSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "695-711",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L695-L711"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-240",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L240"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "770-805",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L770-L805"
     }
    ]
   },
   {
    "mode": "step_rec",
    "gesture": "press",
    "action": "Writes the played note or CHORD result into the cursor step, up to four notes; MONO keeps the last note. Releasing all keys completes the entry and advances the cursor.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1386-1445",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1386-L1445"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1351-1385",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1351-L1385"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Step 10 of the page shown (steps 10, 26, 42, 58 on pages 1-4): adds the selected lane's hit there, or takes it away when you let go (unless you held it for a lock); the cursor moves there.",
    "short_label": "STEP 10",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "582-616",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L582-L616"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "643-655",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L643-L655"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "DEC+: long decays, while the key is held (MENU > FX LATCH ON: each press toggles it). Comes in on the next 1/16 while playing; with REC armed and playing it is recorded into the section's punch-in lane.",
    "short_label": "LONG DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/pfx.c",
      "lines": "3-20",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/pfx.c#L3-L20"
     }
    ]
   },
   {
    "mode": "fx_locked",
    "gesture": "press",
    "action": "DEC+: long decays, while the key is held (MENU > FX LATCH ON: each press toggles it). Comes in on the next 1/16 while playing; with REC armed and playing it is recorded into the section's punch-in lane.",
    "short_label": "LONG DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/pfx.c",
      "lines": "3-20",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/pfx.c#L3-L20"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Freezes or frees every MUTATE (as OCT- on the MUTATE page).",
    "short_label": "FREEZE MUT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "520-523",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L520-L523"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "With a melodic track selected: sets the root to A on every melodic track. With a DRUM track selected only that drum track's root changes, which you don't hear.",
    "short_label": "ROOT A",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1775-1793",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1775-L1793"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "553",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L553"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Nothing in the EDIT layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "76",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L76"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "DRUM only: reverses the selected lane. No undo.",
    "short_label": "LANE REV",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_tools.c",
      "lines": "3-12",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_tools.c#L3-L12"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_tools.c",
      "lines": "14-15",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_tools.c#L14-L15"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "323-343",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L323-L343"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press_while_holding:button_rec",
    "action": "Nothing in the REC layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_save",
    "gesture": "press_while_holding:button_save",
    "action": "Nothing in the SAVE layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "405-437",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L405-L437"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "400-404",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L400-L404"
     }
    ]
   },
   {
    "mode": "layer_macro",
    "gesture": "press_while_holding:button_lfo",
    "action": "Nothing in the LFO layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Types TU phone-style (another tap inside 0.8 s moves on to the next one); in 123 mode one digit or symbol per key.",
    "short_label": "TYPE TU",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "12-19",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L12-L19"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "240-274",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L240-L274"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "Any key cancels calibration and keeps the old table.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2331-2332",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2331-L2332"
     }
    ]
   }
  ],
  "key_as4": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays A#4 with the octave and track transpose applied; on a POLY melodic track, CHORD can expand it to a voiced or strummed chord, which also feeds the arpeggiator.",
    "short_label": "A#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-286",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L286"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "781-845",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L781-L845"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/voice.c",
      "lines": "502-524",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/voice.c#L502-L524"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With KEY MODE (QUANT) WHITE: silent. With SNAP or SEQ: plays, rounded down into the scale. The setting is shared by every melodic track, so it applies on every page.",
    "short_label": "OFF-SCALE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     }
    ]
   },
   {
    "mode": "drum_track",
    "gesture": "press",
    "action": "Strikes the o.hat sound (General MIDI drum note 46 at octave 0; OCT moves the map).",
    "short_label": "O.HAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "469-473",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L469-L473"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "84-93",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L84-L93"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "94",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L94"
     }
    ]
   },
   {
    "mode": "arp_trns",
    "gesture": "press",
    "action": "In ARP TRNS, plays no note: sets the sequence shift from C4 to the mapped key before track transpose; WHITE ignores black keys and the shift stays after release. With CHORD on a POLY track, each generated tone updates the shift, so the last tone sets it.",
    "short_label": "TRANSPOSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "695-711",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L695-L711"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-240",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L240"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "770-805",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L770-L805"
     }
    ]
   },
   {
    "mode": "step_rec",
    "gesture": "press",
    "action": "Writes the played note or CHORD result into the cursor step, up to four notes; MONO keeps the last note. Releasing all keys completes the entry and advances the cursor.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1386-1445",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1386-L1445"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1351-1385",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1351-L1385"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Selects drum lane 8 (bell) and plays it.",
    "short_label": "BELL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "582-616",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L582-L616"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "866-923",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L866-L923"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "145",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L145"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Cycles which tracks the note effects (D4-F5) apply to: every track (ALL), synths only (SYN) or drums only (DRM); the header shows the choice.",
    "short_label": "FX TARGET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "113-114",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L113-L114"
     }
    ]
   },
   {
    "mode": "fx_locked",
    "gesture": "press",
    "action": "Cycles which tracks the note effects (D4-F5) apply to: every track (ALL), synths only (SYN) or drums only (DRM); the header shows the choice.",
    "short_label": "FX TARGET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "113-114",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L113-L114"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Mutes or unmutes the DRUM-X snare group (snare and clap) on every DRUM track.",
    "short_label": "MUTE SNARE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "520-523",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L520-L523"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "58-59",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L58-L59"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "With a melodic track selected: sets the root to A# on every melodic track. With a DRUM track selected only that drum track's root changes, which you don't hear.",
    "short_label": "ROOT A#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1775-1793",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1775-L1793"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "553",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L553"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "On a DRUM track: mutes or unmutes kit sound 8 (bell); saved with the section. Other engines: nothing.",
    "short_label": "MUTE BELL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "561-562",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L561-L562"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "61-63",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L61-L63"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "111",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L111"
     },
     {
      "kind": "doc",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "docs/MANUAL.md",
      "lines": "332",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/docs/MANUAL.md?plain=1#L332"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "DRUM: picks lane 8 (bell) for the lane tools.",
    "short_label": "BELL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press_while_holding:button_rec",
    "action": "Nothing in the REC layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_save",
    "gesture": "press_while_holding:button_save",
    "action": "Nothing in the SAVE layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_macro",
    "gesture": "press_while_holding:button_lfo",
    "action": "Nothing in the LFO layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Moves the text cursor right (repeats while held).",
    "short_label": "CURSOR >",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "64-74",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L64-L74"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "12-19",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L12-L19"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "Any key cancels calibration and keeps the old table.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2331-2332",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2331-L2332"
     }
    ]
   }
  ],
  "key_b4": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays B4 with the octave and track transpose applied; on a POLY melodic track, CHORD can expand it to a voiced or strummed chord, which also feeds the arpeggiator.",
    "short_label": "B4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-286",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L286"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "781-845",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L781-L845"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/voice.c",
      "lines": "502-524",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/voice.c#L502-L524"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With KEY MODE (QUANT) WHITE: the white keys walk the scale with C4 as the root, one scale note per key, on every page.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     }
    ]
   },
   {
    "mode": "drum_track",
    "gesture": "press",
    "action": "Strikes the tom sound, +3 semitones (General MIDI drum note 47 at octave 0; OCT moves the map).",
    "short_label": "TOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "469-473",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L469-L473"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "84-93",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L84-L93"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "94",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L94"
     }
    ]
   },
   {
    "mode": "arp_trns",
    "gesture": "press",
    "action": "In ARP TRNS, plays no note: sets the sequence shift from C4 to the mapped key before track transpose; WHITE ignores black keys and the shift stays after release. With CHORD on a POLY track, each generated tone updates the shift, so the last tone sets it.",
    "short_label": "TRANSPOSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "695-711",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L695-L711"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-240",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L240"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "770-805",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L770-L805"
     }
    ]
   },
   {
    "mode": "step_rec",
    "gesture": "press",
    "action": "Writes the played note or CHORD result into the cursor step, up to four notes; MONO keeps the last note. Releasing all keys completes the entry and advances the cursor.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1386-1445",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1386-L1445"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1351-1385",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1351-L1385"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Step 11 of the page shown (steps 11, 27, 43, 59 on pages 1-4): adds the selected lane's hit there, or takes it away when you let go (unless you held it for a lock); the cursor moves there.",
    "short_label": "STEP 11",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "582-616",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L582-L616"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "643-655",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L643-L655"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "STUTTER 1/8: the last notes struck again every 1/8, while the key is held (MENU > FX LATCH ON: each press toggles it). Comes in on the next 1/16 while playing; with REC armed and playing it is recorded into the section's punch-in lane.",
    "short_label": "STUTTER 1/8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/pfx.c",
      "lines": "3-20",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/pfx.c#L3-L20"
     }
    ]
   },
   {
    "mode": "fx_locked",
    "gesture": "press",
    "action": "STUTTER 1/8: the last notes struck again every 1/8, while the key is held (MENU > FX LATCH ON: each press toggles it). Comes in on the next 1/16 while playing; with REC armed and playing it is recorded into the section's punch-in lane.",
    "short_label": "STUTTER 1/8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/pfx.c",
      "lines": "3-20",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/pfx.c#L3-L20"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Nothing in the GLO layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "520-523",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L520-L523"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "With a melodic track selected: sets the root to B on every melodic track. With a DRUM track selected only that drum track's root changes, which you don't hear.",
    "short_label": "ROOT B",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1775-1793",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1775-L1793"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "553",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L553"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Nothing in the EDIT layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "76",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L76"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "DRUM only: fills the selected lane. No undo.",
    "short_label": "LANE FILL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_tools.c",
      "lines": "3-12",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_tools.c#L3-L12"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_tools.c",
      "lines": "14-15",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_tools.c#L14-L15"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "323-343",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L323-L343"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press_while_holding:button_rec",
    "action": "Nothing in the REC layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_save",
    "gesture": "press_while_holding:button_save",
    "action": "Nothing in the SAVE layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "405-437",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L405-L437"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "400-404",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L400-L404"
     }
    ]
   },
   {
    "mode": "layer_macro",
    "gesture": "press_while_holding:button_lfo",
    "action": "Nothing in the LFO layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Types VW phone-style (another tap inside 0.8 s moves on to the next one); in 123 mode one digit or symbol per key.",
    "short_label": "TYPE VW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "12-19",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L12-L19"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "240-274",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L240-L274"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "Any key cancels calibration and keeps the old table.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2331-2332",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2331-L2332"
     }
    ]
   }
  ],
  "key_c5": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays C5 with the octave and track transpose applied; on a POLY melodic track, CHORD can expand it to a voiced or strummed chord, which also feeds the arpeggiator.",
    "short_label": "C5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-286",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L286"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "781-845",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L781-L845"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/voice.c",
      "lines": "502-524",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/voice.c#L502-L524"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With KEY MODE (QUANT) WHITE: the white keys walk the scale with C4 as the root, one scale note per key, on every page.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     }
    ]
   },
   {
    "mode": "drum_track",
    "gesture": "press",
    "action": "Strikes the tom sound, +5 semitones (General MIDI drum note 48 at octave 0; OCT moves the map).",
    "short_label": "TOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "469-473",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L469-L473"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "84-93",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L84-L93"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "94",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L94"
     }
    ]
   },
   {
    "mode": "arp_trns",
    "gesture": "press",
    "action": "In ARP TRNS, plays no note: sets the sequence shift from C4 to the mapped key before track transpose; WHITE ignores black keys and the shift stays after release. With CHORD on a POLY track, each generated tone updates the shift, so the last tone sets it.",
    "short_label": "TRANSPOSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "695-711",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L695-L711"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-240",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L240"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "770-805",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L770-L805"
     }
    ]
   },
   {
    "mode": "step_rec",
    "gesture": "press",
    "action": "Writes the played note or CHORD result into the cursor step, up to four notes; MONO keeps the last note. Releasing all keys completes the entry and advances the cursor.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1386-1445",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1386-L1445"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1351-1385",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1351-L1385"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Step 12 of the page shown (steps 12, 28, 44, 60 on pages 1-4): adds the selected lane's hit there, or takes it away when you let go (unless you held it for a lock); the cursor moves there.",
    "short_label": "STEP 12",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "582-616",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L582-L616"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "643-655",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L643-L655"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "STUTTER 1/16: the last notes struck again every 1/16, while the key is held (MENU > FX LATCH ON: each press toggles it). Comes in on the next 1/16 while playing; with REC armed and playing it is recorded into the section's punch-in lane.",
    "short_label": "STUTTER1/16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/pfx.c",
      "lines": "3-20",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/pfx.c#L3-L20"
     }
    ]
   },
   {
    "mode": "fx_locked",
    "gesture": "press",
    "action": "STUTTER 1/16: the last notes struck again every 1/16, while the key is held (MENU > FX LATCH ON: each press toggles it). Comes in on the next 1/16 while playing; with REC armed and playing it is recorded into the section's punch-in lane.",
    "short_label": "STUTTER1/16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/pfx.c",
      "lines": "3-20",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/pfx.c#L3-L20"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Nothing in the GLO layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "520-523",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L520-L523"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "With a melodic track selected: sets the root to C on every melodic track. With a DRUM track selected only that drum track's root changes, which you don't hear.",
    "short_label": "ROOT C",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1775-1793",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1775-L1793"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "553",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L553"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Nothing in the EDIT layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "76",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L76"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "DRUM only: randomises the selected lane. No undo.",
    "short_label": "LANE RANDOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_tools.c",
      "lines": "3-12",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_tools.c#L3-L12"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_tools.c",
      "lines": "14-15",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_tools.c#L14-L15"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "323-343",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L323-L343"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press_while_holding:button_rec",
    "action": "Nothing in the REC layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_save",
    "gesture": "press_while_holding:button_save",
    "action": "Nothing in the SAVE layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "405-437",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L405-L437"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "400-404",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L400-L404"
     }
    ]
   },
   {
    "mode": "layer_macro",
    "gesture": "press_while_holding:button_lfo",
    "action": "Nothing in the LFO layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Types XYZ phone-style (another tap inside 0.8 s moves on to the next one); in 123 mode one digit or symbol per key.",
    "short_label": "TYPE XYZ",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "12-19",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L12-L19"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "240-274",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L240-L274"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "Any key cancels calibration and keeps the old table.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2331-2332",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2331-L2332"
     }
    ]
   }
  ],
  "key_cs5": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays C#5 with the octave and track transpose applied; on a POLY melodic track, CHORD can expand it to a voiced or strummed chord, which also feeds the arpeggiator.",
    "short_label": "C#5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-286",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L286"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "781-845",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L781-L845"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/voice.c",
      "lines": "502-524",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/voice.c#L502-L524"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With KEY MODE (QUANT) WHITE: silent. With SNAP or SEQ: plays, rounded down into the scale. The setting is shared by every melodic track, so it applies on every page.",
    "short_label": "OFF-SCALE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     }
    ]
   },
   {
    "mode": "drum_track",
    "gesture": "press",
    "action": "Strikes the bell sound (General MIDI drum note 49 at octave 0; OCT moves the map).",
    "short_label": "BELL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "469-473",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L469-L473"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "84-93",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L84-L93"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "94",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L94"
     }
    ]
   },
   {
    "mode": "arp_trns",
    "gesture": "press",
    "action": "In ARP TRNS, plays no note: sets the sequence shift from C4 to the mapped key before track transpose; WHITE ignores black keys and the shift stays after release. With CHORD on a POLY track, each generated tone updates the shift, so the last tone sets it.",
    "short_label": "TRANSPOSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "695-711",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L695-L711"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-240",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L240"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "770-805",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L770-L805"
     }
    ]
   },
   {
    "mode": "step_rec",
    "gesture": "press",
    "action": "Writes the played note or CHORD result into the cursor step, up to four notes; MONO keeps the last note. Releasing all keys completes the entry and advances the cursor.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1386-1445",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1386-L1445"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1351-1385",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1351-L1385"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "hold",
    "action": "ACC: while held, the white step keys set or clear accents instead of hits.",
    "short_label": "ACCENT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "145",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L145"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "582-616",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L582-L616"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Nothing in the FX layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     }
    ]
   },
   {
    "mode": "fx_locked",
    "gesture": "press",
    "action": "Nothing in the FX layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Mutes or unmutes the DRUM-X hat group (closed and open hats) on every DRUM track.",
    "short_label": "MUTE HAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "520-523",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L520-L523"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "58-59",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L58-L59"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "With a melodic track selected: sets the root to C# on every melodic track. With a DRUM track selected only that drum track's root changes, which you don't hear.",
    "short_label": "ROOT C#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1775-1793",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1775-L1793"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "553",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L553"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Nothing in the EDIT layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "Nothing in SEQ TOOLS.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press_while_holding:button_rec",
    "action": "Nothing in the REC layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_save",
    "gesture": "press_while_holding:button_save",
    "action": "Nothing in the SAVE layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_macro",
    "gesture": "press_while_holding:button_lfo",
    "action": "Nothing in the LFO layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Deletes the character before the cursor (repeats while held).",
    "short_label": "DELETE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "64-74",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L64-L74"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "12-19",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L12-L19"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "Any key cancels calibration and keeps the old table.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2331-2332",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2331-L2332"
     }
    ]
   }
  ],
  "key_d5": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays D5 with the octave and track transpose applied; on a POLY melodic track, CHORD can expand it to a voiced or strummed chord, which also feeds the arpeggiator.",
    "short_label": "D5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-286",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L286"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "781-845",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L781-L845"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/voice.c",
      "lines": "502-524",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/voice.c#L502-L524"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With KEY MODE (QUANT) WHITE: the white keys walk the scale with C4 as the root, one scale note per key, on every page.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     }
    ]
   },
   {
    "mode": "drum_track",
    "gesture": "press",
    "action": "Strikes the tom sound, +8 semitones (General MIDI drum note 50 at octave 0; OCT moves the map).",
    "short_label": "TOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "469-473",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L469-L473"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "84-93",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L84-L93"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "94",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L94"
     }
    ]
   },
   {
    "mode": "arp_trns",
    "gesture": "press",
    "action": "In ARP TRNS, plays no note: sets the sequence shift from C4 to the mapped key before track transpose; WHITE ignores black keys and the shift stays after release. With CHORD on a POLY track, each generated tone updates the shift, so the last tone sets it.",
    "short_label": "TRANSPOSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "695-711",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L695-L711"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-240",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L240"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "770-805",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L770-L805"
     }
    ]
   },
   {
    "mode": "step_rec",
    "gesture": "press",
    "action": "Writes the played note or CHORD result into the cursor step, up to four notes; MONO keeps the last note. Releasing all keys completes the entry and advances the cursor.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1386-1445",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1386-L1445"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1351-1385",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1351-L1385"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Step 13 of the page shown (steps 13, 29, 45, 61 on pages 1-4): adds the selected lane's hit there, or takes it away when you let go (unless you held it for a lock); the cursor moves there.",
    "short_label": "STEP 13",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "582-616",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L582-L616"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "643-655",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L643-L655"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "ATK+: slow attacks (drums fade in too), while the key is held (MENU > FX LATCH ON: each press toggles it). Comes in on the next 1/16 while playing; with REC armed and playing it is recorded into the section's punch-in lane.",
    "short_label": "SLOW ATTACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/pfx.c",
      "lines": "3-20",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/pfx.c#L3-L20"
     }
    ]
   },
   {
    "mode": "fx_locked",
    "gesture": "press",
    "action": "ATK+: slow attacks (drums fade in too), while the key is held (MENU > FX LATCH ON: each press toggles it). Comes in on the next 1/16 while playing; with REC armed and playing it is recorded into the section's punch-in lane.",
    "short_label": "SLOW ATTACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/pfx.c",
      "lines": "3-20",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/pfx.c#L3-L20"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Nothing in the GLO layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "520-523",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L520-L523"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "With a melodic track selected: sets the root to D on every melodic track. With a DRUM track selected only that drum track's root changes, which you don't hear.",
    "short_label": "ROOT D",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1775-1793",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1775-L1793"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "553",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L553"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Nothing in the EDIT layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "76",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L76"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "Nothing in SEQ TOOLS.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_tools.c",
      "lines": "3-12",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_tools.c#L3-L12"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_tools.c",
      "lines": "14-15",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_tools.c#L14-L15"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "323-343",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L323-L343"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press_while_holding:button_rec",
    "action": "Nothing in the REC layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_save",
    "gesture": "press_while_holding:button_save",
    "action": "Switches what PLAY plays: the loop, or the song (the arrangement) from any page.",
    "short_label": "LOOP/SONG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "405-437",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L405-L437"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "400-404",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L400-L404"
     }
    ]
   },
   {
    "mode": "layer_macro",
    "gesture": "press_while_holding:button_lfo",
    "action": "Nothing in the LFO layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Types 123 phone-style (another tap inside 0.8 s moves on to the next one); in 123 mode one digit or symbol per key.",
    "short_label": "TYPE 123",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "12-19",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L12-L19"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "240-274",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L240-L274"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "Any key cancels calibration and keeps the old table.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2331-2332",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2331-L2332"
     }
    ]
   }
  ],
  "key_ds5": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays D#5 with the octave and track transpose applied; on a POLY melodic track, CHORD can expand it to a voiced or strummed chord, which also feeds the arpeggiator.",
    "short_label": "D#5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-286",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L286"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "781-845",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L781-L845"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/voice.c",
      "lines": "502-524",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/voice.c#L502-L524"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With KEY MODE (QUANT) WHITE: silent. With SNAP or SEQ: plays, rounded down into the scale. The setting is shared by every melodic track, so it applies on every page.",
    "short_label": "OFF-SCALE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     }
    ]
   },
   {
    "mode": "drum_track",
    "gesture": "press",
    "action": "Strikes the bell sound, -3 semitones (General MIDI drum note 51 at octave 0; OCT moves the map).",
    "short_label": "BELL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "469-473",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L469-L473"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "84-93",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L84-L93"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "94",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L94"
     }
    ]
   },
   {
    "mode": "arp_trns",
    "gesture": "press",
    "action": "In ARP TRNS, plays no note: sets the sequence shift from C4 to the mapped key before track transpose; WHITE ignores black keys and the shift stays after release. With CHORD on a POLY track, each generated tone updates the shift, so the last tone sets it.",
    "short_label": "TRANSPOSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "695-711",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L695-L711"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-240",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L240"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "770-805",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L770-L805"
     }
    ]
   },
   {
    "mode": "step_rec",
    "gesture": "press",
    "action": "Writes the played note or CHORD result into the cursor step, up to four notes; MONO keeps the last note. Releasing all keys completes the entry and advances the cursor.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1386-1445",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1386-L1445"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1351-1385",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1351-L1385"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Previous page of 16 steps (when the pattern is longer than 16).",
    "short_label": "PAGE <",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "145",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L145"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "558-565",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L558-L565"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Nothing in the FX layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     }
    ]
   },
   {
    "mode": "fx_locked",
    "gesture": "press",
    "action": "Nothing in the FX layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Mutes or unmutes the DRUM-X perc group (tom, rim and bell) on every DRUM track.",
    "short_label": "MUTE PERC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "520-523",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L520-L523"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "58-59",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L58-L59"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "With a melodic track selected: sets the root to D# on every melodic track. With a DRUM track selected only that drum track's root changes, which you don't hear.",
    "short_label": "ROOT D#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1775-1793",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1775-L1793"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "553",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L553"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Nothing in the EDIT layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "Nothing in SEQ TOOLS.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press_while_holding:button_rec",
    "action": "Nothing in the REC layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_save",
    "gesture": "press_while_holding:button_save",
    "action": "Nothing in the SAVE layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_macro",
    "gesture": "press_while_holding:button_lfo",
    "action": "Nothing in the LFO layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Switches the white keys between letters and digits/symbols.",
    "short_label": "ABC/123",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "64-74",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L64-L74"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "12-19",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L12-L19"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "Any key cancels calibration and keeps the old table.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2331-2332",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2331-L2332"
     }
    ]
   }
  ],
  "key_e5": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays E5 with the octave and track transpose applied; on a POLY melodic track, CHORD can expand it to a voiced or strummed chord, which also feeds the arpeggiator.",
    "short_label": "E5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-286",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L286"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "781-845",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L781-L845"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/voice.c",
      "lines": "502-524",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/voice.c#L502-L524"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With KEY MODE (QUANT) WHITE: the white keys walk the scale with C4 as the root, one scale note per key, on every page.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     }
    ]
   },
   {
    "mode": "drum_track",
    "gesture": "press",
    "action": "Strikes the bell sound, +2 semitones (General MIDI drum note 52 at octave 0; OCT moves the map).",
    "short_label": "BELL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "469-473",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L469-L473"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "84-93",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L84-L93"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "94",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L94"
     }
    ]
   },
   {
    "mode": "arp_trns",
    "gesture": "press",
    "action": "In ARP TRNS, plays no note: sets the sequence shift from C4 to the mapped key before track transpose; WHITE ignores black keys and the shift stays after release. With CHORD on a POLY track, each generated tone updates the shift, so the last tone sets it.",
    "short_label": "TRANSPOSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "695-711",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L695-L711"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-240",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L240"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "770-805",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L770-L805"
     }
    ]
   },
   {
    "mode": "step_rec",
    "gesture": "press",
    "action": "Writes the played note or CHORD result into the cursor step, up to four notes; MONO keeps the last note. Releasing all keys completes the entry and advances the cursor.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1386-1445",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1386-L1445"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1351-1385",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1351-L1385"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Step 14 of the page shown (steps 14, 30, 46, 62 on pages 1-4): adds the selected lane's hit there, or takes it away when you let go (unless you held it for a lock); the cursor moves there.",
    "short_label": "STEP 14",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "582-616",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L582-L616"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "643-655",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L643-L655"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "ARP: the notes the track struck last, one at a time at 1/16 over two octaves (a DRUM track gets a new fill each press), while the key is held (MENU > FX LATCH ON: each press toggles it). Comes in on the next 1/16 while playing; with REC armed and playing it is recorded into the section's punch-in lane.",
    "short_label": "ARP/FILL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/pfx.c",
      "lines": "3-20",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/pfx.c#L3-L20"
     }
    ]
   },
   {
    "mode": "fx_locked",
    "gesture": "press",
    "action": "ARP: the notes the track struck last, one at a time at 1/16 over two octaves (a DRUM track gets a new fill each press), while the key is held (MENU > FX LATCH ON: each press toggles it). Comes in on the next 1/16 while playing; with REC armed and playing it is recorded into the section's punch-in lane.",
    "short_label": "ARP/FILL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/pfx.c",
      "lines": "3-20",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/pfx.c#L3-L20"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Nothing in the GLO layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "520-523",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L520-L523"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "With a melodic track selected: sets the root to E on every melodic track. With a DRUM track selected only that drum track's root changes, which you don't hear.",
    "short_label": "ROOT E",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1775-1793",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1775-L1793"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "553",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L553"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Nothing in the EDIT layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "76",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L76"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "Nothing in SEQ TOOLS.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_tools.c",
      "lines": "3-12",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_tools.c#L3-L12"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_tools.c",
      "lines": "14-15",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_tools.c#L14-L15"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "323-343",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L323-L343"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press_while_holding:button_rec",
    "action": "Nothing in the REC layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_save",
    "gesture": "press_while_holding:button_save",
    "action": "SONG REC on or off: the sections you play live are written as the arrangement's rows (with a scene each), replacing them.",
    "short_label": "SONG REC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "405-437",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L405-L437"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "400-404",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L400-L404"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/song_main.c",
      "lines": "253-267",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L253-L267"
     }
    ]
   },
   {
    "mode": "layer_macro",
    "gesture": "press_while_holding:button_lfo",
    "action": "Nothing in the LFO layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Types 456 phone-style (another tap inside 0.8 s moves on to the next one); in 123 mode one digit or symbol per key.",
    "short_label": "TYPE 456",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "12-19",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L12-L19"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "240-274",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L240-L274"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "Any key cancels calibration and keeps the old table.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2331-2332",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2331-L2332"
     }
    ]
   }
  ],
  "key_f5": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays F5 with the octave and track transpose applied; on a POLY melodic track, CHORD can expand it to a voiced or strummed chord, which also feeds the arpeggiator.",
    "short_label": "F5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-286",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L286"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "781-845",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L781-L845"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/voice.c",
      "lines": "502-524",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/voice.c#L502-L524"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With KEY MODE (QUANT) WHITE: the white keys walk the scale with C4 as the root, one scale note per key, on every page.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     }
    ]
   },
   {
    "mode": "drum_track",
    "gesture": "press",
    "action": "Strikes the bell sound, +5 semitones (General MIDI drum note 53 at octave 0; OCT moves the map).",
    "short_label": "BELL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "469-473",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L469-L473"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "84-93",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L84-L93"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "94",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L94"
     }
    ]
   },
   {
    "mode": "arp_trns",
    "gesture": "press",
    "action": "In ARP TRNS, plays no note: sets the sequence shift from C4 to the mapped key before track transpose; WHITE ignores black keys and the shift stays after release. With CHORD on a POLY track, each generated tone updates the shift, so the last tone sets it.",
    "short_label": "TRANSPOSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "695-711",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L695-L711"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-240",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L240"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "770-805",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L770-L805"
     }
    ]
   },
   {
    "mode": "step_rec",
    "gesture": "press",
    "action": "Writes the played note or CHORD result into the cursor step, up to four notes; MONO keeps the last note. Releasing all keys completes the entry and advances the cursor.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1386-1445",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1386-L1445"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1351-1385",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1351-L1385"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Step 15 of the page shown (steps 15, 31, 47, 63 on pages 1-4): adds the selected lane's hit there, or takes it away when you let go (unless you held it for a lock); the cursor moves there.",
    "short_label": "STEP 15",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "582-616",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L582-L616"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "643-655",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L643-L655"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "RANDOM: notes jump an octave, fifth or fourth now and then, and the sequencer plays random steps, while the key is held (MENU > FX LATCH ON: each press toggles it). Comes in on the next 1/16 while playing; with REC armed and playing it is recorded into the section's punch-in lane.",
    "short_label": "RANDOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/pfx.c",
      "lines": "3-20",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/pfx.c#L3-L20"
     }
    ]
   },
   {
    "mode": "fx_locked",
    "gesture": "press",
    "action": "RANDOM: notes jump an octave, fifth or fourth now and then, and the sequencer plays random steps, while the key is held (MENU > FX LATCH ON: each press toggles it). Comes in on the next 1/16 while playing; with REC armed and playing it is recorded into the section's punch-in lane.",
    "short_label": "RANDOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/pfx.c",
      "lines": "3-20",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/pfx.c#L3-L20"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Nothing in the GLO layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "520-523",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L520-L523"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "With a melodic track selected: sets the root to F on every melodic track. With a DRUM track selected only that drum track's root changes, which you don't hear.",
    "short_label": "ROOT F",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1775-1793",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1775-L1793"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "553",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L553"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Nothing in the EDIT layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "76",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L76"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "Nothing in SEQ TOOLS.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_tools.c",
      "lines": "3-12",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_tools.c#L3-L12"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_tools.c",
      "lines": "14-15",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_tools.c#L14-L15"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "323-343",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L323-L343"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press_while_holding:button_rec",
    "action": "Nothing in the REC layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_save",
    "gesture": "press_while_holding:button_save",
    "action": "Nothing in the SAVE layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "405-437",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L405-L437"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "400-404",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L400-L404"
     }
    ]
   },
   {
    "mode": "layer_macro",
    "gesture": "press_while_holding:button_lfo",
    "action": "Nothing in the LFO layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Types 789 phone-style (another tap inside 0.8 s moves on to the next one); in 123 mode one digit or symbol per key.",
    "short_label": "TYPE 789",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "12-19",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L12-L19"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "240-274",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L240-L274"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "Any key cancels calibration and keeps the old table.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2331-2332",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2331-L2332"
     }
    ]
   }
  ],
  "key_fs5": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays F#5 with the octave and track transpose applied; on a POLY melodic track, CHORD can expand it to a voiced or strummed chord, which also feeds the arpeggiator.",
    "short_label": "F#5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-286",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L286"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "781-845",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L781-L845"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/voice.c",
      "lines": "502-524",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/voice.c#L502-L524"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With KEY MODE (QUANT) WHITE: silent. With SNAP or SEQ: plays, rounded down into the scale. The setting is shared by every melodic track, so it applies on every page.",
    "short_label": "OFF-SCALE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     }
    ]
   },
   {
    "mode": "drum_track",
    "gesture": "press",
    "action": "Strikes the c.hat sound, +5 semitones (General MIDI drum note 54 at octave 0; OCT moves the map).",
    "short_label": "C.HAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "469-473",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L469-L473"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "84-93",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L84-L93"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "94",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L94"
     }
    ]
   },
   {
    "mode": "arp_trns",
    "gesture": "press",
    "action": "In ARP TRNS, plays no note: sets the sequence shift from C4 to the mapped key before track transpose; WHITE ignores black keys and the shift stays after release. With CHORD on a POLY track, each generated tone updates the shift, so the last tone sets it.",
    "short_label": "TRANSPOSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "695-711",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L695-L711"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-240",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L240"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "770-805",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L770-L805"
     }
    ]
   },
   {
    "mode": "step_rec",
    "gesture": "press",
    "action": "Writes the played note or CHORD result into the cursor step, up to four notes; MONO keeps the last note. Releasing all keys completes the entry and advances the cursor.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1386-1445",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1386-L1445"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1351-1385",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1351-L1385"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Next page of 16 steps (when the pattern is longer than 16).",
    "short_label": "PAGE >",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "145",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L145"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "558-565",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L558-L565"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Nothing in the FX layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     }
    ]
   },
   {
    "mode": "fx_locked",
    "gesture": "press",
    "action": "Nothing in the FX layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/perform.c",
      "lines": "24-27",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/perform.c#L24-L27"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Nothing in the GLO layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "520-523",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L520-L523"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "With a melodic track selected: sets the root to F# on every melodic track. With a DRUM track selected only that drum track's root changes, which you don't hear.",
    "short_label": "ROOT F#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1775-1793",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1775-L1793"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "553",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L553"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Nothing in the EDIT layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "Nothing in SEQ TOOLS.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press_while_holding:button_rec",
    "action": "Nothing in the REC layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_save",
    "gesture": "press_while_holding:button_save",
    "action": "Nothing in the SAVE layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_macro",
    "gesture": "press_while_holding:button_lfo",
    "action": "Nothing in the LFO layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Moves the text cursor left (repeats while held).",
    "short_label": "CURSOR <",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "64-74",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L64-L74"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "12-19",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L12-L19"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "Any key cancels calibration and keeps the old table.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2331-2332",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2331-L2332"
     }
    ]
   }
  ],
  "key_g5": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Plays G5 with the octave and track transpose applied; on a POLY melodic track, CHORD can expand it to a voiced or strummed chord, which also feeds the arpeggiator.",
    "short_label": "G5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-286",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L286"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "781-845",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L781-L845"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/voice.c",
      "lines": "502-524",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/voice.c#L502-L524"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "press",
    "action": "With KEY MODE (QUANT) WHITE: the white keys walk the scale with C4 as the root, one scale note per key, on every page.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     }
    ]
   },
   {
    "mode": "drum_track",
    "gesture": "press",
    "action": "Strikes the bell sound, +4 semitones (General MIDI drum note 55 at octave 0; OCT moves the map).",
    "short_label": "BELL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "469-473",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L469-L473"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "84-93",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L84-L93"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_drum.c",
      "lines": "94",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_drum.c#L94"
     }
    ]
   },
   {
    "mode": "arp_trns",
    "gesture": "press",
    "action": "In ARP TRNS, plays no note: sets the sequence shift from C4 to the mapped key before track transpose; WHITE ignores black keys and the shift stays after release. With CHORD on a POLY track, each generated tone updates the shift, so the last tone sets it.",
    "short_label": "TRANSPOSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "178-213",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L213"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "695-711",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L695-L711"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-240",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L240"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "770-805",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L770-L805"
     }
    ]
   },
   {
    "mode": "step_rec",
    "gesture": "press",
    "action": "Writes the played note or CHORD result into the cursor step, up to four notes; MONO keeps the last note. Releasing all keys completes the entry and advances the cursor.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1386-1445",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1386-L1445"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1351-1385",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1351-L1385"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "press",
    "action": "Step 16 of the page shown (steps 16, 32, 48, 64 on pages 1-4): adds the selected lane's hit there, or takes it away when you let go (unless you held it for a lock); the cursor moves there.",
    "short_label": "STEP 16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "582-616",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L582-L616"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "643-655",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L643-L655"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Erases the punch-in lane: stopped, all of it at once; while playing, only with REC armed and no song playing, where the play head passes while held. Otherwise nothing happens.",
    "short_label": "ERASE LANE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/pfx.c",
      "lines": "157-185",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/pfx.c#L157-L185"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "324",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L324"
     }
    ]
   },
   {
    "mode": "fx_locked",
    "gesture": "press",
    "action": "Erases the punch-in lane: stopped, all of it at once; while playing, only with REC armed and no song playing, where the play head passes while held. Otherwise nothing happens.",
    "short_label": "ERASE LANE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/pfx.c",
      "lines": "157-185",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/pfx.c#L157-L185"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "324",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L324"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Nothing in the GLO layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "520-523",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L520-L523"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "With a melodic track selected: sets the root to G on every melodic track. With a DRUM track selected only that drum track's root changes, which you don't hear.",
    "short_label": "ROOT G",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1775-1793",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1775-L1793"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "553",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L553"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Nothing in the EDIT layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "76",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L76"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "press_while_holding:button_seq",
    "action": "Nothing in SEQ TOOLS.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_tools.c",
      "lines": "3-12",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_tools.c#L3-L12"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_tools.c",
      "lines": "14-15",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_tools.c#L14-L15"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "323-343",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L323-L343"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "press_while_holding:button_rec",
    "action": "Nothing in the REC layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_save",
    "gesture": "press_while_holding:button_save",
    "action": "Goes to SAVE > ARRANGE.",
    "short_label": "ARRANGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "405-437",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L405-L437"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "400-404",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L400-L404"
     }
    ]
   },
   {
    "mode": "layer_macro",
    "gesture": "press_while_holding:button_lfo",
    "action": "Nothing in the LFO layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Types 0-. phone-style (another tap inside 0.8 s moves on to the next one); in 123 mode one digit or symbol per key.",
    "short_label": "TYPE 0-.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "12-19",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L12-L19"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "240-274",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L240-L274"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "Any key cancels calibration and keeps the old table.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2331-2332",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2331-L2332"
     }
    ]
   }
  ],
  "screen": [
   {
    "mode": "home",
    "gesture": "shows",
    "action": "One creature per track, drawn from its engine and its four main knobs and moving with its sound; KNOB 1-4 are the selected track's four main controls.",
    "short_label": "HOME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "787-795",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L787-L795"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2165-2166",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2165-L2166"
     },
     {
      "kind": "doc",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "docs/MANUAL.md",
      "lines": "153-155",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/docs/MANUAL.md?plain=1#L153-L155"
     }
    ]
   },
   {
    "mode": "env",
    "gesture": "shows",
    "action": "Attack, decay, sustain and release for the track; on FM6 they change the carrier envelopes.",
    "short_label": "ENV",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "496",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L496"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/eng_fm6.c",
      "lines": "339-347",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/eng_fm6.c#L339-L347"
     }
    ]
   },
   {
    "mode": "env_dest",
    "gesture": "shows",
    "action": "Envelope amounts to filter, pitch and shape, and LOOP (the envelope repeats while a note is held).",
    "short_label": "ENV DEST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "497",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L497"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     }
    ]
   },
   {
    "mode": "lfo",
    "gesture": "shows",
    "action": "LFO rate (free, or in time below the slowest setting), wave, phase (or FREE) and fade.",
    "short_label": "LFO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "498",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L498"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     }
    ]
   },
   {
    "mode": "lfo_dest",
    "gesture": "shows",
    "action": "LFO amounts to pitch, filter, shape and level.",
    "short_label": "LFO DEST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "499",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L499"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     }
    ]
   },
   {
    "mode": "mod",
    "gesture": "shows",
    "action": "The four-slot modulation matrix: KNOB 1 picks the slot, then source, destination, amount.",
    "short_label": "MOD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "500",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L500"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     }
    ]
   },
   {
    "mode": "mseq",
    "gesture": "shows",
    "action": "A 16-step modulation sequence: KNOB 1 chooses which step, KNOB 2 sets that step's level, then length and slew.",
    "short_label": "MSEQ",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "501",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L501"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     }
    ]
   },
   {
    "mode": "mseq2",
    "gesture": "shows",
    "action": "The modulation sequence's step division.",
    "short_label": "MSEQ 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "502",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L502"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     }
    ]
   },
   {
    "mode": "fx",
    "gesture": "shows",
    "action": "The track's drive and its chorus, delay and reverb sends.",
    "short_label": "FX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "503",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L503"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     }
    ]
   },
   {
    "mode": "dist",
    "gesture": "shows",
    "action": "The track's drive amount, type and tone.",
    "short_label": "DIST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "504",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L504"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     }
    ]
   },
   {
    "mode": "autopan",
    "gesture": "shows",
    "action": "The track's pan swung left and right: depth, rate, sync, wave.",
    "short_label": "AUTO PAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "505",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L505"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     }
    ]
   },
   {
    "mode": "slicer",
    "gesture": "shows",
    "action": "The one shared slicer: mode, pattern, rate, depth.",
    "short_label": "SLICER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "514",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L514"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     }
    ]
   },
   {
    "mode": "sl_bus",
    "gesture": "shows",
    "action": "Which of tracks 1-4 feed the slicer.",
    "short_label": "SL BUS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "515",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L515"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     }
    ]
   },
   {
    "mode": "sl_bus2",
    "gesture": "shows",
    "action": "Whether tracks 5-6 and the effect returns feed the slicer.",
    "short_label": "SL BUS 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "516",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L516"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     }
    ]
   },
   {
    "mode": "sl_pitch",
    "gesture": "shows",
    "action": "A 16-step pitch sequence for the slicer's repeats: step, pitch, length, scale snap.",
    "short_label": "SL PITCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "517",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L517"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     }
    ]
   },
   {
    "mode": "dly",
    "gesture": "shows",
    "action": "The shared delay: time, feedback, tone, mix.",
    "short_label": "DLY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "506",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L506"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     }
    ]
   },
   {
    "mode": "dly2",
    "gesture": "shows",
    "action": "Delay width, grain pitch and spray, and the delay's wow and flutter amount.",
    "short_label": "DLY 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "507",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L507"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "183",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L183"
     }
    ]
   },
   {
    "mode": "reverb",
    "gesture": "shows",
    "action": "The shared reverb: type (ROOM, SPRING, SHIMMER, RESO, CLOUD), size, and two values that change with the type.",
    "short_label": "REVERB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "510",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L510"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     }
    ]
   },
   {
    "mode": "reverb2",
    "gesture": "shows",
    "action": "Reverb modulation depth and rate, input tone, width.",
    "short_label": "REVERB 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "511",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L511"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     }
    ]
   },
   {
    "mode": "chorus",
    "gesture": "shows",
    "action": "The shared chorus: rate, depth, stereo width.",
    "short_label": "CHORUS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "512",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L512"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     }
    ]
   },
   {
    "mode": "master",
    "gesture": "shows",
    "action": "The master: clipper, drum punch, kick ducking and its release.",
    "short_label": "MASTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "518",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L518"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "shows",
    "action": "Root, scale and key mode (shared by every melodic track) and the track's own transpose.",
    "short_label": "SCL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "520",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L520"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     }
    ]
   },
   {
    "mode": "scl2",
    "gesture": "shows",
    "action": "ALL TR: every sequence moved up or down its scale (global, saved with the project).",
    "short_label": "SCL 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "521",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L521"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     }
    ]
   },
   {
    "mode": "edit1",
    "gesture": "shows",
    "action": "The engine's first four values; the page title is the engine's own (OSC on ANALOG, KIT on DRUM and so on).",
    "short_label": "EDIT 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_graph.c",
      "lines": "1093-1101",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_graph.c#L1093-L1101"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     }
    ]
   },
   {
    "mode": "edit2",
    "gesture": "shows",
    "action": "The engine's next four values (FLT on ANALOG, KIT 2 on DRUM and so on).",
    "short_label": "EDIT 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "524",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L524"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     }
    ]
   },
   {
    "mode": "retrig",
    "gesture": "shows",
    "action": "LOFI on BYTE or FLOAT only: restart the formula on every note.",
    "short_label": "RETRIG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "525",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L525"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "441-442",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L441-L442"
     }
    ]
   },
   {
    "mode": "morph",
    "gesture": "shows",
    "action": "ANALOG: blends the basic waves around their cycle, or changes PWM width, SYNC/RING ratio or SAW3 spread; PHASE and LOFI through WRAM still morph between waves.",
    "short_label": "MORPH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "428-432",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L428-L432"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_graph.c",
      "lines": "358-378",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_graph.c#L358-L378"
     }
    ]
   },
   {
    "mode": "kit3",
    "gesture": "shows",
    "action": "DRUM only: the kit's band-pass on the metal sounds and its feedback.",
    "short_label": "KIT 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "529",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L529"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "435-436",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L435-L436"
     }
    ]
   },
   {
    "mode": "xmod",
    "gesture": "shows",
    "action": "DRUM only: a tempo-synced swing of the kit's MORPH, and per-hit randomness.",
    "short_label": "X-MOD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "530",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L530"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "435-436",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L435-L436"
     }
    ]
   },
   {
    "mode": "operator",
    "gesture": "shows",
    "action": "FM6 only: one operator's frequency ratio (or fixed), fine tune, level.",
    "short_label": "OPERATOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "531",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L531"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "439-440",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L439-L440"
     }
    ]
   },
   {
    "mode": "op_env",
    "gesture": "shows",
    "action": "FM6 only: one operator's envelope, one stage at a time.",
    "short_label": "OP ENV",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "532",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L532"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "439-440",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L439-L440"
     }
    ]
   },
   {
    "mode": "operator2",
    "gesture": "shows",
    "action": "FM6 only: one operator's ratio/fixed mode, detune, velocity sensitivity.",
    "short_label": "OPERATOR 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "533",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L533"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "439-440",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L439-L440"
     }
    ]
   },
   {
    "mode": "filter",
    "gesture": "shows",
    "action": "The filter: type (LP, HP, BP, COMB), cutoff, resonance, and drive (ANALOG) or the track's DIST (the others).",
    "short_label": "FILTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "534",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L534"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     }
    ]
   },
   {
    "mode": "sound1",
    "gesture": "shows",
    "action": "DRUM only: one kit sound; its side A or B, pitch, pitch drop.",
    "short_label": "SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "537",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L537"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "435-436",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L435-L436"
     }
    ]
   },
   {
    "mode": "sound2",
    "gesture": "shows",
    "action": "DRUM only: one kit sound's decay, noise, colour (of the side picked).",
    "short_label": "SOUND 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "538",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L538"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "435-436",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L435-L436"
     }
    ]
   },
   {
    "mode": "sound3",
    "gesture": "shows",
    "action": "DRUM only: one kit sound's wave and filter mode, pitch-drop type, drive on/off.",
    "short_label": "SOUND 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "539",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L539"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "435-436",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L435-L436"
     }
    ]
   },
   {
    "mode": "sound4",
    "gesture": "shows",
    "action": "DRUM only: one kit sound's extra layer, feedback, and its own effect send.",
    "short_label": "SOUND 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "540",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L540"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "435-436",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L435-L436"
     }
    ]
   },
   {
    "mode": "levels",
    "gesture": "shows",
    "action": "DRUM only: kick, snare, clap, closed-hat levels.",
    "short_label": "LEVELS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "541",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L541"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "437-438",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L437-L438"
     }
    ]
   },
   {
    "mode": "levels2",
    "gesture": "shows",
    "action": "DRUM only: open-hat, tom, rim, bell levels.",
    "short_label": "LEVELS 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "542",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L542"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "437-438",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L437-L438"
     }
    ]
   },
   {
    "mode": "stereo",
    "gesture": "shows",
    "action": "DRUM only: IMAGE, one knob through the kit's stereo placements.",
    "short_label": "STEREO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "543",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L543"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "435-436",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L435-L436"
     }
    ]
   },
   {
    "mode": "voice",
    "gesture": "shows",
    "action": "Poly, mono, legato or unison; glide; glide mode; note priority.",
    "short_label": "VOICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "549",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L549"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "shows",
    "action": "Arpeggiator mode (including TRNS), rate, octaves, gate.",
    "short_label": "ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "558",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L558"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     }
    ]
   },
   {
    "mode": "arp2",
    "gesture": "shows",
    "action": "Arpeggiator swing, probability, hold (key latch with MODE OFF), note order.",
    "short_label": "ARP 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "559",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L559"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     }
    ]
   },
   {
    "mode": "comp",
    "gesture": "shows",
    "action": "The cursor step's first component: type, its value or order and range, then rate or EVERY; the choices now include WALK and CLIMB.",
    "short_label": "COMP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_draw.c",
      "lines": "894-962",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_draw.c#L894-L962"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_graph.c",
      "lines": "151-265",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_graph.c#L151-L265"
     }
    ]
   },
   {
    "mode": "pattern",
    "gesture": "shows",
    "action": "The track's pattern length (1-64), division, swing, gate.",
    "short_label": "PATTERN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "567",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L567"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     }
    ]
   },
   {
    "mode": "automation",
    "gesture": "shows",
    "action": "The track's automation: playback on/off, record counts, clear.",
    "short_label": "AUTOMATION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "578",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L578"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     }
    ]
   },
   {
    "mode": "auto_list",
    "gesture": "shows",
    "action": "Every lock and automation event of the track as a list you can edit, ending in + ADD LOCK.",
    "short_label": "AUTO LIST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "579",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L579"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     }
    ]
   },
   {
    "mode": "mutate",
    "gesture": "shows",
    "action": "The selected track's SOUND and PATTERN changes over the next 32 bars, its AMOUNT and ORBIT/DRIFT mode, plus KEEP and FREEZE hints.",
    "short_label": "MUTATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_graph.c",
      "lines": "295-319",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_graph.c#L295-L319"
     }
    ]
   },
   {
    "mode": "fugue",
    "gesture": "shows",
    "action": "Three extra playheads reading the track's steps: head, rate, direction, interval in scale steps.",
    "short_label": "PLAYHEADS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "573",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L573"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     }
    ]
   },
   {
    "mode": "shift",
    "gesture": "shows",
    "action": "The track's pitch and chance, HUMAN variation in velocity, timing, gate and envelopes, and REC Q for live recording.",
    "short_label": "TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "572",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L572"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "232-235",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L232-L235"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "shows",
    "action": "Level, pan, reverb send and mute of the selected track; its meters show all six tracks, or four larger columns with MENU > LARGE.",
    "short_label": "MIXER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "575",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L575"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "771-785",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L771-L785"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_graph.c",
      "lines": "1855-1860",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_graph.c#L1855-L1860"
     }
    ]
   },
   {
    "mode": "global",
    "gesture": "shows",
    "action": "Tempo, swing, clock source (internal, USB, TRS), tune.",
    "short_label": "GLOBAL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "550",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L550"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "771-785",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L771-L785"
     }
    ]
   },
   {
    "mode": "system",
    "gesture": "shows",
    "action": "TRACKS (4 or 6), LOAD (FULL, LITE, ECO), MIDI routing, CPU readout.",
    "short_label": "SYSTEM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "551",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L551"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "771-785",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L771-L785"
     }
    ]
   },
   {
    "mode": "presets",
    "gesture": "shows",
    "action": "The sound browser shows the sound, engine, favourite and filter; DRUM factory presets replace the section's shared kit, and counts above 99 show only the current number.",
    "short_label": "PRESETS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "553",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L553"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "1137-1146",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L1137-L1146"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_draw.c",
      "lines": "1060-1072",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_draw.c#L1060-L1072"
     }
    ]
   },
   {
    "mode": "user",
    "gesture": "shows",
    "action": "The 32 user sound slots: load, erase, save (SAVE is pre-picked when you arrive).",
    "short_label": "USER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "554",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L554"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "shows",
    "action": "8 projects of 4 sections A-D: pick project and section, load, save.",
    "short_label": "PROJECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "555",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L555"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     }
    ]
   },
   {
    "mode": "arrange",
    "gesture": "shows",
    "action": "The project's song: up to 16 rows of section and bars, with scenes, then + ADD and END.",
    "short_label": "ARRANGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "556",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L556"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "726-767",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L726-L767"
     }
    ]
   },
   {
    "mode": "tools",
    "gesture": "shows",
    "action": "Six tools: clear the sequence, init the sound, delete a song row, clear the song, start a new project or build a heavy CPU test song.",
    "short_label": "TOOLS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_graph.c",
      "lines": "1619-1640",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_graph.c#L1619-L1640"
     }
    ]
   },
   {
    "mode": "step_roll",
    "gesture": "shows",
    "action": "The track's 64-step pattern as a piano roll with a step cursor; up to four notes a step.",
    "short_label": "PIANO ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "566",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L566"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "507-510",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L507-L510"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "shows",
    "action": "On a DRUM track, STEP or NOTE shows the step grid; white keys are steps, black keys pick a lane. NOTE retains the grid cards while its knobs edit STEP and MICRO.",
    "short_label": "DRUM GRID",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "611",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L611"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_draw.c",
      "lines": "1181-1192",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_draw.c#L1181-L1192"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "811-815",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L811-L815"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "shows",
    "action": "DISPLAY, CONTROL, AUDIO and SYSTEM settings; MIDI OUT adds KEYS/CLOCK/ALL/OFF, USB LEVEL adds fixed attenuation, and USB selects CONSOLE, STEREO or STEMS.",
    "short_label": "MENU",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/menu_items.c",
      "lines": "10-32",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/menu_items.c#L10-L32"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/menu_items.c",
      "lines": "79-94",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/menu_items.c#L79-L94"
     }
    ]
   },
   {
    "mode": "about",
    "gesture": "shows",
    "action": "Version, project links and support links, the repo QR code, audio load since power-on, core count and credits.",
    "short_label": "MENU > ABOUT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_menu.c",
      "lines": "107-159",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_menu.c#L107-L159"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "shows",
    "action": "Type a name of up to 12 characters with the keys.",
    "short_label": "NAME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "3-23",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L3-L23"
     }
    ]
   },
   {
    "mode": "dialog",
    "gesture": "shows",
    "action": "OCT+ is yes, OCT- is no; nothing else reacts.",
    "short_label": "CONFIRM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2023-2026",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2023-L2026"
     }
    ]
   },
   {
    "mode": "dice_dialog",
    "gesture": "shows",
    "action": "A sound, sequence, LFO or FX roll plays at once; SELECT rolls that part again, OCT+ keeps it, OCT- restores the previous part.",
    "short_label": "KEEP DICED?",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2131-2140",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2131-L2140"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1520-1523",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1520-L1523"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2037-2038",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2037-L2038"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2132-2136",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2132-L2136"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "shows",
    "action": "The screen names each button and knob in turn; you press or turn it so the firmware learns the panel.",
    "short_label": "CALIBRATION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/main.c",
      "lines": "205-208",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/main.c#L205-L208"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2356-2416",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2356-L2416"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/panel.c",
      "lines": "3-7",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/panel.c#L3-L7"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "shows",
    "action": "Effects on the white keys while held, track mutes on black keys 1-6, four macros on the knobs.",
    "short_label": "FX LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "55-66",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L55-L66"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "236-254",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L236-L254"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/panel.c",
      "lines": "80",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/panel.c#L80"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/panel.c",
      "lines": "79",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/panel.c#L79"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "733-737",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L733-L737"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "shows",
    "action": "Mutes, solos, drum group mutes, unmute all, tap tempo, UNDO, MUTATE freeze; KNOB 1-4 track levels.",
    "short_label": "GLO LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "55-66",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L55-L66"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "236-254",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L236-L254"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/panel.c",
      "lines": "80",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/panel.c#L80"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/panel.c",
      "lines": "79",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/panel.c#L79"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "shows",
    "action": "Keys set the root; KNOB 1–4 change root, scale, playback rotation and sequence pitch.",
    "short_label": "SEL LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "55-66",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L55-L66"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "236-254",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L236-L254"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/panel.c",
      "lines": "80",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/panel.c#L80"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/panel.c",
      "lines": "79",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/panel.c#L79"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "69",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L69"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "shows",
    "action": "INIT and RECALL on F3 and G3; on a DRUM track black keys mute the kit sounds; KNOB 1-4 the EDIT 1 values.",
    "short_label": "EDIT layer",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "55-66",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L55-L66"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "236-254",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L236-L254"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/panel.c",
      "lines": "80",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/panel.c#L80"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/panel.c",
      "lines": "79",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/panel.c#L79"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "shows",
    "action": "Sequence tools on the white keys, DRUM lane on black keys; KNOB 1-4 length, division, swing, gate.",
    "short_label": "SEQ TOOLS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "55-66",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L55-L66"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "236-254",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L236-L254"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/panel.c",
      "lines": "80",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/panel.c#L80"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/panel.c",
      "lines": "79",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/panel.c#L79"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "102-108",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L102-L108"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "shows",
    "action": "Clear the track and the metronome click.",
    "short_label": "REC layer",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "55-66",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L55-L66"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "236-254",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L236-L254"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/panel.c",
      "lines": "80",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/panel.c#L80"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/panel.c",
      "lines": "79",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/panel.c#L79"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     }
    ]
   },
   {
    "mode": "layer_save",
    "gesture": "shows",
    "action": "Play and store sections A-D live, quick chains, loop or song, SONG REC, project switch.",
    "short_label": "SAVE LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "55-66",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L55-L66"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "236-254",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L236-L254"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/panel.c",
      "lines": "80",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/panel.c#L80"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/panel.c",
      "lines": "79",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/panel.c#L79"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "405-437",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L405-L437"
     }
    ]
   },
   {
    "mode": "layer_macro",
    "gesture": "shows",
    "action": "KNOB 1-4 are macros M1-M4; F3 rolls new macro routes, G3 clears them.",
    "short_label": "LFO LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "55-66",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L55-L66"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "236-254",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L236-L254"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/panel.c",
      "lines": "80",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/panel.c#L80"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/panel.c",
      "lines": "79",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/panel.c#L79"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "524-581",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L524-L581"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "65",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L65"
     }
    ]
   },
   {
    "mode": "fx_locked",
    "gesture": "shows",
    "action": "The FX layer stays open with both hands free: keys are effects, knobs are the FX macros.",
    "short_label": "FX LOCKED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "186-220",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L186-L220"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "155-182",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L155-L182"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1963-1967",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1963-L1967"
     }
    ]
   },
   {
    "mode": "macro_latched",
    "gesture": "shows",
    "action": "KNOB 1-4 keep moving macros M1-M4 on every page; the macro map stays on screen.",
    "short_label": "MACRO LATCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "186-220",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L186-L220"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2295-2298",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2295-L2298"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_draw.c",
      "lines": "1700-1701",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_draw.c#L1700-L1701"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "shows",
    "action": "The header: transport state, metronome, tempo, the octave shift (replaced by the song row during song playback), the load meter and USB; messages like SAVED show here.",
    "short_label": "HEADER",
    "evidence": "vendor-doc",
    "source": [
     {
      "kind": "doc",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "docs/MANUAL.md",
      "lines": "137-139",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/docs/MANUAL.md?plain=1#L137-L139"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "shows",
    "action": "Changing page or track by hand flashes the page's name (with track and engine) for a moment.",
    "short_label": "PAGE NAME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "721-725",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L721-L725"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "716",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L716"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "shows",
    "action": "Colours read like a thermal camera: cold is little, hot is a lot; violet is selected, orange is active.",
    "short_label": "THERMAL",
    "evidence": "vendor-doc",
    "source": [
     {
      "kind": "doc",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "docs/MANUAL.md",
      "lines": "150-151",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/docs/MANUAL.md?plain=1#L150-L151"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "shows",
    "action": "With MENU > DISPLAY > SCREEN OFF set, the screen goes dark after that idle time; the first touch only wakes it.",
    "short_label": "SCREEN OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "295-316",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L295-L316"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "shows",
    "action": "After tapping a layer button whose layer you have never opened, a hint says to hold it (HOLD [GLO] QUICK).",
    "short_label": "HOLD HINT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "278-292",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L278-L292"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "shows",
    "action": "Holding OCT- and OCT+: an UPDATE countdown from 2 s; at 5 s, UBOOT.",
    "short_label": "UPDATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/main.c",
      "lines": "253-282",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/main.c#L253-L282"
     }
    ]
   },
   {
    "mode": "power_on",
    "gesture": "shows",
    "action": "The animated JIANT signature, version and Juan Jiant credit appear before HOME.",
    "short_label": "SIGNATURE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_draw.c",
      "lines": "1288-1297",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_draw.c#L1288-L1297"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/main.c",
      "lines": "224-227",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/main.c#L224-L227"
     }
    ]
   },
   {
    "mode": "dly3",
    "gesture": "shows",
    "action": "Delay model and ping-pong on the shared delay bus.",
    "short_label": "DLY 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "508-509",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L508-L509"
     }
    ]
   },
   {
    "mode": "punch",
    "gesture": "shows",
    "action": "The shared punch-in effects lane: length, resolution, status and clear.",
    "short_label": "PUNCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "519",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L519"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_draw.c",
      "lines": "1017-1028",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_draw.c#L1017-L1028"
     }
    ]
   },
   {
    "mode": "chord",
    "gesture": "shows",
    "action": "One key plays a chord on a polyphonic melodic track; choose its shape, voicing and strum.",
    "short_label": "CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "522",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L522"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/seq.c",
      "lines": "230-288",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L230-L288"
     }
    ]
   },
   {
    "mode": "note",
    "gesture": "shows",
    "action": "Melodic tracks show a piano roll with FOCUS, PITCH, MOVE and MICRO; DRUM still displays its grid cards although its knobs edit STEP and MICRO.",
    "short_label": "NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_draw.c",
      "lines": "1181-1211",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_draw.c#L1181-L1211"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "811-815",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L811-L815"
     }
    ]
   },
   {
    "mode": "stretch",
    "gesture": "shows",
    "action": "Reshape the whole pattern by turning STRETCH or REPEAT; NUDGE moves the written steps and ROTATE changes their playback offset.",
    "short_label": "STRETCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "569",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L569"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "930-973",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L930-L973"
     }
    ]
   },
   {
    "mode": "comp2",
    "gesture": "shows",
    "action": "A second component on the cursor step, with its type, value and EVERY or WALK/CLIMB rate; CHANCE and RATCH remain on COMP.",
    "short_label": "COMP 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "571",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L571"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "854-909",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L854-L909"
     }
    ]
   },
   {
    "mode": "gen",
    "gesture": "shows",
    "action": "Three SELECT pages configure a new piece: genre/seed/energy/form, four part amounts, then lead/complexity/swing/human variation; OCT+ generates, PLAY auditions, HOME or OCT- closes it. With FORM PARTS or SONG, when no section contains owner-stored work, generation stores A–C or A–D and replaces ARRANGE; sections reach flash when stopped and rows after about two stopped seconds. GLO + G4 restores the live music only; generated stored sections and ARRANGE rows stay changed.",
    "short_label": "GENERATOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/gen.c",
      "lines": "1407-1451",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/gen.c#L1407-L1451"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2141-2155",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2141-L2155"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1901-1909",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1901-L1909"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/gen.c",
      "lines": "938-944",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/gen.c#L938-L944"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/gen.c",
      "lines": "1038-1058",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/gen.c#L1038-L1058"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/project.c",
      "lines": "1838-1856",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/project.c#L1838-L1856"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/project.c",
      "lines": "1563-1574",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/project.c#L1563-L1574"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/song_main.c",
      "lines": "185-201",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L185-L201"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/song_main.c",
      "lines": "409-421",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L409-L421"
     }
    ]
   }
  ],
  "jack_midi_in": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Connected: TRS MIDI IN follows USB routing (SYSTEM > ROUTE CH1-6 or SEL); GLOBAL > CLOCK TRS follows its transport. Track-channel Program Change loads sounds; choosing a DRUM factory preset replaces the section’s kit, layers and sends in RAM without undo. Channel 16 programs 0–3 request A–D; 16–23 switch projects 1–8 while stopped, flushing stored sections and writing the index before section A replaces the live music if present, with no undo.",
    "short_label": "MIDI IN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "34",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L34"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "32",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L32"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/felucca.c",
      "lines": "29",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/felucca.c#L29"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/midi_control.c",
      "lines": "308-340",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/midi_control.c#L308-L340"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "1294-1325",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L1294-L1325"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/song_main.c",
      "lines": "303-327",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L303-L327"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "1140-1147",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L1140-L1147"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/song_main.c",
      "lines": "306-354",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L306-L354"
     }
    ]
   }
  ],
  "switch_power": [
   {
    "mode": "power_on",
    "gesture": "power_on_holding:button_oct_down+button_oct_up",
    "action": "Switch on holding OCT- and OCT+: HARDWARE CALIBRATION, which asks you to press each named button and turn each knob.",
    "short_label": "CALIBRATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/main.c",
      "lines": "205-208",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/main.c#L205-L208"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "2356-2416",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2356-L2416"
     }
    ]
   },
   {
    "mode": "power_on",
    "gesture": "power_on_holding:button_rec",
    "action": "Switch on holding REC: this session runs on one processor core (the dual-core mode added in 0.6.71 is skipped). MENU > ABOUT then shows CORES 1.",
    "short_label": "ONE CORE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/main.c",
      "lines": "209-220",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/main.c#L209-L220"
     },
     {
      "kind": "doc",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "README.md",
      "lines": "960-961",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/README.md#L960-L961"
     }
    ]
   }
  ],
  "jack_usb": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Connected: USB MIDI, USB audio and the web editor with backup; the computer sees JIANT FM, with stereo output or six mono tracks plus stereo effects at 44.1 kHz through SYSTEM > USB > STEMS. Inspected Felucca 1.6.1, Melodee 1.4.1, SLOOP 2.7.1, X0X 1.1.0 and FoMni 0.4 installers may not find this new port name; Felucca/Melodee backup checks reject JIANT INFO too. Back up and return to V15 with JIANT’s own installer first (read from code, not tested on a unit).",
    "short_label": "USB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/usb.c",
      "lines": "361-365",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/usb.c#L361-L365"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/menu_items.c",
      "lines": "79-85",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/menu_items.c#L79-L85"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/usb.c",
      "lines": "258-278",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/usb.c#L258-L278"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/editor_backup.c",
      "lines": "13-16",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/editor_backup.c#L13-L16"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/usb.c",
      "lines": "361-366",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/usb.c#L361-L366"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/editor.c",
      "lines": "390-391",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/editor.c#L390-L391"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "web/fm1ota.js",
      "lines": "118-128",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/web/fm1ota.js#L118-L128"
     },
     {
      "kind": "source",
      "repo": "hugelton/Felucca",
      "ref": "v1.6.1",
      "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
      "path": "web/index_pkg.html",
      "lines": "209-216",
      "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/web/index_pkg.html#L209-L216"
     },
     {
      "kind": "source",
      "repo": "keremimo/melodee",
      "ref": "v1.4.1",
      "commit": "1cccd6970e6e60f136862f3016de58617010c01e",
      "path": "web/fm1ota.js",
      "lines": "119-129",
      "url": "https://github.com/keremimo/melodee/blob/1cccd6970e6e60f136862f3016de58617010c01e/web/fm1ota.js#L119-L129"
     },
     {
      "kind": "source",
      "repo": "keremimo/melodee",
      "ref": "v1.4.1",
      "commit": "1cccd6970e6e60f136862f3016de58617010c01e",
      "path": "web/index_pkg.html",
      "lines": "307-315",
      "url": "https://github.com/keremimo/melodee/blob/1cccd6970e6e60f136862f3016de58617010c01e/web/index_pkg.html#L307-L315"
     },
     {
      "kind": "source",
      "repo": "isod89/sloop-fm1",
      "ref": "v2.7.1",
      "commit": "4ec1ac829fd2bdf2c571ea215fb3d62477d01220",
      "path": "docs/webapp/installer/index.html",
      "lines": "178-182",
      "url": "https://github.com/isod89/sloop-fm1/blob/4ec1ac829fd2bdf2c571ea215fb3d62477d01220/docs/webapp/installer/index.html#L178-L182"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "web/fm1ota.js",
      "lines": "118-124",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/web/fm1ota.js#L118-L124"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-fomni",
      "ref": "v0.4",
      "commit": "6ecd227013cc18def0e89d035b3760eb268b342b",
      "path": "web/fm1ota.js",
      "lines": "151-157",
      "url": "https://github.com/charlesvestal/fm1-fomni/blob/6ecd227013cc18def0e89d035b3760eb268b342b/web/fm1ota.js#L151-L157"
     }
    ]
   }
  ]
 },
 "switching_note": {
  "kept_on_unit": "Updating JIANT keeps older JIANT projects, songs, user sounds, settings and the FM6 voice bank. The current song's arrangement now survives power-on; 0.6.81 fixed the old reset to empty rows. The first start after an unmarked older settings record selects the JIANT FM palette once; later color choices stay after saving settings. Coming from 0.6.39 or earlier, RESTORE LAST still flips meaning: check it after updating. Felucca projects from 1.1.x or earlier can appear in song 1. Save a complete archive before official V15; its firmware cannot open JIANT music. Updating a 0.6.71 project with nonzero SCL TRANS shifts its stored melodic sequence too: since 0.6.82 TRANS applies as notes sound, whereas it previously affected keys only. The saved value is not migrated; check TRANS after upgrading. Other installers need care: the inspected Felucca 1.6.1, Melodee 1.4.1, SLOOP 2.7.1, X0X 1.1.0 and FoMni 0.4 web installers exclude the new JIANT FM port name, so a running 0.7.x unit may not appear. Felucca’s and Melodee’s backup-to-V15 checks also reject JIANT’s INFO name. Use JIANT’s own installer to save its complete backup and return to official V15 before installing those firmwares. Port detection is inferred from USB descriptors and installer filters; it was not tried on a unit. Imported Felucca settings bytes can also select different behavior: byte 21 equal to 1 enables USB STEMS without the console; byte 24 values 1, 2 or 3 select MIDI OUT CLOCK, ALL or OFF; byte 22 values 1–4 select fixed USB attenuation of -6, -12, -18 or -24 dB, applied when the fixed-level option is active. Check SYSTEM > USB, CONTROL > MIDI OUT and AUDIO > USB LEVEL after importing. From the flash atlas (generated): install (loader): JIANT's update loader (same as Felucca 1.6's) first reads the whole package and checks its CRC16, then writes the program area sector by sector, rewriting only sectors that differ; the flash head is never written (a JIANT package installed through the update path). install (loader): After the write the loader erases every 4 KiB sector whose last 256 bytes hold a valid update record, skipping 0x97000-0xDFFFF: in practice the staging record sector 0xE4000 (only sectors with a valid record at +0xF00). install (loader): On a first install from the official firmware the record drop erases 0xE8000 when the stock update record sits at 0xE8F00 (Melodee's shared U055-U072 copy B, the middle of SLOOP's USR4 range) (only if the stock updater left its record there; the location is from source comments) [reported]. update: Leaving JIANT through an update: ota_session stages the package's loader at 0xE0000-0xE4FFF and writes the UPDATA_PARM record at 0xE4F00 after the host's 'success'; a failure erases the staging area. Unlike SLOOP, JIANT does not flush sections stored only in RAM first (upgrade command from the host). every start-up: ota_boot_cleanup erases all five staging sectors (only if the first 4 bytes at 0xE0000 or the 8 bytes at 0xE4F00 are not blank). first start-up after another firmware: prefs_update writes the settings record at once (before the splash): JIANT's defaults if the record was unreadable, Felucca's carried-over values if it was Felucca's. It lands on the other firmware's older FELU copy, or on A (0xFC000) if the copies were X0X0 (settings revision byte below 2 (any non-JIANT record; after Felucca unless its byte [15][25] was 2)). first start-up after another firmware: Opening each quick layer for the first time writes the settings again (the other copy), so the other firmware's newest copy goes at the first layer opening (a layer whose 'seen' bit is clear; deferred while playing). every start-up: fvb_boot copies a staged JIANT voice bank from 0xE5000/0xE6000 to 0xE7000 (erase, payload, record) (a valid staged type-64 bank exists and 0xE7000 holds an older one or none (also after another firmware overwrote 0xE7000)). first start-up after another firmware: upf_boot moves a retired FM6 bank's patches into the user presets and writes the UPF6 object into the sector that does not hold the bank's newest copy (no valid UPF6 copy and a valid 3472-byte FM6B v1 bank of type 7 (Felucca 1.0-1.0.2 or older JIANT); SLOOP's working project and Melodee's NFM1 bank do not qualify). install (loader): JIANT's web installer: before writing it identifies the running firmware and writes only over official V15 (FM-1_015) or JIANT (FM-1_9xx answering INFO as JIANT or FELUCCA with the JIANT extension/six-track v0.x identity); anything else is refused with nothing written and sent to 'Return to official V15'. If the FM-1 is already in update mode the check is skipped and JIANT is written at once. 'Return to official V15' first saves a complete backup, which only works when the running firmware reports Felucca's archive markers (JIANT, Felucca builds with archive support); otherwise it stops with nothing written. In update mode it requires the 'recovery' box and a confirm. The backup itself only reads. New archives are named JIANT-backup-<date>.json (browser installer at de2a4cb). every start-up (with RESTORE LAST ON): autosave_boot marks the music as saved, then session_dice gives tracks without macro routes new ones; that changes the signature, so the autosave writes 0xE5000/0xE6000 about 10 s after start-up with no action. JIANT reads a Felucca owner's 'RESTORE LAST OFF' as ON (RESTORE LAST ON (default OFF; ON after Felucca if Felucca's autosave was off)). What JIANT writes over the previous firmware's data is in overwrites_previous; what the next firmware writes over JIANT's is in when_you_leave.",
  "lost": "SAMPLE, SLICE, GRAIN, PHYS and TRIO sounds load as ANALOG. Official V15 can't open JIANT music. From the import code (not tested on a unit): JIANT reads its own 3744-byte FUNA projects but refuses Felucca 1.2 and later's 3840-byte FUNA ones, and SLOOP 2.x projects, so those show as empty; old SLOOP 1.x FUN3 projects (2584 bytes) match a format JIANT reads and may load. Undo is RAM only and the autosave is off by default (MENU > SYSTEM > RESTORE LAST), so unsaved music is gone at power-off. From the flash atlas (generated): Other firmwares reading JIANT's data: Felucca reads and uses JIANT's settings, calibration, favourites, MENU options; user sounds U01-U16; user sounds U17-U32; FM6 patches of the FM6 user sounds (RESTORE LAST and KNOB ACCEL read inverted, JIANT's LOAD byte reads as Felucca's HOME view, and JIANT's revision byte reads as LEDs INV HI when LEDS is INV; MIDI OUT reads as SCOPE MIX / STEP PREVIEW flags, and JIANT USB/palette bytes overlap the FX key map); ChoralRoot takes over JIANT's settings, calibration, favourites, MENU options, converting them (on entering ChoralRoot, panel calibration and HOLD can carry over; ChoralRoot’s own options start at defaults and LOWCUT/BASS+ becomes Off); ChoralRoot lists JIANT's user sounds U01-U16; user sounds U17-U32, but plays them differently (legacy records may be copied, but retired/renumbered engines and foreign deep patches change their sound; confirmed Flash Data still erases the sources); GHOULBOX reads and uses JIANT's settings, calibration, favourites, MENU options; FM6 patches of the FM6 user sounds (shared settings have different preference meanings); GHOULBOX lists JIANT's user sounds U01-U16; user sounds U17-U32, but plays them differently (all bank records are rewritten after in-RAM migration; firmware-specific sounds can differ); Skiff reads and uses JIANT's user sounds U01-U16; user sounds U17-U32; FM6 patches of the FM6 user sounds; Skiff imports part of JIANT’s settings and calibration, but replaces MIDI OUT and can change other preferences without asking. What JIANT reads of other firmwares' data: JIANT takes over Felucca's settings, button calibration, favourites, MIDI LEARN map; user presets 1-16; user presets 17-32, converting them (RESTORE LAST and KNOB ACCEL read inverted; HOME becomes LOAD (TRACKS = LITE, LEVELS = ECO); when the shared setting value is above 3, JIANT resets 2ND CORE, SCOPE MIX, STEP PREVIEW, CHORD ENTRY ADD, HELP, SELECT and SCREEN WAKE to their Felucca defaults; otherwise it keeps that value but reads it as MIDI OUT; USB and palette settings also reuse part of the FX key map); JIANT lists SLOOP's user sounds U01-U16; user sounds U17-U32, but plays them differently; JIANT lists Felucca's FM6 patches of the FM6 user presets, but plays them differently (the link to each preset breaks: JIANT plays a factory patch or the init voice instead); JIANT reads and uses GHOULBOX's settings and panel calibration; FM6 patches for user sounds (shared bytes change USB, palette, chord-entry, HOME and screen preferences; RESTORE LAST has the opposite meaning and a round trip can turn GHOULBOX autosave OFF; SCOPE MIX/STEP PREVIEW become MIDI OUT or are cleared, KNOB ACCEL is inverted, SCENE becomes SCREEN OFF and first-start revision update turns FX LATCH OFF); JIANT lists GHOULBOX's user sounds 1–16; user sounds 17–32, but plays them differently (whole-bank conversion changes FM6 fingerprints and can detach GHOULBOX patches; GURDY slots look empty in JIANT and a save replaces them without asking); JIANT takes over Hortator's settings and panel calibration, converting them (settings convert when read; next save writes a newer format the previous firmware cannot import); JIANT reads and uses Skiff's settings, calibration and favourites (shared settings bytes select different preferences); 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); 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). Everything else of another firmware's looks empty or foreign to the reader.",
  "back_up_first": "JIANT's installer looks at the connected FM-1 first and installs JIANT only where it finds official V15 or JIANT; if the FM-1 is already in update mode it skips that look and writes straight away. Its 'Back up and return to official V15' saves a complete archive (current and saved music, sound banks, settings; no samples) only when the firmware answers in Felucca's archive format: JIANT itself, and Felucca builds that report the archive feature (1.6 does). From SLOOP, Melodee, X0X, FoMni or Baud Girl it stops with an error and writes nothing, no backup and no V15. Coming from those: back up with that firmware's own tool (SLOOP's editor; X0X, FoMni and stock V15 have no project backup), return to stock with that firmware's own installer, M-VAVE's M-UPGRADE or the FM-1 Firmware Hub's return-to-V15 card, then install JIANT. A JIANT archive restores through the web editor's Projects tab (all 8 projects with sections, arrangements, scenes, 32 user sounds, settings); it leaves out the FM6 voice bank B1-B32, so keep your .syx. A Felucca archive is read by the editor, but the FM-1 refuses music saved by Felucca 1.2 or later (its 3840-byte FUNA projects): the restore stops at the first such project, anything sent before it may already be written, and the archive file itself is not changed. Older Felucca (1.1.x and before) music restores. Other installers need care: the inspected Felucca 1.6.1, Melodee 1.4.1, SLOOP 2.7.1, X0X 1.1.0 and FoMni 0.4 web installers exclude the new JIANT FM port name, so a running 0.7.x unit may not appear. Felucca’s and Melodee’s backup-to-V15 checks also reject JIANT’s INFO name. Use JIANT’s own installer to save its complete backup and return to official V15 before installing those firmwares. Port detection is inferred from USB descriptors and installer filters; it was not tried on a unit.",
  "source": [
   {
    "kind": "source",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "web/index_pkg.html",
    "lines": "222-242",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/web/index_pkg.html#L222-L242"
   },
   {
    "kind": "source",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "web/index_pkg.html",
    "lines": "264-274",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/web/index_pkg.html#L264-L274"
   },
   {
    "kind": "source",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "web/index_pkg.html",
    "lines": "299-307",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/web/index_pkg.html#L299-L307"
   },
   {
    "kind": "source",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "web/index_pkg.html",
    "lines": "318-335",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/web/index_pkg.html#L318-L335"
   },
   {
    "kind": "source",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "firmware/src/project.c",
    "lines": "621-655",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/project.c#L621-L655"
   },
   {
    "kind": "source",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "firmware/src/editor_backup.c",
    "lines": "115-173",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/editor_backup.c#L115-L173"
   },
   {
    "kind": "source",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "firmware/src/editor_backup.c",
    "lines": "13-16",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/editor_backup.c#L13-L16"
   },
   {
    "kind": "source",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "firmware/src/fm6_vbank.c",
    "lines": "18-38",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/fm6_vbank.c#L18-L38"
   },
   {
    "kind": "doc",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "README.md",
    "lines": "1460-1464",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/README.md#L1460-L1464"
   },
   {
    "kind": "source",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "firmware/src/usb.c",
    "lines": "361-366",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/usb.c#L361-L366"
   },
   {
    "kind": "source",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "firmware/src/editor.c",
    "lines": "390-391",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/editor.c#L390-L391"
   },
   {
    "kind": "source",
    "repo": "hugelton/Felucca",
    "ref": "v1.6.1",
    "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
    "path": "web/fm1ota.js",
    "lines": "118-128",
    "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/web/fm1ota.js#L118-L128"
   },
   {
    "kind": "source",
    "repo": "hugelton/Felucca",
    "ref": "v1.6.1",
    "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
    "path": "web/index_pkg.html",
    "lines": "209-216",
    "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/web/index_pkg.html#L209-L216"
   },
   {
    "kind": "source",
    "repo": "keremimo/melodee",
    "ref": "v1.4.1",
    "commit": "1cccd6970e6e60f136862f3016de58617010c01e",
    "path": "web/fm1ota.js",
    "lines": "119-129",
    "url": "https://github.com/keremimo/melodee/blob/1cccd6970e6e60f136862f3016de58617010c01e/web/fm1ota.js#L119-L129"
   },
   {
    "kind": "source",
    "repo": "keremimo/melodee",
    "ref": "v1.4.1",
    "commit": "1cccd6970e6e60f136862f3016de58617010c01e",
    "path": "web/index_pkg.html",
    "lines": "307-315",
    "url": "https://github.com/keremimo/melodee/blob/1cccd6970e6e60f136862f3016de58617010c01e/web/index_pkg.html#L307-L315"
   },
   {
    "kind": "source",
    "repo": "isod89/sloop-fm1",
    "ref": "v2.7.1",
    "commit": "4ec1ac829fd2bdf2c571ea215fb3d62477d01220",
    "path": "docs/webapp/installer/index.html",
    "lines": "178-182",
    "url": "https://github.com/isod89/sloop-fm1/blob/4ec1ac829fd2bdf2c571ea215fb3d62477d01220/docs/webapp/installer/index.html#L178-L182"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "web/fm1ota.js",
    "lines": "118-124",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/web/fm1ota.js#L118-L124"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-fomni",
    "ref": "v0.4",
    "commit": "6ecd227013cc18def0e89d035b3760eb268b342b",
    "path": "web/fm1ota.js",
    "lines": "151-157",
    "url": "https://github.com/charlesvestal/fm1-fomni/blob/6ecd227013cc18def0e89d035b3760eb268b342b/web/fm1ota.js#L151-L157"
   }
  ],
  "going_back_a_version": "Back up with the web editor before installing an older JIANT. The installer warns that newer projects may not open in earlier builds. Although FUNC still uses 3840 bytes, a saved step with COMP 2, EVERY, TIMING, DIV or LEN can carry extra step bytes that v0.6.71 refuses, so that section appears empty there. Old readers also omit the newer delay MOD, TYPE, PING and punch-lane LEN/RES values when they save a project. Returning to this build cannot recover values discarded by an older save. Keep the original archive and the FM6 bank's .syx file. WALK or CLIMB in COMP alone also makes a section unreadable in 0.6.71: its component ids stop before those new types. Compatibility before WALK/CLIMB arrived in 0.6.98 is inferred from that addition. Downgrading before the 0.6.81 arrangement fix also restores the startup bug: 0.6.71 resets the current song’s ARRANGE rows at every boot and writes the reset rows about two stopped seconds later, without a save. Restoring an arrangement from backup there does not protect it from the next boot. Returning to 0.7.4 cannot recover those overwritten rows.",
  "going_back_a_version_source": [
   {
    "kind": "source",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "web/index_pkg.html",
    "lines": "131",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/web/index_pkg.html#L131"
   },
   {
    "kind": "source",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "firmware/src/project.c",
    "lines": "735-744",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/project.c#L735-L744"
   },
   {
    "kind": "source",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "firmware/src/project.c",
    "lines": "833-838",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/project.c#L833-L838"
   },
   {
    "kind": "source",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "firmware/src/project.c",
    "lines": "1010-1040",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/project.c#L1010-L1040"
   },
   {
    "kind": "source",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "firmware/src/project.c",
    "lines": "1076-1094",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/project.c#L1076-L1094"
   },
   {
    "kind": "source",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "firmware/src/core.h",
    "lines": "406-412",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/core.h#L406-L412"
   },
   {
    "kind": "doc",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "README.md",
    "lines": "601-607",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/README.md#L601-L607"
   },
   {
    "kind": "source",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "firmware/src/main.c",
    "lines": "108-118",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/main.c#L108-L118"
   },
   {
    "kind": "source",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "firmware/src/song_main.c",
    "lines": "409-417",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L409-L417"
   },
   {
    "kind": "doc",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "README.md",
    "lines": "863",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/README.md#L863"
   },
   {
    "kind": "historical_comparison",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.6.71-f139492",
    "compared_commit": "f139492d2a4863e71f5a35bb41577149163b61e4",
    "path": "firmware/src/project.c",
    "lines": "1007-1010",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/f139492d2a4863e71f5a35bb41577149163b61e4/firmware/src/project.c#L1007-L1010",
    "read_at": "2026-10-16",
    "purpose": "Deliberate older-release evidence, re-read for downgrade comparison; not a current-release behavior citation. The old reader rejects a first component at or above its CP_N."
   },
   {
    "kind": "historical_comparison",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.6.71-f139492",
    "compared_commit": "f139492d2a4863e71f5a35bb41577149163b61e4",
    "path": "firmware/src/core.h",
    "lines": "352-353",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/f139492d2a4863e71f5a35bb41577149163b61e4/firmware/src/core.h#L352-L353",
    "read_at": "2026-10-16",
    "purpose": "Deliberate older-release evidence, re-read for downgrade comparison; not a current-release behavior citation. The old component enum ends before WALK and CLIMB."
   },
   {
    "kind": "historical_comparison",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.6.71-f139492",
    "compared_commit": "f139492d2a4863e71f5a35bb41577149163b61e4",
    "path": "firmware/src/main.c",
    "lines": "108-114",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/f139492d2a4863e71f5a35bb41577149163b61e4/firmware/src/main.c#L108-L114",
    "read_at": "2026-10-16",
    "purpose": "Deliberate older-release evidence, re-read for downgrade comparison; not a current-release behavior citation. The old startup resets chain_config unconditionally."
   },
   {
    "kind": "historical_comparison",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.6.71-f139492",
    "compared_commit": "f139492d2a4863e71f5a35bb41577149163b61e4",
    "path": "firmware/src/song_main.c",
    "lines": "407-415",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/f139492d2a4863e71f5a35bb41577149163b61e4/firmware/src/song_main.c#L407-L415",
    "read_at": "2026-10-16",
    "purpose": "Deliberate older-release evidence, re-read for downgrade comparison; not a current-release behavior citation. The old poll saves the reset rows after two stopped seconds."
   }
  ],
  "kept_on_unit_source": [
   {
    "kind": "source",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "firmware/src/main.c",
    "lines": "109-119",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/main.c#L109-L119"
   },
   {
    "kind": "source",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "firmware/src/settings_persist.c",
    "lines": "90-100",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/settings_persist.c#L90-L100"
   },
   {
    "kind": "source",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "firmware/src/project.c",
    "lines": "1902-1917",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/project.c#L1902-L1917"
   },
   {
    "kind": "source",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "firmware/src/ui.c",
    "lines": "78-93",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L78-L93"
   },
   {
    "kind": "source",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "firmware/src/voice.c",
    "lines": "502-524",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/voice.c#L502-L524"
   },
   {
    "kind": "source",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "firmware/src/seq.c",
    "lines": "178-187",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L178-L187"
   },
   {
    "kind": "source",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "firmware/src/usb.c",
    "lines": "361-366",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/usb.c#L361-L366"
   },
   {
    "kind": "source",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "firmware/src/editor.c",
    "lines": "390-391",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/editor.c#L390-L391"
   },
   {
    "kind": "source",
    "repo": "hugelton/Felucca",
    "ref": "v1.6.1",
    "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
    "path": "web/fm1ota.js",
    "lines": "118-128",
    "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/web/fm1ota.js#L118-L128"
   },
   {
    "kind": "source",
    "repo": "hugelton/Felucca",
    "ref": "v1.6.1",
    "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
    "path": "web/index_pkg.html",
    "lines": "209-216",
    "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/web/index_pkg.html#L209-L216"
   },
   {
    "kind": "source",
    "repo": "keremimo/melodee",
    "ref": "v1.4.1",
    "commit": "1cccd6970e6e60f136862f3016de58617010c01e",
    "path": "web/fm1ota.js",
    "lines": "119-129",
    "url": "https://github.com/keremimo/melodee/blob/1cccd6970e6e60f136862f3016de58617010c01e/web/fm1ota.js#L119-L129"
   },
   {
    "kind": "source",
    "repo": "keremimo/melodee",
    "ref": "v1.4.1",
    "commit": "1cccd6970e6e60f136862f3016de58617010c01e",
    "path": "web/index_pkg.html",
    "lines": "307-315",
    "url": "https://github.com/keremimo/melodee/blob/1cccd6970e6e60f136862f3016de58617010c01e/web/index_pkg.html#L307-L315"
   },
   {
    "kind": "source",
    "repo": "isod89/sloop-fm1",
    "ref": "v2.7.1",
    "commit": "4ec1ac829fd2bdf2c571ea215fb3d62477d01220",
    "path": "docs/webapp/installer/index.html",
    "lines": "178-182",
    "url": "https://github.com/isod89/sloop-fm1/blob/4ec1ac829fd2bdf2c571ea215fb3d62477d01220/docs/webapp/installer/index.html#L178-L182"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "web/fm1ota.js",
    "lines": "118-124",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/web/fm1ota.js#L118-L124"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-fomni",
    "ref": "v0.4",
    "commit": "6ecd227013cc18def0e89d035b3760eb268b342b",
    "path": "web/fm1ota.js",
    "lines": "151-157",
    "url": "https://github.com/charlesvestal/fm1-fomni/blob/6ecd227013cc18def0e89d035b3760eb268b342b/web/fm1ota.js#L151-L157"
   },
   {
    "kind": "source",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "firmware/src/settings_persist.c",
    "lines": "46-53",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/settings_persist.c#L46-L53"
   },
   {
    "kind": "source",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "firmware/src/ui.c",
    "lines": "66-77",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L66-L77"
   },
   {
    "kind": "source",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "firmware/src/ui_input.c",
    "lines": "1836-1839",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1836-L1839"
   },
   {
    "kind": "source",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "firmware/src/seq.c",
    "lines": "53-59",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L53-L59"
   },
   {
    "kind": "doc",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "README.md",
    "lines": "843-845",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/README.md#L843-L845"
   }
  ],
  "overwrites_previous": [
   {
    "from": "stock",
    "name": "Stock V15",
    "flags": "?",
    "weakest_grade": "reported",
    "at_risk": [],
    "possibly_at_risk": [
     "stock settings (and possibly patterns)"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "Possibly at risk (layout reported or inferred): stock settings (and possibly patterns).",
    "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": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "user sample slot 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, button calibration, favourites, MIDI LEARN map",
      "effect": "changed by itself: FX LATCH switched off and LEDs-invert set to INV HI when the revision migration runs; an unmarked palette becomes JIANT FM; if CHORD ENTRY ADD, HELP, a SELECT mode other than BPM, SCREEN WAKE PANEL or 2ND CORE ON was saved, the next settings write resets 2ND CORE OFF, SCOPE OUT, STEP PREVIEW OFF, CHORD ENTRY HOLD, HELP OFF, SELECT BPM and SCREEN WAKE +MIDI; JIANT also changes some FX key assignments through its USB and palette settings; also, RESTORE LAST and KNOB ACCEL read inverted; HOME becomes LOAD (TRACKS = LITE, LEVELS = ECO); when the shared setting value is above 3, JIANT resets 2ND CORE, SCOPE MIX, STEP PREVIEW, CHORD ENTRY ADD, HELP, SELECT and SCREEN WAKE to their Felucca defaults; otherwise it keeps that value but reads it as MIDI OUT; USB and palette settings also reuse part of the FX key map",
      "ways": [
       {
        "way": "by itself at its first start",
        "effect": "changed by itself: FX LATCH switched off and LEDs-invert set to INV HI when the revision migration runs; an unmarked palette becomes JIANT FM; if CHORD ENTRY ADD, HELP, a SELECT mode other than BPM, SCREEN WAKE PANEL or 2ND CORE ON was saved, the next settings write resets 2ND CORE OFF, SCOPE OUT, STEP PREVIEW OFF, CHORD ENTRY HOLD, HELP OFF, SELECT BPM and SCREEN WAKE +MIDI; JIANT also changes some FX key assignments through its USB and palette settings; also, RESTORE LAST and KNOB ACCEL read inverted; HOME becomes LOAD (TRACKS = LITE, LEVELS = ECO); when the shared setting value is above 3, JIANT resets 2ND CORE, SCOPE MIX, STEP PREVIEW, CHORD ENTRY ADD, HELP, SELECT and SCREEN WAKE to their Felucca defaults; otherwise it keeps that value but reads it as MIDI OUT; USB and palette settings also reuse part of the FX key map"
       },
       {
        "way": "by itself as you use it",
        "effect": "changed by itself: FX LATCH switched off and LEDs-invert set to INV HI when the revision migration runs; an unmarked palette becomes JIANT FM; if CHORD ENTRY ADD, HELP, a SELECT mode other than BPM, SCREEN WAKE PANEL or 2ND CORE ON was saved, the next settings write resets 2ND CORE OFF, SCOPE OUT, STEP PREVIEW OFF, CHORD ENTRY HOLD, HELP OFF, SELECT BPM and SCREEN WAKE +MIDI; JIANT also changes some FX key assignments through its USB and palette settings; also, RESTORE LAST and KNOB ACCEL read inverted; HOME becomes LOAD (TRACKS = LITE, LEVELS = ECO); when the shared setting value is above 3, JIANT resets 2ND CORE, SCOPE MIX, STEP PREVIEW, CHORD ENTRY ADD, HELP, SELECT and SCREEN WAKE to their Felucca defaults; otherwise it keeps that value but reads it as MIDI OUT; USB and palette settings also reuse part of the FX key map"
       },
       {
        "way": "when you change settings from the web editor (no question)",
        "effect": "changed by itself: FX LATCH switched off and LEDs-invert set to INV HI when the revision migration runs; an unmarked palette becomes JIANT FM; if CHORD ENTRY ADD, HELP, a SELECT mode other than BPM, SCREEN WAKE PANEL or 2ND CORE ON was saved, the next settings write resets 2ND CORE OFF, SCOPE OUT, STEP PREVIEW OFF, CHORD ENTRY HOLD, HELP OFF, SELECT BPM and SCREEN WAKE +MIDI; JIANT also changes some FX key assignments through its USB and palette settings; also, RESTORE LAST and KNOB ACCEL read inverted; HOME becomes LOAD (TRACKS = LITE, LEVELS = ECO); when the shared setting value is above 3, JIANT resets 2ND CORE, SCOPE MIX, STEP PREVIEW, CHORD ENTRY ADD, HELP, SELECT and SCREEN WAKE to their Felucca defaults; otherwise it keeps that value but reads it as MIDI OUT; USB and palette settings also reuse part of the FX key map"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "changed by itself: FX LATCH switched off and LEDs-invert set to INV HI when the revision migration runs; an unmarked palette becomes JIANT FM; if CHORD ENTRY ADD, HELP, a SELECT mode other than BPM, SCREEN WAKE PANEL or 2ND CORE ON was saved, the next settings write resets 2ND CORE OFF, SCOPE OUT, STEP PREVIEW OFF, CHORD ENTRY HOLD, HELP OFF, SELECT BPM and SCREEN WAKE +MIDI; JIANT also changes some FX key assignments through its USB and palette settings; also, RESTORE LAST and KNOB ACCEL read inverted; HOME becomes LOAD (TRACKS = LITE, LEVELS = ECO); when the shared setting value is above 3, JIANT resets 2ND CORE, SCOPE MIX, STEP PREVIEW, CHORD ENTRY ADD, HELP, SELECT and SCREEN WAKE to their Felucca defaults; otherwise it keeps that value but reads it as MIDI OUT; USB and palette settings also reuse part of the FX key map"
       },
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "changed by itself: FX LATCH switched off and LEDs-invert set to INV HI when the revision migration runs; an unmarked palette becomes JIANT FM; if CHORD ENTRY ADD, HELP, a SELECT mode other than BPM, SCREEN WAKE PANEL or 2ND CORE ON was saved, the next settings write resets 2ND CORE OFF, SCOPE OUT, STEP PREVIEW OFF, CHORD ENTRY HOLD, HELP OFF, SELECT BPM and SCREEN WAKE +MIDI; JIANT also changes some FX key assignments through its USB and palette settings; also, RESTORE LAST and KNOB ACCEL read inverted; HOME becomes LOAD (TRACKS = LITE, LEVELS = ECO); when the shared setting value is above 3, JIANT resets 2ND CORE, SCOPE MIX, STEP PREVIEW, CHORD ENTRY ADD, HELP, SELECT and SCREEN WAKE to their Felucca defaults; otherwise it keeps that value but reads it as MIDI OUT; USB and palette settings also reuse part of the FX key map"
       },
       {
        "way": "when you star a favourite (no question)",
        "effect": "changed by itself: FX LATCH switched off and LEDs-invert set to INV HI when the revision migration runs; an unmarked palette becomes JIANT FM; if CHORD ENTRY ADD, HELP, a SELECT mode other than BPM, SCREEN WAKE PANEL or 2ND CORE ON was saved, the next settings write resets 2ND CORE OFF, SCOPE OUT, STEP PREVIEW OFF, CHORD ENTRY HOLD, HELP OFF, SELECT BPM and SCREEN WAKE +MIDI; JIANT also changes some FX key assignments through its USB and palette settings; also, RESTORE LAST and KNOB ACCEL read inverted; HOME becomes LOAD (TRACKS = LITE, LEVELS = ECO); when the shared setting value is above 3, JIANT resets 2ND CORE, SCOPE MIX, STEP PREVIEW, CHORD ENTRY ADD, HELP, SELECT and SCREEN WAKE to their Felucca defaults; otherwise it keeps that value but reads it as MIDI OUT; USB and palette settings also reuse part of the FX key map"
       }
      ]
     },
     {
      "object": "the autosave (the music as you left it)",
      "effect": "lost",
      "ways": [
       {
        "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": "FM6 voice bank B1-B32",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if it ran on this unit before and its staged voice bank survived",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot A",
      "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": "project slot B",
      "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": "project slot C",
      "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": "project slot D",
      "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": "FM6 patches of the FM6 user presets",
      "effect": "converted when read, written back at your next save in that bank; the link to each preset breaks: JIANT plays a factory patch or the init voice instead",
      "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 preset bank]",
        "effect": "converted when read, written back at your next save in that bank"
       },
       {
        "way": "when you rename a slot (no question; it rewrites the whole bank) [through its preset bank]",
        "effect": "converted when read, written back at your next save in that bank"
       },
       {
        "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 link to each preset breaks: JIANT plays a factory patch or the init voice instead"
       },
       {
        "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 link to each preset breaks: JIANT plays a factory patch or the init voice instead"
       },
       {
        "way": "when you send data from the web editor (no question when the target slot is empty; it rewrites the whole bank) [through its preset bank]",
        "effect": "converted when read, written back at your next save in that bank"
       },
       {
        "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 link to each preset breaks: JIANT plays a factory patch or the init voice instead"
       }
      ]
     },
     {
      "object": "user sample slot 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 slot 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 presets 1-16",
      "effect": "converted when read, written back at your next save in that bank",
      "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"
       },
       {
        "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"
       },
       {
        "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"
       },
       {
        "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"
       },
       {
        "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"
       }
      ]
     },
     {
      "object": "user presets 17-32",
      "effect": "converted when read, written back at your next save in that bank",
      "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"
       },
       {
        "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"
       },
       {
        "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"
       },
       {
        "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"
       },
       {
        "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"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Felucca's RESTORE LAST OFF choice turns JIANT's autosave ON; Felucca's RESTORE LAST ON choice turns it OFF."
    ],
    "owner_text": "At risk by itself: user sample slot USR3; settings, button calibration, favourites, MIDI LEARN map (changed by itself: FX LATCH switched off and LEDs-invert set to INV HI when the revision migration runs; an unmarked palette becomes JIANT FM; if CHORD ENTRY ADD, HELP, a SELECT mode other than BPM, SCREEN WAKE PANEL or 2ND CORE ON was saved, the next settings write resets 2ND CORE OFF, SCOPE OUT, STEP PREVIEW OFF, CHORD ENTRY HOLD, HELP OFF, SELECT BPM and SCREEN WAKE +MIDI; JIANT also changes some FX key assignments through its USB and palette settings; also, RESTORE LAST and KNOB ACCEL read inverted; HOME becomes LOAD (TRACKS = LITE, LEVELS = ECO); when the shared setting value is above 3, JIANT resets 2ND CORE, SCOPE MIX, STEP PREVIEW, CHORD ENTRY ADD, HELP, SELECT and SCREEN WAKE to their Felucca defaults; otherwise it keeps that value but reads it as MIDI OUT; USB and palette settings also reuse part of the FX key map). At risk by itself, under a condition: the autosave (the music as you left it); FM6 voice bank B1-B32. At risk when you act: project slot A; project slot B; project slot C; project slot D; FM6 patches of the FM6 user presets (converted when read, written back at your next save in that bank; the link to each preset breaks: JIANT plays a factory patch or the init voice instead); user sample slot USR1; user sample slot USR2; 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). Felucca's RESTORE LAST OFF choice turns JIANT's autosave ON; Felucca's RESTORE LAST ON choice turns it OFF.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "sloop",
    "name": "SLOOP",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "user sample slot USR3 (header at 0xC8000)",
      "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, 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 change settings from the web editor (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 star a favourite (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 patch bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "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": "user sample slot USR4 (header at 0xE7000)",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if it ran on this unit before and its staged voice bank survived",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section A (a whole project)",
      "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": "song section B (a whole project)",
      "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": "song section C (a whole project)",
      "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": "song section D (a whole project)",
      "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": "the music in progress (autosave)",
      "effect": "lost",
      "ways": [
       {
        "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 (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 slot USR1 (header at 0xA0000)",
      "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 slot USR2 (header at 0xB4000)",
      "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 sounds U01-U16",
      "effect": "converted when read, written back at your next save in that bank",
      "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"
       },
       {
        "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"
       },
       {
        "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"
       },
       {
        "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"
       },
       {
        "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"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "converted when read, written back at your next save in that bank",
      "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"
       },
       {
        "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"
       },
       {
        "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"
       },
       {
        "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"
       },
       {
        "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"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: user sample slot USR3 (header at 0xC8000); settings, calibration, song order, SYN1-4 kits, MIDI LEARN, theme and favourites. At risk by itself, under a condition: FM6 patch bank B1-B27; user sample slot USR4 (header at 0xE7000). At risk when you act: 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); user sample slot USR1 (header at 0xA0000); user sample slot USR2 (header at 0xB4000); 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).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "x0x",
    "name": "X0X",
    "flags": "AS",
    "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": "when you change settings from the web editor (no question)",
        "effect": "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 run hardware calibration (no question)",
        "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 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"
       },
       {
        "way": "when you star a favourite (no question)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "break loops slot 3",
      "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": "break loops slot 1",
      "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": "break loops slot 2",
      "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": "X0X button calibration",
      "effect": "lost",
      "ways": [
       {
        "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 (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"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: the whole X0X project (settings, sound, all 32 patterns, song, knob motion); break loops slot 3. At risk when you act: break loops slot 1; break loops slot 2; X0X button calibration.",
    "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": "shared user presets U073-U090",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "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 select a song through MIDI PROGRAM CHANGE (no question)",
        "effect": "lost"
       },
       {
        "way": "when you switch song or project (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 change settings from the web editor (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 star a favourite (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U037-U054",
      "effect": "lost",
      "ways": [
       {
        "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 user presets U055-U072",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if it ran on this unit before and its staged voice bank survived",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U289-U378",
      "effect": "some of it lost",
      "ways": [
       {
        "way": "when you make a multi-section song with GEN (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you restore a backup from 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 from the web editor (it asks or arms a second turn first)",
        "effect": "some of it lost"
       },
       {
        "way": "when you store a section (no question)",
        "effect": "some of it lost"
       }
      ]
     },
     {
      "object": "shared user presets U379-U384",
      "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": "shared user presets U109-U126",
      "effect": "lost",
      "ways": [
       {
        "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 (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 A: patterns, song, sounds, motion, recordings",
      "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": "project B: patterns, song, sounds, motion, recordings",
      "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": "project C: patterns, song, sounds, motion, recordings",
      "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": "project D: patterns, song, sounds, motion, recordings",
      "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": "shared user presets U145-U288",
      "effect": "some of it lost",
      "ways": [
       {
        "way": "when you make a multi-section song with GEN (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you restore a backup from 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 from the web editor (it asks or arms a second turn first)",
        "effect": "some of it lost"
       },
       {
        "way": "when you store a section (no question)",
        "effect": "some of it lost"
       }
      ]
     },
     {
      "object": "shared user presets U001-U018",
      "effect": "lost",
      "ways": [
       {
        "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 (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 user presets U019-U036",
      "effect": "lost",
      "ways": [
       {
        "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 (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"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: shared user presets U073-U090; settings, factory favourites, calibration, saved template. At risk by itself, under a condition: shared user presets U037-U054; shared user presets U055-U072. At risk when you act: shared user presets U289-U378 (some of it lost); shared user presets U379-U384; shared user presets U109-U126; 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 U145-U288 (some of it lost); 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 change settings from the web editor (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 star a favourite (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FoMni button calibration",
      "effect": "lost",
      "ways": [
       {
        "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 (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"
       }
      ]
     }
    ],
    "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 change settings from the web editor (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 star a favourite (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "AMB-1 panel calibration",
      "effect": "lost",
      "ways": [
       {
        "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 (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"
       }
      ]
     }
    ],
    "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": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "recorded loop 9",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "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 select a song through MIDI PROGRAM CHANGE (no question)",
        "effect": "lost"
       },
       {
        "way": "when you switch song or project (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "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 change settings from the web editor (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 star a favourite (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "32 imported DX7 voices",
      "effect": "lost",
      "ways": [
       {
        "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 (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": "CZ-1 bank A (16 tones)",
      "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": "CZ-1 bank B (16 tones)",
      "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": "CZ-1 bank C (16 tones)",
      "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": "CZ-1 bank D (16 tones)",
      "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": "CZ-1 bank E (16 tones)",
      "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": "CZ-1 bank F (16 tones)",
      "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": "CZ-1 bank G (16 tones)",
      "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": "CZ-1 bank H (16 tones)",
      "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": "last global-save session",
      "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": "favourite marks, chord/bass type and filter",
      "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": "128 saved sounds with their complete engine patches",
      "effect": "some or all of it lost",
      "ways": [
       {
        "way": "when you make a multi-section song with GEN (no question)",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "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 (it asks or arms a second turn first)",
        "effect": "some or all of it lost"
       },
       {
        "way": "when you store a section (no question)",
        "effect": "some or all of it lost"
       }
      ]
     },
     {
      "object": "recorded loop 1",
      "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": "recorded loop 2",
      "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": "recorded loop 3",
      "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": "recorded loop 4",
      "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": "recorded loop 5",
      "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": "recorded loop 6",
      "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": "recorded loop 7",
      "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": "recorded loop 8",
      "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"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: recorded loop 9; options, playing setup and panel calibration. At risk when you act: 32 imported DX7 voices; 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 (some or all of it lost); recorded loop 1; recorded loop 2; recorded loop 3; recorded loop 4; recorded loop 5; recorded loop 6; recorded loop 7; recorded loop 8.",
    "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": "user sample slot 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 and panel calibration",
      "effect": "changed by itself: Reuses FX key-map preferences for USB stems, USB level and the palette marker; may clear CHORD ENTRY ADD; HOME becomes LOAD. On first-start revision update, saves revision 2, which GHOULBOX later reads as SCREEN OFF code 2. The shared RESTORE LAST choice has the opposite meaning; a settings round trip can also turn GHOULBOX autosave OFF; SCOPE MIX/STEP PREVIEW can select MIDI OUT CLOCK/ALL/OFF, or be cleared with CHORD ENTRY ADD; KNOB ACCEL is inverted; SCENE becomes SCREEN OFF; first-start revision update also turns FX LATCH OFF; also, shared bytes change USB, palette, chord-entry, HOME and screen preferences; RESTORE LAST has the opposite meaning and a round trip can turn GHOULBOX autosave OFF; SCOPE MIX/STEP PREVIEW become MIDI OUT or are cleared, KNOB ACCEL is inverted, SCENE becomes SCREEN OFF and first-start revision update turns FX LATCH OFF",
      "ways": [
       {
        "way": "by itself at its first start",
        "effect": "changed by itself: Reuses FX key-map preferences for USB stems, USB level and the palette marker; may clear CHORD ENTRY ADD; HOME becomes LOAD. On first-start revision update, saves revision 2, which GHOULBOX later reads as SCREEN OFF code 2. The shared RESTORE LAST choice has the opposite meaning; a settings round trip can also turn GHOULBOX autosave OFF; SCOPE MIX/STEP PREVIEW can select MIDI OUT CLOCK/ALL/OFF, or be cleared with CHORD ENTRY ADD; KNOB ACCEL is inverted; SCENE becomes SCREEN OFF; first-start revision update also turns FX LATCH OFF; also, shared bytes change USB, palette, chord-entry, HOME and screen preferences; RESTORE LAST has the opposite meaning and a round trip can turn GHOULBOX autosave OFF; SCOPE MIX/STEP PREVIEW become MIDI OUT or are cleared, KNOB ACCEL is inverted, SCENE becomes SCREEN OFF and first-start revision update turns FX LATCH OFF"
       },
       {
        "way": "by itself as you use it",
        "effect": "changed by itself: Reuses FX key-map preferences for USB stems, USB level and the palette marker; may clear CHORD ENTRY ADD; HOME becomes LOAD. On first-start revision update, saves revision 2, which GHOULBOX later reads as SCREEN OFF code 2. The shared RESTORE LAST choice has the opposite meaning; a settings round trip can also turn GHOULBOX autosave OFF; SCOPE MIX/STEP PREVIEW can select MIDI OUT CLOCK/ALL/OFF, or be cleared with CHORD ENTRY ADD; KNOB ACCEL is inverted; SCENE becomes SCREEN OFF; first-start revision update also turns FX LATCH OFF; also, shared bytes change USB, palette, chord-entry, HOME and screen preferences; RESTORE LAST has the opposite meaning and a round trip can turn GHOULBOX autosave OFF; SCOPE MIX/STEP PREVIEW become MIDI OUT or are cleared, KNOB ACCEL is inverted, SCENE becomes SCREEN OFF and first-start revision update turns FX LATCH OFF"
       },
       {
        "way": "when you change settings from the web editor (no question)",
        "effect": "changed by itself: Reuses FX key-map preferences for USB stems, USB level and the palette marker; may clear CHORD ENTRY ADD; HOME becomes LOAD. On first-start revision update, saves revision 2, which GHOULBOX later reads as SCREEN OFF code 2. The shared RESTORE LAST choice has the opposite meaning; a settings round trip can also turn GHOULBOX autosave OFF; SCOPE MIX/STEP PREVIEW can select MIDI OUT CLOCK/ALL/OFF, or be cleared with CHORD ENTRY ADD; KNOB ACCEL is inverted; SCENE becomes SCREEN OFF; first-start revision update also turns FX LATCH OFF; also, shared bytes change USB, palette, chord-entry, HOME and screen preferences; RESTORE LAST has the opposite meaning and a round trip can turn GHOULBOX autosave OFF; SCOPE MIX/STEP PREVIEW become MIDI OUT or are cleared, KNOB ACCEL is inverted, SCENE becomes SCREEN OFF and first-start revision update turns FX LATCH OFF"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "changed by itself: Reuses FX key-map preferences for USB stems, USB level and the palette marker; may clear CHORD ENTRY ADD; HOME becomes LOAD. On first-start revision update, saves revision 2, which GHOULBOX later reads as SCREEN OFF code 2. The shared RESTORE LAST choice has the opposite meaning; a settings round trip can also turn GHOULBOX autosave OFF; SCOPE MIX/STEP PREVIEW can select MIDI OUT CLOCK/ALL/OFF, or be cleared with CHORD ENTRY ADD; KNOB ACCEL is inverted; SCENE becomes SCREEN OFF; first-start revision update also turns FX LATCH OFF; also, shared bytes change USB, palette, chord-entry, HOME and screen preferences; RESTORE LAST has the opposite meaning and a round trip can turn GHOULBOX autosave OFF; SCOPE MIX/STEP PREVIEW become MIDI OUT or are cleared, KNOB ACCEL is inverted, SCENE becomes SCREEN OFF and first-start revision update turns FX LATCH OFF"
       },
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "changed by itself: Reuses FX key-map preferences for USB stems, USB level and the palette marker; may clear CHORD ENTRY ADD; HOME becomes LOAD. On first-start revision update, saves revision 2, which GHOULBOX later reads as SCREEN OFF code 2. The shared RESTORE LAST choice has the opposite meaning; a settings round trip can also turn GHOULBOX autosave OFF; SCOPE MIX/STEP PREVIEW can select MIDI OUT CLOCK/ALL/OFF, or be cleared with CHORD ENTRY ADD; KNOB ACCEL is inverted; SCENE becomes SCREEN OFF; first-start revision update also turns FX LATCH OFF; also, shared bytes change USB, palette, chord-entry, HOME and screen preferences; RESTORE LAST has the opposite meaning and a round trip can turn GHOULBOX autosave OFF; SCOPE MIX/STEP PREVIEW become MIDI OUT or are cleared, KNOB ACCEL is inverted, SCENE becomes SCREEN OFF and first-start revision update turns FX LATCH OFF"
       },
       {
        "way": "when you star a favourite (no question)",
        "effect": "changed by itself: Reuses FX key-map preferences for USB stems, USB level and the palette marker; may clear CHORD ENTRY ADD; HOME becomes LOAD. On first-start revision update, saves revision 2, which GHOULBOX later reads as SCREEN OFF code 2. The shared RESTORE LAST choice has the opposite meaning; a settings round trip can also turn GHOULBOX autosave OFF; SCOPE MIX/STEP PREVIEW can select MIDI OUT CLOCK/ALL/OFF, or be cleared with CHORD ENTRY ADD; KNOB ACCEL is inverted; SCENE becomes SCREEN OFF; first-start revision update also turns FX LATCH OFF; also, shared bytes change USB, palette, chord-entry, HOME and screen preferences; RESTORE LAST has the opposite meaning and a round trip can turn GHOULBOX autosave OFF; SCOPE MIX/STEP PREVIEW become MIDI OUT or are cleared, KNOB ACCEL is inverted, SCENE becomes SCREEN OFF and first-start revision update turns FX LATCH OFF"
       }
      ]
     },
     {
      "object": "music in progress (RESTORE LAST)",
      "effect": "lost",
      "ways": [
       {
        "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": "FM6 voice bank B1–B32",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if it ran on this unit before and its staged voice bank survived",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project A",
      "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": "project B",
      "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": "project C",
      "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": "project D",
      "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 slot 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 slot 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 sounds 1–16",
      "effect": "converted when read, written back at your next save in that bank; whole-bank conversion changes FM6 fingerprints and can detach GHOULBOX patches; GURDY slots look empty in JIANT and a save replaces them without asking",
      "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; whole-bank conversion changes FM6 fingerprints and can detach GHOULBOX patches; GURDY slots look empty in JIANT and a save replaces them without asking"
       },
       {
        "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; whole-bank conversion changes FM6 fingerprints and can detach GHOULBOX patches; GURDY slots look empty in JIANT and a save replaces them without asking"
       },
       {
        "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; whole-bank conversion changes FM6 fingerprints and can detach GHOULBOX patches; GURDY slots look empty in JIANT and a save replaces them without asking"
       },
       {
        "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; whole-bank conversion changes FM6 fingerprints and can detach GHOULBOX patches; GURDY slots look empty in JIANT and a save replaces them without asking"
       },
       {
        "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; whole-bank conversion changes FM6 fingerprints and can detach GHOULBOX patches; GURDY slots look empty in JIANT and a save replaces them without asking"
       }
      ]
     },
     {
      "object": "user sounds 17–32",
      "effect": "converted when read, written back at your next save in that bank; whole-bank conversion changes FM6 fingerprints and can detach GHOULBOX patches; GURDY slots look empty in JIANT and a save replaces them without asking",
      "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; whole-bank conversion changes FM6 fingerprints and can detach GHOULBOX patches; GURDY slots look empty in JIANT and a save replaces them without asking"
       },
       {
        "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; whole-bank conversion changes FM6 fingerprints and can detach GHOULBOX patches; GURDY slots look empty in JIANT and a save replaces them without asking"
       },
       {
        "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; whole-bank conversion changes FM6 fingerprints and can detach GHOULBOX patches; GURDY slots look empty in JIANT and a save replaces them without asking"
       },
       {
        "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; whole-bank conversion changes FM6 fingerprints and can detach GHOULBOX patches; GURDY slots look empty in JIANT and a save replaces them without asking"
       },
       {
        "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; whole-bank conversion changes FM6 fingerprints and can detach GHOULBOX patches; GURDY slots look empty in JIANT and a save replaces them without asking"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "FM6 patches for user sounds"
    ],
    "kept_unseen": [],
    "notes": [
     "GHOULBOX’s default RESTORE LAST ON leaves JIANT’s autosave OFF; a saved OFF choice turns it ON."
    ],
    "owner_text": "At risk by itself: user sample slot USR3; settings and panel calibration (changed by itself: Reuses FX key-map preferences for USB stems, USB level and the palette marker; may clear CHORD ENTRY ADD; HOME becomes LOAD. On first-start revision update, saves revision 2, which GHOULBOX later reads as SCREEN OFF code 2. The shared RESTORE LAST choice has the opposite meaning; a settings round trip can also turn GHOULBOX autosave OFF; SCOPE MIX/STEP PREVIEW can select MIDI OUT CLOCK/ALL/OFF, or be cleared with CHORD ENTRY ADD; KNOB ACCEL is inverted; SCENE becomes SCREEN OFF; first-start revision update also turns FX LATCH OFF; also, shared bytes change USB, palette, chord-entry, HOME and screen preferences; RESTORE LAST has the opposite meaning and a round trip can turn GHOULBOX autosave OFF; SCOPE MIX/STEP PREVIEW become MIDI OUT or are cleared, KNOB ACCEL is inverted, SCENE becomes SCREEN OFF and first-start revision update turns FX LATCH OFF). At risk by itself, under a condition: music in progress (RESTORE LAST); FM6 voice bank B1–B32. At risk when you act: project A; project B; project C; project D; user sample slot USR1; user sample slot USR2; user sounds 1–16 (converted when read, written back at your next save in that bank; whole-bank conversion changes FM6 fingerprints and can detach GHOULBOX patches; GURDY slots look empty in JIANT and a save replaces them without asking); user sounds 17–32 (converted when read, written back at your next save in that bank; whole-bank conversion changes FM6 fingerprints and can detach GHOULBOX patches; GURDY slots look empty in JIANT and a save replaces them without asking). Carried over: FM6 patches for user sounds. GHOULBOX’s default RESTORE LAST ON leaves JIANT’s autosave OFF; a saved OFF choice turns it ON.",
    "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, only if it ran on this unit before and its staged voice bank survived",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if its RESTORE LAST is on",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you change settings from the web editor (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you install JIANT",
        "effect": "lost"
       },
       {
        "way": "when you make a multi-section song with GEN (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you run hardware calibration (no question)",
        "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 (it asks or arms a second turn first)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you save a user preset (no question; it rewrites the whole bank)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you select a song through MIDI PROGRAM CHANGE (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you send data from the web editor (no question; it rewrites the whole bank)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you star a favourite (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you store a section (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you switch song or project (no question)",
        "effect": "damaged (part of it written over)"
       }
      ]
     },
     {
      "object": "Open USER project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install JIANT",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install JIANT",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install JIANT",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install JIANT",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install JIANT",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install JIANT",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install JIANT",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install JIANT",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install JIANT",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install JIANT",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 11",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install JIANT",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install JIANT",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 13",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install JIANT",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 14",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install JIANT",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 15",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install JIANT",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install JIANT",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open device preferences",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install JIANT",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Installing this firmware replaces Open’s sixteen USER projects, preferences and sample header before its first start, including the first 24 KiB of sample storage. This follows Open’s source-defined USER layout and the incoming program range; export projects and device samples before leaving Open.",
     "After M-VAVE Open, if no readable JIANT/Felucca-family settings copy remains, JIANT starts with RESTORE LAST OFF; its autosave writes only after you enable RESTORE LAST."
    ],
    "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. Installing this firmware replaces Open’s sixteen USER projects, preferences and sample header before its first start, including the first 24 KiB of sample storage. This follows Open’s source-defined USER layout and the incoming program range; export projects and device samples before leaving Open. After M-VAVE Open, if no readable JIANT/Felucca-family settings copy remains, JIANT starts with RESTORE LAST OFF; its autosave writes only after you enable RESTORE LAST.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fm106",
    "name": "FM-106",
    "flags": "AS",
    "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 change settings from the web editor (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 star a favourite (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "older stored user bank, if present (Beta4 does not store new edits)",
      "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"
       }
      ]
     }
    ],
    "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 when you act: 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": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "user samples 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 and panel calibration",
      "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import",
      "ways": [
       {
        "way": "by itself at its first start",
        "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import"
       },
       {
        "way": "by itself as you use it",
        "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import"
       },
       {
        "way": "when you change settings from the web editor (no question)",
        "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import"
       },
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import"
       },
       {
        "way": "when you star a favourite (no question)",
        "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import"
       }
      ]
     },
     {
      "object": "project A",
      "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": "project B",
      "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": "project C",
      "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": "project D",
      "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 samples 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 samples 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"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: user samples USR3; settings and panel calibration (converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import). At risk when you act: project A; project B; project C; project D; user samples USR1; user samples USR2.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "obervave",
    "name": "OberVave",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "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 change settings from the web editor (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 star a favourite (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "pattern 1",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "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 [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 change settings from the web editor (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 restore a backup from the web editor (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 run hardware calibration (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 star a favourite (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"
       }
      ]
     },
     {
      "object": "pattern 2",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "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 [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 change settings from the web editor (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 restore a backup from the web editor (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 run hardware calibration (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 star a favourite (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"
       }
      ]
     },
     {
      "object": "pattern 3",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "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 [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 change settings from the web editor (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 restore a backup from the web editor (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 run hardware calibration (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 star a favourite (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"
       }
      ]
     },
     {
      "object": "pattern 4",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "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 [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 change settings from the web editor (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 restore a backup from the web editor (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 run hardware calibration (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 star a favourite (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"
       }
      ]
     },
     {
      "object": "pattern 5",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "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 [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 change settings from the web editor (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 restore a backup from the web editor (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 run hardware calibration (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 star a favourite (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"
       }
      ]
     },
     {
      "object": "pattern 6",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "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 [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 change settings from the web editor (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 restore a backup from the web editor (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 run hardware calibration (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 star a favourite (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"
       }
      ]
     },
     {
      "object": "pattern 7",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "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 [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 change settings from the web editor (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 restore a backup from the web editor (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 run hardware calibration (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 star a favourite (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"
       }
      ]
     },
     {
      "object": "pattern 8",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "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 [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 change settings from the web editor (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 restore a backup from the web editor (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 run hardware calibration (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 star a favourite (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"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: saved programs and global settings; pattern 1 (its B-track sound can change if it uses a saved program; its pattern notes remain); pattern 2 (its B-track sound can change if it uses a saved program; its pattern notes remain); pattern 3 (its B-track sound can change if it uses a saved program; its pattern notes remain); pattern 4 (its B-track sound can change if it uses a saved program; its pattern notes remain); pattern 5 (its B-track sound can change if it uses a saved program; its pattern notes remain); pattern 6 (its B-track sound can change if it uses a saved program; its pattern notes remain); pattern 7 (its B-track sound can change if it uses a saved program; its pattern notes remain); pattern 8 (its B-track sound can change if it uses a saved program; its pattern notes remain).",
    "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, only if it ran on this unit before and its staged voice bank survived",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if its RESTORE LAST is on",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you make a multi-section song with GEN (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "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": "damaged (part of it written over)"
       },
       {
        "way": "when you save a project from the web editor (it asks or arms a second turn first)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you save a user preset (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you select a song through MIDI PROGRAM CHANGE (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you send data from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you switch song or project (no question)",
        "effect": "damaged (part of it written over)"
       }
      ]
     },
     {
      "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 change settings from the web editor (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 star a favourite (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "All four Polly songs",
      "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": "Polly shared memory 1",
      "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": "Polly shared memory 2",
      "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": "Polly shared memory 3",
      "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": "Polly shared memory 4",
      "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 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"
       },
       {
        "way": "when you store a section (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 5",
      "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": "Polly shared memory 6",
      "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": "Polly shared memory 7",
      "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": "Polly shared memory 8",
      "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": "Polly shared memory 9",
      "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": "Polly shared memory 10",
      "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": "Polly shared memory 11",
      "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": "Polly shared memory 12",
      "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": "Polly shared memory 13",
      "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": "Polly shared memory 14",
      "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": "Polly shared memory 15",
      "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": "Polly shared memory 16",
      "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": "Polly button and encoder calibration",
      "effect": "lost",
      "ways": [
       {
        "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 (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"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "With no readable older JIANT/Felucca-family settings copy left, this firmware supplies no JIANT RESTORE LAST preference. JIANT starts with RESTORE LAST OFF; autosave writes only after you enable it."
    ],
    "owner_text": "At risk by itself: Optional QY70 style bank; Polly setup and channel sounds. At risk when you act: All four Polly songs; Polly shared memory 1; Polly shared memory 2; Polly shared memory 3; Polly shared memory 4; 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. With no readable older JIANT/Felucca-family settings copy left, this firmware supplies no JIANT RESTORE LAST preference. JIANT starts with RESTORE LAST OFF; autosave writes only after you enable it.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "skiff",
    "name": "Skiff",
    "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)"
   }
  ],
  "overwrites_previous_grading": "Generated from the flash atlas (output/fm1/flash-atlas/). Each fact carries its evidence grade. Available firmware source was read at the mapped release; Open’s USER layout is read in its package and APP source; its native SDK/loader are closed. Stock V15’s layout is reported from V13 analysis; Baud Girl’s is inferred. Nothing was tested on a unit. Anything listed is at risk, whatever saved copy might survive.",
  "when_you_leave": [
   {
    "to": "stock",
    "name": "Stock V15",
    "flags": "?",
    "weakest_grade": "reported",
    "at_risk": [],
    "possibly_at_risk": [
     "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)",
     "FM6 patches of the FM6 user sounds",
     "song 2: four sections (whole projects)",
     "song 3: four sections (whole projects)",
     "song 4: four sections (whole projects)",
     "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",
     "user sounds U17-U32",
     "the music in progress (RESTORE LAST)",
     "FM6 voice bank B1-B32"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "Possibly at risk (layout reported or inferred): 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); FM6 patches of the FM6 user sounds; song 2: four sections (whole projects); song 3: four sections (whole projects); song 4: four sections (whole projects); 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; user sounds U17-U32; the music in progress (RESTORE LAST); FM6 voice bank B1-B32.",
    "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": [
     "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)",
     "FM6 patches of the FM6 user sounds",
     "song 2: four sections (whole projects)",
     "song 3: four sections (whole projects)",
     "song 4: four sections (whole projects)",
     "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",
     "user sounds U17-U32",
     "the music in progress (RESTORE LAST)",
     "FM6 voice bank B1-B32"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "Possibly at risk (layout reported or inferred): 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); FM6 patches of the FM6 user sounds; song 2: four sections (whole projects); song 3: four sections (whole projects); song 4: four sections (whole projects); 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; user sounds U17-U32; the music in progress (RESTORE LAST); FM6 voice bank B1-B32.",
    "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": "settings, calibration, favourites, MENU options",
      "effect": "changed by itself: the palette set to GREY: Felucca has no JIANT palette (stored 64+10), reads it as GREY and stores GREY at its next settings write, including the automatic ones; also, RESTORE LAST and KNOB ACCEL read inverted, JIANT's LOAD byte reads as Felucca's HOME view, and JIANT's revision byte reads as LEDs INV HI when LEDS is INV; MIDI OUT reads as SCOPE MIX / STEP PREVIEW flags, and JIANT USB/palette bytes overlap the FX key map",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "changed by itself: the palette set to GREY: Felucca has no JIANT palette (stored 64+10), reads it as GREY and stores GREY at its next settings write, including the automatic ones; also, RESTORE LAST and KNOB ACCEL read inverted, JIANT's LOAD byte reads as Felucca's HOME view, and JIANT's revision byte reads as LEDs INV HI when LEDS is INV; MIDI OUT reads as SCOPE MIX / STEP PREVIEW flags, and JIANT USB/palette bytes overlap the FX key map"
       },
       {
        "way": "by itself, only if its 2ND CORE is on and a render job fails or times out",
        "effect": "changed by itself: the palette set to GREY: Felucca has no JIANT palette (stored 64+10), reads it as GREY and stores GREY at its next settings write, including the automatic ones; also, RESTORE LAST and KNOB ACCEL read inverted, JIANT's LOAD byte reads as Felucca's HOME view, and JIANT's revision byte reads as LEDs INV HI when LEDS is INV; MIDI OUT reads as SCOPE MIX / STEP PREVIEW flags, and JIANT USB/palette bytes overlap the FX key map"
       },
       {
        "way": "when you erase a user preset (it asks or arms a second turn first)",
        "effect": "changed by itself: the palette set to GREY: Felucca has no JIANT palette (stored 64+10), reads it as GREY and stores GREY at its next settings write, including the automatic ones; also, RESTORE LAST and KNOB ACCEL read inverted, JIANT's LOAD byte reads as Felucca's HOME view, and JIANT's revision byte reads as LEDs INV HI when LEDS is INV; MIDI OUT reads as SCOPE MIX / STEP PREVIEW flags, and JIANT USB/palette bytes overlap the FX key map"
       },
       {
        "way": "when you learn MIDI CCs (no question)",
        "effect": "changed by itself: the palette set to GREY: Felucca has no JIANT palette (stored 64+10), reads it as GREY and stores GREY at its next settings write, including the automatic ones; also, RESTORE LAST and KNOB ACCEL read inverted, JIANT's LOAD byte reads as Felucca's HOME view, and JIANT's revision byte reads as LEDs INV HI when LEDS is INV; MIDI OUT reads as SCOPE MIX / STEP PREVIEW flags, and JIANT USB/palette bytes overlap the FX key map"
       },
       {
        "way": "when you restore a backup from the web editor",
        "effect": "changed by itself: the palette set to GREY: Felucca has no JIANT palette (stored 64+10), reads it as GREY and stores GREY at its next settings write, including the automatic ones; also, RESTORE LAST and KNOB ACCEL read inverted, JIANT's LOAD byte reads as Felucca's HOME view, and JIANT's revision byte reads as LEDs INV HI when LEDS is INV; MIDI OUT reads as SCOPE MIX / STEP PREVIEW flags, and JIANT USB/palette bytes overlap the FX key map"
       },
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "changed by itself: the palette set to GREY: Felucca has no JIANT palette (stored 64+10), reads it as GREY and stores GREY at its next settings write, including the automatic ones; also, RESTORE LAST and KNOB ACCEL read inverted, JIANT's LOAD byte reads as Felucca's HOME view, and JIANT's revision byte reads as LEDs INV HI when LEDS is INV; MIDI OUT reads as SCOPE MIX / STEP PREVIEW flags, and JIANT USB/palette bytes overlap the FX key map"
       },
       {
        "way": "when you send data from the web editor",
        "effect": "changed by itself: the palette set to GREY: Felucca has no JIANT palette (stored 64+10), reads it as GREY and stores GREY at its next settings write, including the automatic ones; also, RESTORE LAST and KNOB ACCEL read inverted, JIANT's LOAD byte reads as Felucca's HOME view, and JIANT's revision byte reads as LEDs INV HI when LEDS is INV; MIDI OUT reads as SCOPE MIX / STEP PREVIEW flags, and JIANT USB/palette bytes overlap the FX key map"
       }
      ]
     },
     {
      "object": "the music in progress (RESTORE LAST)",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if its RESTORE LAST is on",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voice bank B1-B32",
      "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",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 1 section A (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "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"
       }
      ]
     },
     {
      "object": "song 1 section B (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "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"
       }
      ]
     },
     {
      "object": "song 1 section C (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "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"
       }
      ]
     },
     {
      "object": "song 1 section D (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "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"
       }
      ]
     },
     {
      "object": "song 2: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 3: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 4: four sections (whole projects)",
      "effect": "some of it lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "some of it lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "some of it lost"
       }
      ]
     },
     {
      "object": "song 5: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 6: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 7: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 8: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "which song is current, every song's rows and scenes",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "FM6 patches of the FM6 user sounds",
     "user sounds U01-U16",
     "user sounds U17-U32"
    ],
    "kept_unseen": [],
    "notes": [
     "After JIANT's default RESTORE LAST OFF, Felucca's autosave is ON and writes by itself as you use it; if JIANT's RESTORE LAST was ON, Felucca's autosave is OFF."
    ],
    "owner_text": "At risk by itself: settings, calibration, favourites, MENU options (changed by itself: the palette set to GREY: Felucca has no JIANT palette (stored 64+10), reads it as GREY and stores GREY at its next settings write, including the automatic ones; also, RESTORE LAST and KNOB ACCEL read inverted, JIANT's LOAD byte reads as Felucca's HOME view, and JIANT's revision byte reads as LEDs INV HI when LEDS is INV; MIDI OUT reads as SCOPE MIX / STEP PREVIEW flags, and JIANT USB/palette bytes overlap the FX key map). At risk by itself, under a condition: the music in progress (RESTORE LAST); FM6 voice bank B1-B32. At risk when you act: 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); 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. Carried over: FM6 patches of the FM6 user sounds; user sounds U01-U16; user sounds U17-U32. After JIANT's default RESTORE LAST OFF, Felucca's autosave is ON and writes by itself as you use it; if JIANT's RESTORE LAST was ON, Felucca's autosave is OFF.",
    "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": "FM6 patches of the FM6 user sounds",
      "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": "settings, calibration, favourites, MENU options",
      "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": "song 1 section A (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "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"
       }
      ]
     },
     {
      "object": "song 1 section B (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "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"
       }
      ]
     },
     {
      "object": "song 1 section C (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "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"
       }
      ]
     },
     {
      "object": "song 1 section D (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "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"
       }
      ]
     },
     {
      "object": "song 2: four sections (whole projects)",
      "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"
       }
      ]
     },
     {
      "object": "song 3: four sections (whole projects)",
      "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"
       }
      ]
     },
     {
      "object": "song 4: four sections (whole projects)",
      "effect": "some of it lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (it asks or arms a second turn first)",
        "effect": "some of it lost"
       },
       {
        "way": "when you upload samples or break loops (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 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"
       }
      ]
     },
     {
      "object": "song 6: four sections (whole projects)",
      "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"
       }
      ]
     },
     {
      "object": "song 7: four sections (whole projects)",
      "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"
       }
      ]
     },
     {
      "object": "song 8: four sections (whole projects)",
      "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"
       }
      ]
     },
     {
      "object": "which song is current, every song's rows and scenes",
      "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"
       }
      ]
     },
     {
      "object": "the music in progress (RESTORE LAST)",
      "effect": "lost",
      "ways": [
       {
        "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"
       }
      ]
     },
     {
      "object": "FM6 voice bank B1-B32",
      "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": [],
    "kept_unseen": [
     "user sounds U01-U16",
     "user sounds U17-U32"
    ],
    "notes": [],
    "owner_text": "At risk by itself: FM6 patches of the FM6 user sounds; settings, calibration, favourites, MENU options. At risk when you act: 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); 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; the music in progress (RESTORE LAST); FM6 voice bank B1-B32. Kept but not shown: user sounds U01-U16; user sounds U17-U32.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "x0x",
    "name": "X0X",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "song 1 section A (a whole project)",
      "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": "song 1 section B (a whole project)",
      "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": "song 1 section C (a whole project)",
      "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": "song 1 section D (a whole project)",
      "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 sounds U17-U32",
      "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, favourites, MENU options",
      "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": "song 2: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 3: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 4: four sections (whole projects)",
      "effect": "some of it lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "some of it lost"
       }
      ]
     },
     {
      "object": "song 5: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 6: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 7: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 8: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "which song is current, every song's rows and scenes",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "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: 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); user sounds U17-U32; settings, calibration, favourites, MENU options. 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.",
    "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": "FM6 patches of the FM6 user sounds",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself at its first start [through its preset bank]",
        "effect": "lost"
       },
       {
        "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 sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself at its first start",
        "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 sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself at its first start",
        "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": "settings, calibration, favourites, MENU options",
      "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": "song 1 section A (a whole project)",
      "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": "song 1 section B (a whole project)",
      "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": "song 1 section C (a whole project)",
      "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": "song 1 section D (a whole project)",
      "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 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 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": "song 7: four sections (whole projects)",
      "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": "song 8: four sections (whole projects)",
      "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": "which song is current, every song's rows and scenes",
      "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": "the music in progress (RESTORE LAST)",
      "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": "FM6 voice bank B1-B32",
      "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": "song 2: four sections (whole projects)",
      "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": "song 3: four sections (whole projects)",
      "effect": "some of it lost",
      "ways": [
       {
        "way": "when you quick-save a project (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you restore a backup from the web editor (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you save a project from the web editor (no question)",
        "effect": "some of it lost"
       }
      ]
     },
     {
      "object": "song 4: four sections (whole projects)",
      "effect": "some of it lost",
      "ways": [
       {
        "way": "when you quick-save a project (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you restore a backup from the web editor (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you save a project from the web editor (no question)",
        "effect": "some of it lost"
       }
      ]
     },
     {
      "object": "song 5: four sections (whole projects)",
      "effect": "some of it lost",
      "ways": [
       {
        "way": "when you quick-save a project (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you restore a backup from the web editor (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you save a project from the web editor (no question)",
        "effect": "some of it lost"
       }
      ]
     },
     {
      "object": "song 6: four sections (whole projects)",
      "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: FM6 patches of the FM6 user sounds; user sounds U01-U16; user sounds U17-U32; settings, calibration, favourites, MENU options. 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); song 7: four sections (whole projects); song 8: four sections (whole projects); which song is current, every song's rows and scenes; the music in progress (RESTORE LAST); FM6 voice bank B1-B32. At risk when you act: song 2: four sections (whole projects); song 3: four sections (whole projects) (some of it lost); song 4: four sections (whole projects) (some of it lost); song 5: four sections (whole projects) (some of it lost); song 6: four sections (whole projects).",
    "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, favourites, MENU options",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "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, favourites, MENU options. At risk when you act: user sounds U01-U16.",
    "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, favourites, MENU options",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "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, favourites, MENU options. At risk when you act: user sounds U01-U16.",
    "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": "song 4: four sections (whole projects)",
      "effect": "some of it lost",
      "ways": [
       {
        "way": "by itself at its first start",
        "effect": "some of it lost"
       },
       {
        "way": "by itself as you use it",
        "effect": "some of it lost"
       },
       {
        "way": "by itself, only if a save or failed boot preparation leaves its next spare unprepared",
        "effect": "some of it lost"
       },
       {
        "way": "by itself, only if an older ChoralRoot favourites save survives and its next spare is not blank",
        "effect": "some of it lost"
       },
       {
        "way": "by itself, only if an older ChoralRoot session save survives and its next spare is not blank",
        "effect": "some of it lost"
       },
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (it asks or arms a second turn first)",
        "effect": "some of it lost"
       },
       {
        "way": "when you confirm Reset Settings with OCT+ twice (it asks or arms a second turn first)",
        "effect": "some of it lost"
       },
       {
        "way": "when you hold OCT- and OCT+ while switching on (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you hold SAVE for a global save (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you keep calibration or enter update with OCT- + OCT+ + HOME held for 5 s (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you restore CZ bank H (id 21) from backup software (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you restore favourites from backup software (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you restore settings, which also writes an empty session record from backup software (no question)",
        "effect": "some of it lost"
       }
      ]
     },
     {
      "object": "song 5: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself at its first start",
        "effect": "some of it lost"
       },
       {
        "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 sound-pool save survives and its next spare is not blank",
        "effect": "lost"
       },
       {
        "way": "by itself, only if no pool bank exists and at least one legacy UPB1/192 sound passes validation",
        "effect": "some of it lost"
       },
       {
        "way": "when you choose Overwrite or Save as new and accept with OCT+ or SAVE (no question; it rewrites the whole bank)",
        "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 confirm deletion/reset with OCT+ (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you request Import 0.21 sounds from the device manager (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "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": "lost"
       }
      ]
     },
     {
      "object": "song 7: four sections (whole projects)",
      "effect": "some of it lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "some of it lost"
       },
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (it asks or arms a second turn first)",
        "effect": "some of it lost"
       },
       {
        "way": "when you hold SAVE after recording/editing/clearing this loop (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you press REC in Advance mode with a nonempty current loop (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you restore loop id 40; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you restore loop id 41; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you restore loop id 42; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you restore loop id 43; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "some of it lost"
       }
      ]
     },
     {
      "object": "song 8: four sections (whole projects)",
      "effect": "some of it lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "some of it lost"
       },
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (it asks or arms a second turn first)",
        "effect": "some of it lost"
       },
       {
        "way": "when you hold SAVE after recording/editing/clearing this loop (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you press REC in Advance mode with a nonempty current loop (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you restore loop id 44; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you restore loop id 45; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you restore loop id 46; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you restore loop id 47; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "some of it lost"
       }
      ]
     },
     {
      "object": "which song is current, every song's rows and scenes",
      "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 48; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration, favourites, MENU options",
      "effect": "converted: After ChoralRoot saves its newer settings format, returning to JIANT starts preferences and panel calibration from defaults; it cannot read the newer record and does not retry the older copy merely because the format changed; on entering ChoralRoot, panel calibration and HOLD can carry over; ChoralRoot’s own options start at defaults and LOWCUT/BASS+ becomes Off",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "converted: After ChoralRoot saves its newer settings format, returning to JIANT starts preferences and panel calibration from defaults; it cannot read the newer record and does not retry the older copy merely because the format changed; on entering ChoralRoot, panel calibration and HOLD can carry over; ChoralRoot’s own options start at defaults and LOWCUT/BASS+ becomes Off"
       },
       {
        "way": "by itself, only if core failure barred Dual Core while the stored setting was On",
        "effect": "converted: After ChoralRoot saves its newer settings format, returning to JIANT starts preferences and panel calibration from defaults; it cannot read the newer record and does not retry the older copy merely because the format changed; on entering ChoralRoot, panel calibration and HOLD can carry over; ChoralRoot’s own options start at defaults and LOWCUT/BASS+ becomes Off"
       },
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (it asks or arms a second turn first)",
        "effect": "converted: After ChoralRoot saves its newer settings format, returning to JIANT starts preferences and panel calibration from defaults; it cannot read the newer record and does not retry the older copy merely because the format changed; on entering ChoralRoot, panel calibration and HOLD can carry over; ChoralRoot’s own options start at defaults and LOWCUT/BASS+ becomes Off"
       },
       {
        "way": "when you confirm Reset Settings with OCT+ twice (it asks or arms a second turn first)",
        "effect": "converted: After ChoralRoot saves its newer settings format, returning to JIANT starts preferences and panel calibration from defaults; it cannot read the newer record and does not retry the older copy merely because the format changed; on entering ChoralRoot, panel calibration and HOLD can carry over; ChoralRoot’s own options start at defaults and LOWCUT/BASS+ becomes Off"
       },
       {
        "way": "when you hold OCT- and OCT+ while powering on (no question)",
        "effect": "converted: After ChoralRoot saves its newer settings format, returning to JIANT starts preferences and panel calibration from defaults; it cannot read the newer record and does not retry the older copy merely because the format changed; on entering ChoralRoot, panel calibration and HOLD can carry over; ChoralRoot’s own options start at defaults and LOWCUT/BASS+ becomes Off"
       },
       {
        "way": "when you hold SAVE for a global save (no question)",
        "effect": "converted: After ChoralRoot saves its newer settings format, returning to JIANT starts preferences and panel calibration from defaults; it cannot read the newer record and does not retry the older copy merely because the format changed; on entering ChoralRoot, panel calibration and HOLD can carry over; ChoralRoot’s own options start at defaults and LOWCUT/BASS+ becomes Off"
       },
       {
        "way": "when you keep calibration or enter update with OCT- + OCT+ + HOME held for 5 s (no question)",
        "effect": "converted: After ChoralRoot saves its newer settings format, returning to JIANT starts preferences and panel calibration from defaults; it cannot read the newer record and does not retry the older copy merely because the format changed; on entering ChoralRoot, panel calibration and HOLD can carry over; ChoralRoot’s own options start at defaults and LOWCUT/BASS+ becomes Off"
       },
       {
        "way": "when you restore settings from backup software (no question)",
        "effect": "converted: After ChoralRoot saves its newer settings format, returning to JIANT starts preferences and panel calibration from defaults; it cannot read the newer record and does not retry the older copy merely because the format changed; on entering ChoralRoot, panel calibration and HOLD can carry over; ChoralRoot’s own options start at defaults and LOWCUT/BASS+ becomes Off"
       }
      ]
     },
     {
      "object": "song 6: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "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 sound-pool save survives and its next spare is not blank",
        "effect": "lost"
       },
       {
        "way": "when you choose Overwrite or Save as new and accept with OCT+ or SAVE (no question; it rewrites the whole bank)",
        "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 confirm deletion/reset with OCT+ (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you request Import 0.21 sounds from the device manager (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "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": "lost"
       }
      ]
     },
     {
      "object": "song 1 section A (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 1 section B (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 1 section C (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 1 section D (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 patches of the FM6 user sounds",
      "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": "song 2: four sections (whole projects)",
      "effect": "some of it lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (it asks or arms a second turn first)",
        "effect": "some of it lost"
       },
       {
        "way": "when you restore CZ bank A (id 14) from backup software (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you restore CZ bank B (id 15) from backup software (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you restore CZ bank C (id 16) from backup software (no question)",
        "effect": "some of it lost"
       }
      ]
     },
     {
      "object": "song 3: four sections (whole projects)",
      "effect": "some of it lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (it asks or arms a second turn first)",
        "effect": "some of it lost"
       },
       {
        "way": "when you restore CZ bank D (id 17) from backup software (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you restore CZ bank E (id 18) from backup software (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you restore CZ bank F (id 19) from backup software (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you restore CZ bank G (id 20) from backup software (no question)",
        "effect": "some of it lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "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 U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: song 4: four sections (whole projects) (some of it lost); song 5: four sections (whole projects); song 7: four sections (whole projects) (some of it lost); song 8: four sections (whole projects) (some of it lost); which song is current, every song's rows and scenes; settings, calibration, favourites, MENU options (converted: After ChoralRoot saves its newer settings format, returning to JIANT starts preferences and panel calibration from defaults; it cannot read the newer record and does not retry the older copy merely because the format changed; on entering ChoralRoot, panel calibration and HOLD can carry over; ChoralRoot’s own options start at defaults and LOWCUT/BASS+ becomes Off). At risk by itself, under a condition: song 6: four sections (whole projects). At risk when you act: 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); FM6 patches of the FM6 user sounds; song 2: four sections (whole projects) (some of it lost); song 3: four sections (whole projects) (some of it lost); user sounds U01-U16; user sounds U17-U32.",
    "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": "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": "when you send an FM6 voice bank",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration, favourites, MENU options",
      "effect": "changed by itself: Import changes reserved preference bytes and may change SERIAL/RESTORE LAST in RAM; next ordinary settings write persists them. KNOB ACCEL is inverted: JIANT’s default ON reads as OFF in GHOULBOX. JIANT’s MIDI OUT CLOCK / ALL / OFF in byte [15][24] read as GHOULBOX SCOPE MIX / STEP PREVIEW / both. JIANT’s LOAD LITE in [15][26] reads as HOME TRACKS, and LOAD ECO reads as HOME SCOPE. JIANT’s USB STEMS [15][21], USB LEVEL [15][22] and palette marker 0x4A [15][23] overlap GHOULBOX’s FX key map [15][14..23], changing some FX key assignments. JIANT’s first start stores settings revision 2 in byte [15][25], so after JIANT, GHOULBOX’s screen sleeps after 5 minutes idle by default; also, shared settings have different preference meanings",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "changed by itself: Import changes reserved preference bytes and may change SERIAL/RESTORE LAST in RAM; next ordinary settings write persists them. KNOB ACCEL is inverted: JIANT’s default ON reads as OFF in GHOULBOX. JIANT’s MIDI OUT CLOCK / ALL / OFF in byte [15][24] read as GHOULBOX SCOPE MIX / STEP PREVIEW / both. JIANT’s LOAD LITE in [15][26] reads as HOME TRACKS, and LOAD ECO reads as HOME SCOPE. JIANT’s USB STEMS [15][21], USB LEVEL [15][22] and palette marker 0x4A [15][23] overlap GHOULBOX’s FX key map [15][14..23], changing some FX key assignments. JIANT’s first start stores settings revision 2 in byte [15][25], so after JIANT, GHOULBOX’s screen sleeps after 5 minutes idle by default; also, shared settings have different preference meanings"
       },
       {
        "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: Import changes reserved preference bytes and may change SERIAL/RESTORE LAST in RAM; next ordinary settings write persists them. KNOB ACCEL is inverted: JIANT’s default ON reads as OFF in GHOULBOX. JIANT’s MIDI OUT CLOCK / ALL / OFF in byte [15][24] read as GHOULBOX SCOPE MIX / STEP PREVIEW / both. JIANT’s LOAD LITE in [15][26] reads as HOME TRACKS, and LOAD ECO reads as HOME SCOPE. JIANT’s USB STEMS [15][21], USB LEVEL [15][22] and palette marker 0x4A [15][23] overlap GHOULBOX’s FX key map [15][14..23], changing some FX key assignments. JIANT’s first start stores settings revision 2 in byte [15][25], so after JIANT, GHOULBOX’s screen sleeps after 5 minutes idle by default; also, shared settings have different preference meanings"
       },
       {
        "way": "when you restore a backup",
        "effect": "changed by itself: Import changes reserved preference bytes and may change SERIAL/RESTORE LAST in RAM; next ordinary settings write persists them. KNOB ACCEL is inverted: JIANT’s default ON reads as OFF in GHOULBOX. JIANT’s MIDI OUT CLOCK / ALL / OFF in byte [15][24] read as GHOULBOX SCOPE MIX / STEP PREVIEW / both. JIANT’s LOAD LITE in [15][26] reads as HOME TRACKS, and LOAD ECO reads as HOME SCOPE. JIANT’s USB STEMS [15][21], USB LEVEL [15][22] and palette marker 0x4A [15][23] overlap GHOULBOX’s FX key map [15][14..23], changing some FX key assignments. JIANT’s first start stores settings revision 2 in byte [15][25], so after JIANT, GHOULBOX’s screen sleeps after 5 minutes idle by default; also, shared settings have different preference meanings"
       },
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "changed by itself: Import changes reserved preference bytes and may change SERIAL/RESTORE LAST in RAM; next ordinary settings write persists them. KNOB ACCEL is inverted: JIANT’s default ON reads as OFF in GHOULBOX. JIANT’s MIDI OUT CLOCK / ALL / OFF in byte [15][24] read as GHOULBOX SCOPE MIX / STEP PREVIEW / both. JIANT’s LOAD LITE in [15][26] reads as HOME TRACKS, and LOAD ECO reads as HOME SCOPE. JIANT’s USB STEMS [15][21], USB LEVEL [15][22] and palette marker 0x4A [15][23] overlap GHOULBOX’s FX key map [15][14..23], changing some FX key assignments. JIANT’s first start stores settings revision 2 in byte [15][25], so after JIANT, GHOULBOX’s screen sleeps after 5 minutes idle by default; also, shared settings have different preference meanings"
       },
       {
        "way": "when you send settings from the editor",
        "effect": "changed by itself: Import changes reserved preference bytes and may change SERIAL/RESTORE LAST in RAM; next ordinary settings write persists them. KNOB ACCEL is inverted: JIANT’s default ON reads as OFF in GHOULBOX. JIANT’s MIDI OUT CLOCK / ALL / OFF in byte [15][24] read as GHOULBOX SCOPE MIX / STEP PREVIEW / both. JIANT’s LOAD LITE in [15][26] reads as HOME TRACKS, and LOAD ECO reads as HOME SCOPE. JIANT’s USB STEMS [15][21], USB LEVEL [15][22] and palette marker 0x4A [15][23] overlap GHOULBOX’s FX key map [15][14..23], changing some FX key assignments. JIANT’s first start stores settings revision 2 in byte [15][25], so after JIANT, GHOULBOX’s screen sleeps after 5 minutes idle by default; also, shared settings have different preference meanings"
       }
      ]
     },
     {
      "object": "FM6 voice bank B1-B32",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a compatible staged bank survives and is newer than home, or home is invalid",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 1 section A (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "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"
       }
      ]
     },
     {
      "object": "song 1 section B (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "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"
       }
      ]
     },
     {
      "object": "song 1 section C (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "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"
       }
      ]
     },
     {
      "object": "song 1 section D (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "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"
       }
      ]
     },
     {
      "object": "song 2: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 3: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 4: four sections (whole projects)",
      "effect": "some of it lost",
      "ways": [
       {
        "way": "when you restore a backup",
        "effect": "some of it lost"
       },
       {
        "way": "when you upload or erase a sample",
        "effect": "some of it lost"
       }
      ]
     },
     {
      "object": "song 5: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 6: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 7: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 8: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "which song is current, every song's rows and scenes",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "converted when read, written back at your next save in that bank; all bank records are rewritten after in-RAM migration; firmware-specific sounds can differ",
      "ways": [
       {
        "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": "converted when read, written back at your next save in that bank; all bank records are rewritten after in-RAM migration; firmware-specific sounds can differ"
       },
       {
        "way": "when you rename a user preset (no question; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank; all bank records are rewritten after in-RAM migration; firmware-specific sounds can differ"
       },
       {
        "way": "when you restore a backup",
        "effect": "converted when read, written back at your next save in that bank; all bank records are rewritten after in-RAM migration; firmware-specific sounds can differ"
       },
       {
        "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; all bank records are rewritten after in-RAM migration; firmware-specific sounds can differ"
       },
       {
        "way": "when you send user presets from the editor",
        "effect": "converted when read, written back at your next save in that bank; all bank records are rewritten after in-RAM migration; firmware-specific sounds can differ"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "converted when read, written back at your next save in that bank; all bank records are rewritten after in-RAM migration; firmware-specific sounds can differ",
      "ways": [
       {
        "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": "converted when read, written back at your next save in that bank; all bank records are rewritten after in-RAM migration; firmware-specific sounds can differ"
       },
       {
        "way": "when you rename a user preset (no question; it rewrites the whole bank)",
        "effect": "converted when read, written back at your next save in that bank; all bank records are rewritten after in-RAM migration; firmware-specific sounds can differ"
       },
       {
        "way": "when you restore a backup",
        "effect": "converted when read, written back at your next save in that bank; all bank records are rewritten after in-RAM migration; firmware-specific sounds can differ"
       },
       {
        "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; all bank records are rewritten after in-RAM migration; firmware-specific sounds can differ"
       },
       {
        "way": "when you send user presets from the editor",
        "effect": "converted when read, written back at your next save in that bank; all bank records are rewritten after in-RAM migration; firmware-specific sounds can differ"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "FM6 patches of the FM6 user sounds"
    ],
    "kept_unseen": [],
    "notes": [
     "After JIANT with its default CLICK LEVEL, GHOULBOX turns RESTORE LAST ON during import and autosaves by itself after edits and quiet, regardless of the earlier RESTORE LAST choice. A saved LOW click level is the exception: other saved preferences can leave autosave OFF. Check RESTORE LAST after importing LOW-click-level settings."
    ],
    "owner_text": "At risk by itself: the music in progress (RESTORE LAST); settings, calibration, favourites, MENU options (changed by itself: Import changes reserved preference bytes and may change SERIAL/RESTORE LAST in RAM; next ordinary settings write persists them. KNOB ACCEL is inverted: JIANT’s default ON reads as OFF in GHOULBOX. JIANT’s MIDI OUT CLOCK / ALL / OFF in byte [15][24] read as GHOULBOX SCOPE MIX / STEP PREVIEW / both. JIANT’s LOAD LITE in [15][26] reads as HOME TRACKS, and LOAD ECO reads as HOME SCOPE. JIANT’s USB STEMS [15][21], USB LEVEL [15][22] and palette marker 0x4A [15][23] overlap GHOULBOX’s FX key map [15][14..23], changing some FX key assignments. JIANT’s first start stores settings revision 2 in byte [15][25], so after JIANT, GHOULBOX’s screen sleeps after 5 minutes idle by default; also, shared settings have different preference meanings). At risk by itself, under a condition: FM6 voice bank B1-B32. At risk when you act: 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); 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; all bank records are rewritten after in-RAM migration; firmware-specific sounds can differ); user sounds U17-U32 (converted when read, written back at your next save in that bank; all bank records are rewritten after in-RAM migration; firmware-specific sounds can differ). Carried over: FM6 patches of the FM6 user sounds. After JIANT with its default CLICK LEVEL, GHOULBOX turns RESTORE LAST ON during import and autosaves by itself after edits and quiet, regardless of the earlier RESTORE LAST choice. A saved LOW click level is the exception: other saved preferences can leave autosave OFF. Check RESTORE LAST after importing LOW-click-level settings.",
    "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": "song 1 section A (a whole project)",
      "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": "song 1 section B (a whole project)",
      "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": "song 1 section C (a whole project)",
      "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": "song 1 section D (a whole project)",
      "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": "FM6 patches of the FM6 user sounds",
      "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": "song 2: four sections (whole projects)",
      "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": "song 3: four sections (whole projects)",
      "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": "song 4: four sections (whole projects)",
      "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": "song 5: four sections (whole projects)",
      "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": "song 6: four sections (whole projects)",
      "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": "song 7: four sections (whole projects)",
      "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": "song 8: four sections (whole projects)",
      "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": "which song is current, every song's rows and scenes",
      "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 sounds U01-U16",
      "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 sounds U17-U32",
      "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": "the music in progress (RESTORE LAST)",
      "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": "FM6 voice bank B1-B32",
      "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, favourites, MENU options",
      "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": [
     "The factory-sample write runs by itself right after the Workbench installs Open, before any project save. The source-built V12 bank erases 0x8D000–0x9FFFF without another sample question. The shipped Workbench asset was not compared with the source."
    ],
    "owner_text": "At risk by itself: 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); FM6 patches of the FM6 user sounds. At risk when you act: song 2: four sections (whole projects); song 3: four sections (whole projects); song 4: four sections (whole projects); 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; user sounds U17-U32; the music in progress (RESTORE LAST); FM6 voice bank B1-B32; settings, calibration, favourites, MENU options. The factory-sample write runs by itself right after the Workbench installs Open, before any project save. The source-built V12 bank erases 0x8D000–0x9FFFF without another sample question. The shipped Workbench asset was not compared with the source.",
    "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, favourites, MENU options",
      "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, favourites, MENU options.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "hortator",
    "name": "Hortator",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration, favourites, MENU options",
      "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": "song 1 section A (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 1 section B (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 1 section C (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 1 section D (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, calibration, favourites, MENU options. At risk when you act: 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).",
    "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": "settings, calibration, favourites, MENU options",
      "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: settings, calibration, favourites, MENU options.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "polly",
    "name": "Polly",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "song 1 section A (a whole project)",
      "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 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": "song 1 section B (a whole project)",
      "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": "song 1 section C (a whole project)",
      "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": "song 1 section D (a whole project)",
      "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": "FM6 patches of the FM6 user sounds",
      "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 complete power-on hardware calibration (no question) [through its preset bank]",
        "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 preset bank]",
        "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": "song 2: four sections (whole projects)",
      "effect": "some of it lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "some of it lost"
       },
       {
        "way": "when you choose COPY SONG and confirm if it asks (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you confirm FACTORY RESET (it asks or arms a second turn first)",
        "effect": "some of it lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (it asks or arms a second turn first)",
        "effect": "some of it lost"
       },
       {
        "way": "when you confirm RESTORE FROM USB on the FM-1 (it asks or arms a second turn first)",
        "effect": "some of it lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you send a backup for USB restore (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you start a stopped USB backup or enter a test session (no question)",
        "effect": "some of it lost"
       }
      ]
     },
     {
      "object": "song 3: four sections (whole projects)",
      "effect": "some of it lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "some of it lost"
       },
       {
        "way": "when you choose COPY SONG and confirm if it asks (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you confirm FACTORY RESET (it asks or arms a second turn first)",
        "effect": "some of it lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (it asks or arms a second turn first)",
        "effect": "some of it lost"
       },
       {
        "way": "when you confirm RESTORE FROM USB on the FM-1 (it asks or arms a second turn first)",
        "effect": "some of it lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you send a backup for USB restore (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you start a stopped USB backup or enter a test session (no question)",
        "effect": "some of it lost"
       }
      ]
     },
     {
      "object": "song 4: four sections (whole projects)",
      "effect": "some of it lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "some of it lost"
       },
       {
        "way": "when you choose COPY SONG and confirm if it asks (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you confirm FACTORY RESET (it asks or arms a second turn first)",
        "effect": "some of it lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (it asks or arms a second turn first)",
        "effect": "some of it lost"
       },
       {
        "way": "when you confirm RESTORE FROM USB on the FM-1 (it asks or arms a second turn first)",
        "effect": "some of it lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you send a backup for USB restore (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you start a stopped USB backup or enter a test session (no question)",
        "effect": "some of it lost"
       }
      ]
     },
     {
      "object": "song 5: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "some of it lost"
       },
       {
        "way": "when you choose COPY SONG and confirm if it asks (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you confirm FACTORY RESET (it asks or arms a second turn first)",
        "effect": "some of it lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (it asks or arms a second turn first)",
        "effect": "some of it lost"
       },
       {
        "way": "when you confirm RESTORE FROM USB on the FM-1 (it asks or arms a second turn first)",
        "effect": "some of it lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you install a QY70 style bank (no question)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you send a backup for USB restore (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you start a stopped USB backup or enter a test session (no question)",
        "effect": "some of it lost"
       }
      ]
     },
     {
      "object": "settings, calibration, favourites, MENU options",
      "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": "song 6: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install a QY70 style bank (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 7: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install a QY70 style bank (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 8: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install a QY70 style bank (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "which song is current, every song's rows and scenes",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install a QY70 style bank (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete power-on hardware calibration (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install a QY70 style bank (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "the music in progress (RESTORE LAST)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install a QY70 style bank (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voice bank B1-B32",
      "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: 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); FM6 patches of the FM6 user sounds; song 2: four sections (whole projects) (some of it lost); song 3: four sections (whole projects) (some of it lost); song 4: four sections (whole projects) (some of it lost); song 5: four sections (whole projects); settings, calibration, favourites, MENU options. At risk when you act: 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; user sounds U17-U32; the music in progress (RESTORE LAST); FM6 voice bank B1-B32.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "skiff",
    "name": "Skiff",
    "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)"
   }
  ]
 },
 "disagreements": [
  {
   "topic": "Which version the manual describes",
   "docs_say": "The manual's title line and introduction say it follows firmware v0.6.30.",
   "source_says": "The build is v0.7.4; the manual covers the newer generator, compact sequencer and stems despite its old heading.",
   "docs_ref": {
    "kind": "doc",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "docs/MANUAL.md",
    "lines": "3-9",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/docs/MANUAL.md#L3-L9"
   },
   "source_ref": {
    "kind": "source",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "firmware/src/felucca.c",
    "lines": "40-42",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/felucca.c#L40-L42"
   }
  },
  {
   "topic": "OCT- in the locked FX layer",
   "docs_say": "Manual and controls cheat sheet: with the FX layer locked open, OCT- turns all effects off.",
   "source_says": "OCT- is ALL OFF only when MENU > FX LATCH is ON. With FX LATCH OFF (the default since 0.6.64) the locked layer is not a 'set' layer, so OCT- shifts the keyboard octave and the knob macros only reset when you unlock FX.",
   "docs_ref": {
    "kind": "doc",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "docs/MANUAL.md",
    "lines": "981-984",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/docs/MANUAL.md?plain=1#L981-L984"
   },
   "source_ref": {
    "kind": "source",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "firmware/src/ui_layer.c",
    "lines": "135-138",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L135-L138"
   }
  },
  {
   "topic": "Macro dice keys while the macros are latched",
   "docs_say": "Manual: with the macros open (LFO held) or latched, F3 rolls new macro routes and G3 clears them.",
   "source_says": "Latched, the keys play notes as usual; F3 and G3 only act while LFO is held.",
   "docs_ref": {
    "kind": "doc",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "docs/MANUAL.md",
    "lines": "837-840",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/docs/MANUAL.md#L837-L840"
   },
   "source_ref": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/seq.c",
     "lines": "881-907",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L881-L907"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_layer.c",
     "lines": "99-110",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L99-L110"
    }
   ]
  },
  {
   "topic": "What F3 (new macro routes) does to silent tracks",
   "docs_say": "Manual: F3 rolls new routes on the tracks that are sounding.",
   "source_says": "F3 first removes the macro routes of every track, then adds new ones only to tracks sounding at that moment, so silent tracks lose theirs.",
   "docs_ref": {
    "kind": "doc",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "docs/MANUAL.md",
    "lines": "839",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/docs/MANUAL.md?plain=1#L839"
   },
   "source_ref": {
    "kind": "source",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "firmware/src/ui_layer.c",
    "lines": "460-507",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L460-L507"
   }
  },
  {
   "topic": "SELECT on its own (README)",
   "docs_say": "The README still assigns tempo to SELECT on GLO pages and sound dice to SELECT on EDIT.",
   "source_says": "SELECT alone browses the current group; on HOME it opens GEN. Hold GLO for tempo or EDIT for sound dice.",
   "docs_ref": {
    "kind": "doc",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "README.md",
    "lines": "289-292",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/README.md#L289-L292"
   },
   "source_ref": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_input.c",
     "lines": "1893-1915",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1893-L1915"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_input.c",
     "lines": "2274-2287",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2274-L2287"
    }
   ]
  },
  {
   "topic": "'No layer lock' (README)",
   "docs_say": "README: JIANT has no layer lock.",
   "source_says": "Felucca's double-tap lock is gone, but the FX layer locks open after a plain hold (and the LFO macros latch).",
   "docs_ref": {
    "kind": "doc",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "README.md",
    "lines": "261-264",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/README.md#L261-L264"
   },
   "source_ref": {
    "kind": "source",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "firmware/src/ui_layer.c",
    "lines": "186-220",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L186-L220"
   }
  },
  {
   "topic": "Old Felucca projects in song 1 (README)",
   "docs_say": "README: song 1 holds the usual four projects, so whatever you saved with Felucca shows up there.",
   "source_says": "Read from the import code (not tested on a unit): JIANT knows Felucca formats up to FUN9 (Felucca 1.1.x). Felucca 1.2 and later save a 3840-byte FUNA record that matches none of JIANT's import paths, so such projects would show as empty.",
   "docs_ref": {
    "kind": "doc",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "README.md",
    "lines": "259",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/README.md#L259"
   },
   "source_ref": {
    "kind": "source",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "firmware/src/project.c",
    "lines": "621-655",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/project.c#L621-L655"
   }
  },
  {
   "topic": "On-screen hint while macros are latched",
   "docs_say": "The footer drawn while the macros are latched says SELECT dices.",
   "source_says": "SELECT browses pages when macros are latched; on HOME it opens GEN. Hold LFO and turn SELECT for LFO dice.",
   "docs_ref": {
    "kind": "source",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "firmware/src/ui_layer.c",
    "lines": "79",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L79"
   },
   "source_ref": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_input.c",
     "lines": "1893-1915",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1893-L1915"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_input.c",
     "lines": "2274-2287",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L2274-L2287"
    }
   ]
  },
  {
   "topic": "EDIT on NOTE",
   "docs_say": "The manual says EDIT resets the step timing to the grid.",
   "source_says": "On NOTE, a plain EDIT tap deletes the focused note, or clears the step when ALL is focused; set MICRO to zero with KNOB 4 to put it on the grid.",
   "docs_ref": {
    "kind": "doc",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "docs/MANUAL.md",
    "lines": "572-575",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/docs/MANUAL.md#L572-L575"
   },
   "source_ref": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_input.c",
     "lines": "1714-1732",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1714-L1732"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "568",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L568"
    }
   ]
  },
  {
   "topic": "Punch-in lane length",
   "docs_say": "One manual paragraph still describes a fixed four-bar lane.",
   "source_says": "FX > PUNCH sets 1–64 steps with 1/8, 1/16 or 1/32 resolution; four bars is only the default.",
   "docs_ref": {
    "kind": "doc",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "docs/MANUAL.md",
    "lines": "976-979",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/docs/MANUAL.md#L976-L979"
   },
   "source_ref": {
    "kind": "source",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "firmware/src/pfx.c",
    "lines": "127-134",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/pfx.c#L127-L134"
   }
  },
  {
   "topic": "FX page groups in the manual",
   "docs_say": "The navigation paragraph lists only DLY and DLY 2, and ends at MASTER.",
   "source_says": "DLY 3 follows DLY 2; PUNCH follows MASTER.",
   "docs_ref": {
    "kind": "doc",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "docs/MANUAL.md",
    "lines": "168-169",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/docs/MANUAL.md#L168-L169"
   },
   "source_ref": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "506-519",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L506-L519"
    }
   ]
  },
  {
   "topic": "Second component in SEQ TOOLS",
   "docs_say": "The manual lists COMP as a tools page but omits COMP 2.",
   "source_says": "Both component pages use the same graph and allow the SEQ TOOLS layer.",
   "docs_ref": {
    "kind": "doc",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "docs/MANUAL.md",
    "lines": "334-337",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/docs/MANUAL.md#L334-L337"
   },
   "source_ref": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/params.c",
     "lines": "570-571",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L570-L571"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_layer.c",
     "lines": "102-108",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L102-L108"
    }
   ]
  },
  {
   "topic": "ARP TRNS with chord keys",
   "docs_say": "The manual describes transposition relative to the key played.",
   "source_says": "With POLY CHORD enabled, each dispatched chord tone updates ARP TRNS; the last dispatched tone sets the final shift. STRUM can spread those changes over time.",
   "docs_ref": {
    "kind": "doc",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "docs/MANUAL.md",
    "lines": "655-657",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/docs/MANUAL.md#L655-L657"
   },
   "source_ref": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/seq.c",
     "lines": "696-703",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L696-L703"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/seq.c",
     "lines": "770-805",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L770-L805"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/seq.c",
     "lines": "808-821",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/seq.c#L808-L821"
    }
   ]
  },
  {
   "topic": "WALK and CLIMB on COMP 2",
   "docs_say": "The manual broadly assigns EVERY to COMP 2 KNOB 4 for every component type.",
   "source_says": "With WALK or CLIMB selected, KNOB 4 changes the movement rate on either component page; choose another type to adjust EVERY.",
   "docs_ref": {
    "kind": "doc",
    "repo": "juanjiant-bit/JIANT",
    "ref": "v0.7.4-de2a4cb",
    "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
    "path": "docs/MANUAL.md",
    "lines": "539-544",
    "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/docs/MANUAL.md#L539-L544"
   },
   "source_ref": [
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_input.c",
     "lines": "862-868",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L862-L868"
    },
    {
     "kind": "source",
     "repo": "juanjiant-bit/JIANT",
     "ref": "v0.7.4-de2a4cb",
     "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
     "path": "firmware/src/ui_input.c",
     "lines": "899-900",
     "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L899-L900"
    }
   ]
  }
 ],
 "not_mapped": [
  "Parameter choices are summarised rather than listing every engine value, scale, genre or factory sound.",
  "Computer-keyboard bindings, browser stem rendering controls and web-editor controls are outside this panel map.",
  "The power-on light sweep and splash timing; screen wake timing beyond the first touch waking it.",
  "MIDI CC numbers are outside the panel map; USB routing, stems and program-change behavior are described where relevant.",
  "Factory tests and debug consoles beyond the owner-visible CPU TEST action.",
  "Nothing here was tried on an FM-1; source readings are at de2a4cb."
 ],
 "lights": {
  "button_fx": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "The screen shows an FX page.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "386-387",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L386-L387"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "38-39",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L38-L39"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "353-371",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L353-L371"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Idle: a glow so the button can be found in the dark (MENU > DISPLAY > LEDS: DIM HI default, DIM LO, OFF, or INV for the stock look). DIM HI has a brighter idle level in this release.",
    "short_label": "IDLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "415-444",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L415-L444"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/hal/fm1_input.h",
      "lines": "425-438",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/hal/fm1_input.h#L425-L438"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "breathing",
    "action": "Its layer's map is on screen.",
    "short_label": "LAYER OPEN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "392-393",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L392-L393"
     }
    ]
   },
   {
    "mode": "fx_locked",
    "gesture": "breathing",
    "action": "The FX layer is locked open (its map is up).",
    "short_label": "LOCKED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "392-393",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L392-L393"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "lit",
    "action": "With MENU > FX LATCH ON: an effect or FX macro is still on after you let go of FX.",
    "short_label": "FX ON",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "390-391",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L390-L391"
     }
    ]
   }
  ],
  "button_sel": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "The screen shows SCL, SCL 2 or CHORD.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/params.c",
      "lines": "520-522",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/params.c#L520-L522"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "386-387",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L386-L387"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Idle: a glow so the button can be found in the dark (MENU > DISPLAY > LEDS: DIM HI default, DIM LO, OFF, or INV for the stock look). DIM HI has a brighter idle level in this release.",
    "short_label": "IDLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "415-444",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L415-L444"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/hal/fm1_input.h",
      "lines": "425-438",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/hal/fm1_input.h#L425-L438"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "breathing",
    "action": "Its layer's map is on screen.",
    "short_label": "LAYER OPEN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "392-393",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L392-L393"
     }
    ]
   }
  ],
  "button_env": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "The screen shows ENV or ENV DEST.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "386-387",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L386-L387"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "38-39",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L38-L39"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "353-371",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L353-L371"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Idle: a glow so the button can be found in the dark (MENU > DISPLAY > LEDS: DIM HI default, DIM LO, OFF, or INV for the stock look). DIM HI has a brighter idle level in this release.",
    "short_label": "IDLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "415-444",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L415-L444"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/hal/fm1_input.h",
      "lines": "425-438",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/hal/fm1_input.h#L425-L438"
     }
    ]
   }
  ],
  "button_lfo": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "The screen shows an LFO page.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "386-387",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L386-L387"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "38-39",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L38-L39"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "353-371",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L353-L371"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Idle: a glow so the button can be found in the dark (MENU > DISPLAY > LEDS: DIM HI default, DIM LO, OFF, or INV for the stock look). DIM HI has a brighter idle level in this release.",
    "short_label": "IDLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "415-444",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L415-L444"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/hal/fm1_input.h",
      "lines": "425-438",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/hal/fm1_input.h#L425-L438"
     }
    ]
   },
   {
    "mode": "layer_macro",
    "gesture": "breathing",
    "action": "Its layer's map is on screen.",
    "short_label": "LAYER OPEN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "392-393",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L392-L393"
     }
    ]
   }
  ],
  "button_edit": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "The screen shows an EDIT page.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "386-387",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L386-L387"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "38-39",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L38-L39"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "353-371",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L353-L371"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Idle: a glow so the button can be found in the dark (MENU > DISPLAY > LEDS: DIM HI default, DIM LO, OFF, or INV for the stock look). DIM HI has a brighter idle level in this release.",
    "short_label": "IDLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "415-444",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L415-L444"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/hal/fm1_input.h",
      "lines": "425-438",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/hal/fm1_input.h#L425-L438"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "breathing",
    "action": "Its layer's map is on screen.",
    "short_label": "LAYER OPEN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "392-393",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L392-L393"
     }
    ]
   }
  ],
  "button_glo": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "The screen shows MIXER, GLOBAL or SYSTEM.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "386-387",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L386-L387"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "38-39",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L38-L39"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "353-371",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L353-L371"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Idle: a glow so the button can be found in the dark (MENU > DISPLAY > LEDS: DIM HI default, DIM LO, OFF, or INV for the stock look). DIM HI has a brighter idle level in this release.",
    "short_label": "IDLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "415-444",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L415-L444"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/hal/fm1_input.h",
      "lines": "425-438",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/hal/fm1_input.h#L425-L438"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "breathing",
    "action": "Its layer's map is on screen.",
    "short_label": "LAYER OPEN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "392-393",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L392-L393"
     }
    ]
   }
  ],
  "button_home": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "The screen shows HOME.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "386-387",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L386-L387"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "38-39",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L38-L39"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "353-371",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L353-L371"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Idle: a glow so the button can be found in the dark (MENU > DISPLAY > LEDS: DIM HI default, DIM LO, OFF, or INV for the stock look). DIM HI has a brighter idle level in this release.",
    "short_label": "IDLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "415-444",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L415-L444"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/hal/fm1_input.h",
      "lines": "425-438",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/hal/fm1_input.h#L425-L438"
     }
    ]
   }
  ],
  "button_save": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "The screen shows a SAVE page (PRESETS, USER, PROJECT, ARRANGE, TOOLS).",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "386-387",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L386-L387"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "38-39",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L38-L39"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "353-371",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L353-L371"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Idle: a glow so the button can be found in the dark (MENU > DISPLAY > LEDS: DIM HI default, DIM LO, OFF, or INV for the stock look). DIM HI has a brighter idle level in this release.",
    "short_label": "IDLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "415-444",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L415-L444"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/hal/fm1_input.h",
      "lines": "425-438",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/hal/fm1_input.h#L425-L438"
     }
    ]
   },
   {
    "mode": "layer_save",
    "gesture": "breathing",
    "action": "Its layer's map is on screen.",
    "short_label": "LAYER OPEN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "392-393",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L392-L393"
     }
    ]
   }
  ],
  "button_arp": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "The screen shows ARP or ARP 2.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "386-387",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L386-L387"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "38-39",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L38-L39"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "353-371",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L353-L371"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Idle: a glow so the button can be found in the dark (MENU > DISPLAY > LEDS: DIM HI default, DIM LO, OFF, or INV for the stock look). DIM HI has a brighter idle level in this release.",
    "short_label": "IDLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "415-444",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L415-L444"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/hal/fm1_input.h",
      "lines": "425-438",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/hal/fm1_input.h#L425-L438"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "flash",
    "action": "An arpeggio is playing on some track: flashes on the beat, longer on the bar's first beat (on the ARP pages the flash is dark).",
    "short_label": "ARP BEAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "195-201",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L195-L201"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "388-389",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L388-L389"
     }
    ]
   }
  ],
  "button_seq": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "The screen shows a SEQ page.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "386-387",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L386-L387"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "38-39",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L38-L39"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "353-371",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L353-L371"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Idle: a glow so the button can be found in the dark (MENU > DISPLAY > LEDS: DIM HI default, DIM LO, OFF, or INV for the stock look). DIM HI has a brighter idle level in this release.",
    "short_label": "IDLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "415-444",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L415-L444"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/hal/fm1_input.h",
      "lines": "425-438",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/hal/fm1_input.h#L425-L438"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "breathing",
    "action": "Its layer's map is on screen.",
    "short_label": "LAYER OPEN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "392-393",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L392-L393"
     }
    ]
   }
  ],
  "button_rec": [
   {
    "mode": "layer_rec",
    "gesture": "breathing",
    "action": "Its layer's map is on screen.",
    "short_label": "LAYER OPEN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "392-393",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L392-L393"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "lit",
    "action": "A track is armed for recording.",
    "short_label": "ARMED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "394",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L394"
     }
    ]
   }
  ],
  "button_play_stop": [
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Stopped: idle glow. Playing: dark (the green LED takes over). DIM HI has a brighter idle level in this release.",
    "short_label": "STOPPED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "415-444",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L415-L444"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/hal/fm1_input.h",
      "lines": "425-438",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/hal/fm1_input.h#L425-L438"
     }
    ]
   },
   {
    "light": "green",
    "mode": "any",
    "gesture": "lit",
    "action": "Playing.",
    "short_label": "PLAYING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "432-433",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L432-L433"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "30",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L30"
     }
    ]
   },
   {
    "light": "green",
    "mode": "any",
    "gesture": "flash",
    "action": "Count-in: flashes on each beat.",
    "short_label": "COUNT-IN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "432-433",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L432-L433"
     }
    ]
   }
  ],
  "button_oct_down": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "The keys are shifted below octave 0.",
    "short_label": "OCT DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "124-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L124-L138"
     }
    ]
   },
   {
    "mode": "dialog",
    "gesture": "lit",
    "action": "OCT- is back / no here.",
    "short_label": "BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "124-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L124-L138"
     }
    ]
   },
   {
    "mode": "dice_dialog",
    "gesture": "lit",
    "action": "OCT- is back / no here.",
    "short_label": "BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "124-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L124-L138"
     }
    ]
   },
   {
    "mode": "user",
    "gesture": "lit",
    "action": "OCT- is back / no here.",
    "short_label": "BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "124-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L124-L138"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "lit",
    "action": "OCT- is back / no here.",
    "short_label": "BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "124-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L124-L138"
     }
    ]
   },
   {
    "mode": "arrange",
    "gesture": "lit",
    "action": "OCT- is back / no here.",
    "short_label": "BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "124-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L124-L138"
     }
    ]
   },
   {
    "mode": "tools",
    "gesture": "lit",
    "action": "OCT- is back / no here.",
    "short_label": "BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "124-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L124-L138"
     }
    ]
   },
   {
    "mode": "automation",
    "gesture": "lit",
    "action": "OCT- is back / no here.",
    "short_label": "BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "124-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L124-L138"
     }
    ]
   },
   {
    "mode": "auto_list",
    "gesture": "lit",
    "action": "OCT- is back / no here.",
    "short_label": "BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "124-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L124-L138"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "lit",
    "action": "OCT- cancels.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "124-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L124-L138"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "breathing",
    "action": "On a value row: there is a previous value.",
    "short_label": "PREV",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "124-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L124-L138"
     }
    ]
   },
   {
    "mode": "about",
    "gesture": "lit",
    "action": "OCT- goes back.",
    "short_label": "BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "124-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L124-L138"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "dim",
    "action": "Only the idle glow: OCT does not shift the octave in this layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "124-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L124-L138"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "416",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L416"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "dim",
    "action": "Only the idle glow: OCT does not shift the octave in this layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "124-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L124-L138"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "416",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L416"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "dim",
    "action": "Only the idle glow: OCT does not shift the octave in this layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "124-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L124-L138"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "416",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L416"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "dim",
    "action": "Only the idle glow: OCT does not shift the octave in this layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "124-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L124-L138"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "416",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L416"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "dim",
    "action": "Only the idle glow: OCT does not shift the octave in this layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "124-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L124-L138"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "416",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L416"
     }
    ]
   },
   {
    "mode": "layer_macro",
    "gesture": "dim",
    "action": "Only the idle glow: OCT does not shift the octave in this layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "124-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L124-L138"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "416",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L416"
     }
    ]
   },
   {
    "mode": "layer_save",
    "gesture": "dim",
    "action": "Only the idle glow, although OCT- recalls the playing section in this layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "124-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L124-L138"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "659-682",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L659-L682"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "lit",
    "action": "With MENU > FX LATCH ON: OCT- turns all effects off.",
    "short_label": "ALL OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "124-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L124-L138"
     }
    ]
   },
   {
    "mode": "gen",
    "gesture": "lit",
    "action": "OCT- closes GEN.",
    "short_label": "CLOSE GEN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "124-137",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L124-L137"
     }
    ]
   },
   {
    "mode": "punch",
    "gesture": "lit",
    "action": "OCT- cancels the selected action or returns to HOME.",
    "short_label": "BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "124-137",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L124-L137"
     }
    ]
   }
  ],
  "button_oct_up": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "The keys are shifted above octave 0.",
    "short_label": "OCT UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "124-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L124-L138"
     }
    ]
   },
   {
    "mode": "dialog",
    "gesture": "breathing",
    "action": "OCT+ would do something now (confirm, or the picked action is ready).",
    "short_label": "PRESS ME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "124-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L124-L138"
     }
    ]
   },
   {
    "mode": "dice_dialog",
    "gesture": "breathing",
    "action": "OCT+ would do something now (confirm, or the picked action is ready).",
    "short_label": "PRESS ME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "124-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L124-L138"
     }
    ]
   },
   {
    "mode": "user",
    "gesture": "breathing",
    "action": "OCT+ would do something now (confirm, or the picked action is ready).",
    "short_label": "PRESS ME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "124-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L124-L138"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "breathing",
    "action": "OCT+ would do something now (confirm, or the picked action is ready).",
    "short_label": "PRESS ME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "124-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L124-L138"
     }
    ]
   },
   {
    "mode": "arrange",
    "gesture": "breathing",
    "action": "OCT+ would do something now (confirm, or the picked action is ready).",
    "short_label": "PRESS ME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "124-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L124-L138"
     }
    ]
   },
   {
    "mode": "tools",
    "gesture": "breathing",
    "action": "OCT+ would do something now (confirm, or the picked action is ready).",
    "short_label": "PRESS ME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "124-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L124-L138"
     }
    ]
   },
   {
    "mode": "automation",
    "gesture": "breathing",
    "action": "OCT+ would do something now (confirm, or the picked action is ready).",
    "short_label": "PRESS ME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "124-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L124-L138"
     }
    ]
   },
   {
    "mode": "auto_list",
    "gesture": "breathing",
    "action": "OCT+ would do something now (confirm, or the picked action is ready).",
    "short_label": "PRESS ME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "124-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L124-L138"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "breathing",
    "action": "OCT+ writes the name.",
    "short_label": "WRITE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "124-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L124-L138"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "breathing",
    "action": "On a value row: there is a next value. On CALIBRATION, INIT SYSTEM, ABOUT: OCT+ opens it.",
    "short_label": "NEXT/OPEN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "124-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L124-L138"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "dim",
    "action": "Only the idle glow: OCT does not shift the octave in this layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "124-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L124-L138"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "416",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L416"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "dim",
    "action": "Only the idle glow: OCT does not shift the octave in this layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "124-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L124-L138"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "416",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L416"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "dim",
    "action": "Only the idle glow: OCT does not shift the octave in this layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "124-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L124-L138"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "416",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L416"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "dim",
    "action": "Only the idle glow: OCT does not shift the octave in this layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "124-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L124-L138"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "416",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L416"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "dim",
    "action": "Only the idle glow: OCT does not shift the octave in this layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "124-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L124-L138"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "416",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L416"
     }
    ]
   },
   {
    "mode": "layer_macro",
    "gesture": "dim",
    "action": "Only the idle glow: OCT does not shift the octave in this layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "124-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L124-L138"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "416",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L416"
     }
    ]
   },
   {
    "mode": "layer_save",
    "gesture": "dim",
    "action": "Only the idle glow, although OCT+ stores into the playing section in this layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "124-138",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L124-L138"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "659-682",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L659-L682"
     }
    ]
   },
   {
    "mode": "gen",
    "gesture": "breathing",
    "action": "OCT+ generates the piece.",
    "short_label": "GENERATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "124-137",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L124-L137"
     }
    ]
   },
   {
    "mode": "punch",
    "gesture": "breathing",
    "action": "CLEAR is selected; OCT+ breathes even while a song or quick chain is running or armed, when pressing it instead shows STOP TO EDIT and opens no confirmation.",
    "short_label": "CLEAR LANE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "124-137",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L124-L137"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "1436-1442",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L1436-L1442"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "1167-1170",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L1167-L1170"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui.c",
      "lines": "473",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui.c#L473"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/song_main.c",
      "lines": "238-248",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/song_main.c#L238-L248"
     }
    ]
   }
  ],
  "key_lights": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Shows keys held, sequencer and arpeggiator notes, MIDI IN and all gated notes on the selected melodic track, including complete CHORD and latched chords; while stopped on the piano roll, also shows the cursor step’s notes.",
    "short_label": "NOTES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "248-306",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L248-L306"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "340-350",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L340-L350"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Idle keys glow with MENU > LEDS; DIM HI is brighter than before. With SCALE LEDS on, the scale’s keys glow and the root is brighter; the map follows the notes after track transpose.",
    "short_label": "IDLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "312-337",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L312-L337"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "435-441",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L435-L441"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/hal/fm1_input.h",
      "lines": "425-438",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/hal/fm1_input.h#L425-L438"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "lit",
    "action": "White keys: the selected lane's hits on the page shown (accents while ACC is held), with the playing step as a moving light. Black keys: the selected lane, ACC while held, the page keys when the pattern is longer than 16.",
    "short_label": "GRID",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "143-160",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L143-L160"
     }
    ]
   },
   {
    "mode": "step_grid",
    "gesture": "dim",
    "action": "Steps 1, 5, 9 and 13 of the page glow a little brighter so you can count beats; every usable key glows.",
    "short_label": "BEATS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "167-179",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L167-L179"
     },
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_input.c",
      "lines": "183-191",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_input.c#L183-L191"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "lit",
    "action": "Lit: an effect held or latched.",
    "short_label": "ACTIVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "697-740",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L697-L740"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "breathing",
    "action": "Breathing: effects that can run now (a REPEAT too long for the tempo stays dark).",
    "short_label": "AVAILABLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "697-740",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L697-L740"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "lit",
    "action": "Lit: a track or drum group sounding, a solo held, FREEZE on.",
    "short_label": "ACTIVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "697-740",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L697-L740"
     }
    ]
   },
   {
    "mode": "layer_glo",
    "gesture": "breathing",
    "action": "Breathing: solo, unmute-all, tap, UNDO (when there is something to undo), freeze.",
    "short_label": "AVAILABLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "697-740",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L697-L740"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "lit",
    "action": "Lit: the root.",
    "short_label": "ACTIVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "697-740",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L697-L740"
     }
    ]
   },
   {
    "mode": "layer_scl",
    "gesture": "breathing",
    "action": "Breathing: the other notes of the scale.",
    "short_label": "AVAILABLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "697-740",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L697-L740"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "lit",
    "action": "Lit: a kit sound that is not muted (DRUM).",
    "short_label": "ACTIVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "697-740",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L697-L740"
     }
    ]
   },
   {
    "mode": "layer_edit",
    "gesture": "breathing",
    "action": "Breathing: INIT, and RECALL when the section has a stored sound.",
    "short_label": "AVAILABLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "697-740",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L697-L740"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "lit",
    "action": "Lit: the selected drum lane.",
    "short_label": "ACTIVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "697-740",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L697-L740"
     }
    ]
   },
   {
    "mode": "layer_seq",
    "gesture": "breathing",
    "action": "Breathing: the tools that apply (CLR AUTO only with automation to clear) and the other lanes.",
    "short_label": "AVAILABLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "697-740",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L697-L740"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "lit",
    "action": "Lit: the click when it is on.",
    "short_label": "ACTIVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "697-740",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L697-L740"
     }
    ]
   },
   {
    "mode": "layer_rec",
    "gesture": "breathing",
    "action": "Breathing: CLEAR when there is something to clear, and CLICK.",
    "short_label": "AVAILABLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "697-740",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L697-L740"
     }
    ]
   },
   {
    "mode": "layer_save",
    "gesture": "lit",
    "action": "Lit: the section playing, SONG mode, SONG REC.",
    "short_label": "ACTIVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "697-740",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L697-L740"
     }
    ]
   },
   {
    "mode": "layer_save",
    "gesture": "breathing",
    "action": "Breathing: saved sections and the actions.",
    "short_label": "AVAILABLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_layer.c",
      "lines": "697-740",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_layer.c#L697-L740"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "lit",
    "action": "Every key that types or edits is lit; the key whose letters are cycling blinks.",
    "short_label": "TYPING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/ui_name.c",
      "lines": "277-285",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/ui_name.c#L277-L285"
     }
    ]
   },
   {
    "mode": "power_on",
    "gesture": "flash",
    "action": "A soft light sweeps over the keys and buttons at start-up.",
    "short_label": "SWEEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "juanjiant-bit/JIANT",
      "ref": "v0.7.4-de2a4cb",
      "commit": "de2a4cbac10fbc4b3ded4a5565341df274be89db",
      "path": "firmware/src/main.c",
      "lines": "142-143",
      "url": "https://github.com/juanjiant-bit/JIANT/blob/de2a4cbac10fbc4b3ded4a5565341df274be89db/firmware/src/main.c#L142-L143"
     }
    ]
   }
  ]
 },
 "groups": {
  "key_lights": [
   "led_a3",
   "led_a4",
   "led_as3",
   "led_as4",
   "led_b3",
   "led_b4",
   "led_c4",
   "led_c5",
   "led_cs4",
   "led_cs5",
   "led_d4",
   "led_d5",
   "led_ds4",
   "led_ds5",
   "led_e4",
   "led_e5",
   "led_f3",
   "led_f4",
   "led_f5",
   "led_fs3",
   "led_fs4",
   "led_fs5",
   "led_g3",
   "led_g4",
   "led_g5",
   "led_gs3",
   "led_gs4"
  ]
 },
 "checker_disputes": [],
 "fixed_after_check": "2026-10-13",
 "check_fixes": [
  {
   "error": "1 DATA LOSS (backup on the way to V15)",
   "fixed": "back_up_first says the backup only works from JIANT and Felucca with the archive feature, that from SLOOP, Melodee, X0X, FoMni or Baud Girl it stops and writes nothing, and what to do instead; md too."
  },
  {
   "error": "2 DATA LOSS (Felucca backup restored into JIANT)",
   "fixed": "back_up_first says JIANT refuses Felucca 1.2+ music on restore, stops at the first such project and may have written what came before; md too."
  },
  {
   "error": "4 MISLEADING (installer check)",
   "fixed": "back_up_first and md say the check is skipped when the FM-1 is already in update mode."
  },
  {
   "error": "3 DATA LOSS (dialog promise)",
   "fixed": "modes.dialog lists what asks and the overwrites that don't (with undo status); button_oct_up user/project/tools/automation entries rewritten; md adds the same list."
  },
  {
   "error": "5 MISLEADING (going back a version)",
   "fixed": "switching_note.going_back_a_version (offered builds 0.6.56-0.6.69 read the same formats; JUMP/REV repeat ignored before 0.6.62; hub's 0.6.44 noted); md too."
  },
  {
   "error": "6 MISLEADING (what undo covers)",
   "fixed": "key_g4 GLO-layer UNDO and md: section jumps and project switches set no undo point; PROJECT > LOAD does."
  },
  {
   "error": "7 MISLEADING (RESTORE LAST flips on update from <=0.6.39)",
   "fixed": "kept_on_unit and md say so."
  },
  {
   "error": "8 MISLEADING (FX + G5)",
   "fixed": "both G5 punch-in erase entries carry the REC/song condition."
  },
  {
   "error": "9 MISLEADING (piano-roll lock) + its copied run",
   "fixed": "the four step_roll LOCK entries need step entry (REC armed, stopped); the four step_grid LOCK entries reworded; no copied run left."
  },
  {
   "error": "10 MISLEADING (SEL + key on a DRUM track)",
   "fixed": "every SEL-layer root key entry says so."
  },
  {
   "error": "13 MINOR (ARP TRNS amount)",
   "fixed": "all 27 TRNS entries name the octave, TRANS and key-mode effect; md row too."
  },
  {
   "error": "14 MINOR (cut-off labels)",
   "fixed": "the 14 screen labels are now whole names of 12 characters or fewer (HOME, PIANO ROLL, DRUM GRID, CONFIRM, KEEP DICED?, CALIBRATION, FX LAYER, GLO LAYER, SEL LAYER, SEQ TOOLS, SAVE LAYER, LFO LAYER, FX LOCKED, MACRO LATCH); no two collide."
  },
  {
   "error": "16 MINOR (citations)",
   "fixed": "screen[23] cites ui_graph.c 1008-1016; the 8 drum-sound mutes cite ui_layer.c 561-562 (the press), eng_drum.c 60-62 (the mute bit), eng_drum.c 110 (the names) and MANUAL.md 326. We did not use the report's eng_drum.c:58, which is the drum-group table."
  },
  {
   "error": "12 MINOR (FUNA and SLOOP wording)",
   "fixed": "lost and md: JIANT reads its own 3744-byte FUNA, refuses Felucca's 3840-byte one and SLOOP 2.x; SLOOP 1.x FUN3 may load."
  },
  {
   "error": "cross-map: installing JIANT over another firmware",
   "fixed": "switching_note.overwrites_previous lists 8 areas with timing (settings by itself at first start; sections, songs, index, user sounds, FM6 patches only when you save; autosave only with RESTORE LAST ON; voice bank only when sent) and what Felucca, SLOOP, X0X, Melodee, FoMni and stock lose; md table too."
  },
  {
   "error": "11 MINOR (md: project switch needs stop)",
   "fixed": "md SAVE/PROJECT row says stopped only."
  },
  {
   "error": "15 MINOR (copied runs)",
   "fixed": "rewritten: encoder_knob1[76], screen[76], all LOCK entries, back_up_first, hub_flag, modes mseq/step_grid/arp_trns, button_rec[5], button_oct_up[14], THROW, C.LEN, section-play keys, 16 NAME keys, CLR AUTO, FX TARGET; md lines 16, 65, 78, 85, 105, 116, 134, 142, 153, 216, 218. Lists of on-screen names were left as they are."
  },
  {
   "error": "recheck 2 DATA LOSS (0.6.44 drops DS, DL, FG)",
   "fixed": "going_back_a_version and md: 0.6.44 reads projects without the drum sends, LAYER/FEEDBK and FUGUE heads, and a store or save there loses them for good."
  },
  {
   "error": "recheck 8 MINOR (never-asks list)",
   "fixed": "modes.dialog and md add SONG REC, LFO + F3/G3, the scene store/clear on ARRANGE KNOB 4 and FX + G5 while recording."
  },
  {
   "error": "recheck 'not counted' (md:40 copied phrase)",
   "fixed": "md FX row reworded."
  }
 ],
 "refreshed_from": {
  "release": "v0.6.71-f139492",
  "commit": "f139492d2a4863e71f5a35bb41577149163b61e4",
  "date": "2026-10-16"
 },
 "refresh_check_fixes": [
  {
   "round": 1,
   "error": "1 downgrade data loss",
   "fixed": "Add first-lane WALK/CLIMB rejection and automatic pre-0.6.81 arrangement loss, including after backup restore.",
   "at": "switching_note.going_back_a_version"
  },
  {
   "round": 1,
   "error": "1 downgrade data loss",
   "fixed": "Complete downgrade warnings for WALK/CLIMB and the automatic older arrangement overwrite.",
   "at": "refresh/work/jiant.storage.json changes[2]-[13]"
  },
  {
   "round": 1,
   "error": "2 confirmation and overwrite lists",
   "fixed": "Separate GEN and dice-preview input from ordinary confirmations; add PUNCH CLEAR and silent kit/project/GEN overwrites.",
   "at": "modes[66]"
  },
  {
   "round": 1,
   "error": "3 GEN undo and stored writes",
   "fixed": "action: Generates a piece from the GEN settings and leaves GEN open; using unchanged settings again picks a new seed first. GLO + G4 restores the live music only; generated stored sections and ARRANGE rows stay changed. With FORM PARTS or SONG, when no section contains owner-stored work, generation stores A–C or A–D and replaces ARRANGE; sections reach flash when stopped and rows after about two stopped seconds.",
   "at": "controls.button_oct_up[21]"
  },
  {
   "round": 1,
   "error": "3 GEN undo and stored writes",
   "fixed": "action: Closes GEN, keeping the current piece. GLO + G4 restores the live music only; generated stored sections and ARRANGE rows stay changed. With FORM PARTS or SONG, when no section contains owner-stored work, generation stores A–C or A–D and replaces ARRANGE; sections reach flash when stopped and rows after about two stopped seconds.",
   "at": "controls.button_oct_down[24]"
  },
  {
   "round": 1,
   "error": "3 GEN undo and stored writes",
   "fixed": "action: Opens GEN to choose a genre, seed, energy, form and part amounts; OCT+ makes the piece, SELECT changes its three pages, and HOME or OCT- closes it. GLO + G4 restores the live music only; generated stored sections and ARRANGE rows stay changed. With FORM PARTS or SONG, when no section contains owner-stored work, generation stores A–C or A–D and replaces ARRANGE; sections reach flash when stopped and rows after about two stopped seconds.",
   "at": "controls.encoder_select[1]"
  },
  {
   "round": 1,
   "error": "3 GEN undo and stored writes",
   "fixed": "action: Opens GEN to choose a genre, seed, energy, form and part amounts; OCT+ makes the piece, SELECT changes its three pages, and HOME or OCT- closes it. GLO + G4 restores the live music only; generated stored sections and ARRANGE rows stay changed. With FORM PARTS or SONG, when no section contains owner-stored work, generation stores A–C or A–D and replaces ARRANGE; sections reach flash when stopped and rows after about two stopped seconds.",
   "at": "controls.encoder_select[2]"
  },
  {
   "round": 1,
   "error": "3 GEN undo and stored writes",
   "fixed": "action: UNDO the last big change, including generation, STRETCH, clears, INIT, RECALL and project LOAD; press again to redo. Section jumps and project switches set no undo point. Unavailable during song playback; lost at power-off. After GEN, this restores the live music but leaves its stored sections and arrangement unchanged.",
   "at": "controls.key_g4[8]"
  },
  {
   "round": 1,
   "error": "3 GEN undo and stored writes",
   "fixed": "action: Three SELECT pages configure a new piece: genre/seed/energy/form, four part amounts, then lead/complexity/swing/human variation; OCT+ generates, PLAY auditions, HOME or OCT- closes it. With FORM PARTS or SONG, when no section contains owner-stored work, generation stores A–C or A–D and replaces ARRANGE; sections reach flash when stopped and rows after about two stopped seconds. GLO + G4 restores the live music only; generated stored sections and ARRANGE rows stay changed.",
   "at": "controls.screen[89]"
  },
  {
   "round": 1,
   "error": "3 GEN undo and stored writes",
   "fixed": "what_it_is: Three SELECT pages configure a new piece: genre/seed/energy/form, four part amounts, then lead/complexity/swing/human variation; OCT+ generates, PLAY auditions, HOME or OCT- closes it. With FORM PARTS or SONG, when no section contains owner-stored work, generation stores A–C or A–D and replaces ARRANGE; sections reach flash when stopped and rows after about two stopped seconds. GLO + G4 restores the live music only; generated stored sections and ARRANGE rows stay changed.",
   "at": "modes[87]"
  },
  {
   "round": 1,
   "error": "4 OCT+ while arrangement plays",
   "fixed": "action: While no arrangement is playing, generates a piece from the GEN settings and leaves GEN open; using unchanged settings again picks a new seed first. GLO + G4 restores the live music only; generated stored sections and ARRANGE rows stay changed. With FORM PARTS or SONG, when no section contains owner-stored work, generation stores A–C or A–D and replaces ARRANGE; sections reach flash when stopped and rows after about two stopped seconds. During arrangement playback, OCT+ instead closes GEN and generates nothing.",
   "at": "controls.button_oct_up[21]"
  },
  {
   "round": 1,
   "error": "5 MIDI replaces kit and project",
   "fixed": "action: Connected: TRS MIDI IN follows USB routing (SYSTEM > ROUTE CH1-6 or SEL); GLOBAL > CLOCK TRS follows its transport. Track-channel Program Change loads sounds; choosing a DRUM factory preset replaces the section’s kit, layers and sends in RAM without undo. Channel 16 programs 0–3 request A–D; 16–23 switch projects 1–8 while stopped, flushing stored sections and writing the index before section A replaces the live music if present, with no undo.",
   "at": "controls.jack_midi_in[0]"
  },
  {
   "round": 1,
   "error": "6 REC+EDIT aliases",
   "fixed": "action: REC held first: clears the selected track’s EDIT automation and step locks, including HUMAN, REC Q, CHORD, VOICING and STRUM through their shared parameter slots; stored values stay. No confirmation.",
   "at": "controls.button_edit[7]"
  },
  {
   "round": 1,
   "error": "7 old project TRANS",
   "fixed": "Explain the changed sound of older projects with nonzero TRANS, without altering generated text.",
   "at": "switching_note.kept_on_unit"
  },
  {
   "round": 1,
   "error": "8 official installer and STABLE",
   "fixed": "Restore JIANT’s own installer URL; distinguish the hub and snapshot STABLE 0.7.2 from the lead-measured later promotion to 0.7.4.",
   "at": "install"
  },
  {
   "round": 1,
   "error": "8 official installer and STABLE",
   "fixed": "Restore snapshot-versus-current installer version provenance with the supplied later commit source.",
   "at": "version_note"
  },
  {
   "round": 1,
   "error": "9 other installers miss JIANT",
   "fixed": "Name the affected installer versions, failed port/INFO checks, and JIANT-owned backup/return-to-V15 path.",
   "at": "switching_note.kept_on_unit"
  },
  {
   "round": 1,
   "error": "9 other installers miss JIANT",
   "fixed": "Name the affected installer versions, failed port/INFO checks, and JIANT-owned backup/return-to-V15 path.",
   "at": "switching_note.back_up_first"
  },
  {
   "round": 1,
   "error": "9 other installers miss JIANT",
   "fixed": "action: Connected: USB MIDI, USB audio and the web editor with backup; the computer sees JIANT FM, with stereo output or six mono tracks plus stereo effects at 44.1 kHz through SYSTEM > USB > STEMS. Inspected Felucca 1.6.1, Melodee 1.4.1, SLOOP 2.7.1, X0X 1.1.0 and FoMni 0.4 installers may not find this new port name; Felucca/Melodee backup checks reject JIANT INFO too. Back up and return to V15 with JIANT’s own installer first (read from code, not tested on a unit).",
   "at": "controls.jack_usb[0]"
  },
  {
   "round": 1,
   "error": "10 imported settings switches",
   "fixed": "Explain imported byte values for stems, MIDI output and conditional fixed USB attenuation.",
   "at": "switching_note.kept_on_unit"
  },
  {
   "round": 1,
   "error": "11 PUNCH name",
   "fixed": "what_it_is: The shared punch-in effects lane: length, resolution, status and clear.",
   "at": "modes[82]"
  },
  {
   "round": 1,
   "error": "11 PUNCH name",
   "fixed": "action: The shared punch-in effects lane: length, resolution, status and clear.",
   "at": "controls.screen[84]"
  },
  {
   "round": 1,
   "error": "12 GEN transport selection",
   "fixed": "action: Starts or stops transport while GEN stays open; it starts ARRANGE when the SAVE layer’s PLAY setting is SONG, which GEN selects for both PARTS and SONG forms.",
   "at": "controls.button_play_stop[4]"
  },
  {
   "round": 1,
   "error": "13 GEN knob label",
   "fixed": "short_label: ENERGY",
   "at": "controls.encoder_knob3[84]"
  },
  {
   "round": 1,
   "error": "14 REPEAT total copies",
   "fixed": "action: Sets 2–8 copies in total, or as many full copies as fit within 64 steps; x2 adds one copy to the original. OFF restores the base; automation and locks follow. Arrangement playback blocks the edit with STOP TO EDIT.",
   "at": "controls.encoder_knob2[82]"
  },
  {
   "round": 1,
   "error": "15 song playback guards",
   "fixed": "action: Deletes the focused note without moving the cursor; with ALL focused, clears the step and its locks and advances. Holding a step instead clears only its locks. While an arrangement plays, leaves it unchanged and shows STOP TO EDIT.",
   "at": "controls.button_edit[8]"
  },
  {
   "round": 1,
   "error": "15 song playback guards",
   "fixed": "action: Spreads or squeezes the pattern by factors 2–8 as turned; x1 restores the base, notes beyond step 64 are cut, and automation and locks move with the steps. While an arrangement plays, leaves it unchanged and shows STOP TO EDIT.",
   "at": "controls.encoder_knob1[82]"
  },
  {
   "round": 1,
   "error": "15 song playback guards",
   "fixed": "action: Sets 2–8 copies in total, or as many full copies as fit within 64 steps; x2 adds one copy to the original. OFF restores the base; automation and locks follow. Arrangement playback blocks the edit with STOP TO EDIT.",
   "at": "controls.encoder_knob2[82]"
  },
  {
   "round": 1,
   "error": "15 song playback guards",
   "fixed": "action: Picks the step's second component; CHANCE and RATCH are only on COMP. While an arrangement plays, leaves it unchanged and shows STOP TO EDIT.",
   "at": "controls.encoder_knob2[83]"
  },
  {
   "round": 1,
   "error": "15 song playback guards",
   "fixed": "action: Changes its value, an arp's order and range, or WALK/CLIMB direction and range. While an arrangement plays, leaves it unchanged and shows STOP TO EDIT.",
   "at": "controls.encoder_knob3[83]"
  },
  {
   "round": 1,
   "error": "15 song playback guards",
   "fixed": "action: Sets EVERY, the loops when both components apply; on WALK or CLIMB sets how many loops each move waits instead. While an arrangement plays, leaves it unchanged and shows STOP TO EDIT.",
   "at": "controls.encoder_knob4[83]"
  },
  {
   "round": 1,
   "error": "15 song playback guards",
   "fixed": "how_to_get_there: Turn SELECT on HOME, or hold HOME and turn SELECT elsewhere; while an arrangement plays, GEN does not open and STOP TO EDIT appears.",
   "at": "modes[87]"
  },
  {
   "round": 1,
   "error": "15 song playback guards",
   "fixed": "action: CLEAR is selected; OCT+ breathes even during arrangement playback, when pressing it instead shows STOP TO EDIT and opens no confirmation.",
   "at": "lights.button_oct_up[19]"
  },
  {
   "round": 1,
   "error": "10 imported settings switches",
   "fixed": "State the actual effects of imported byte values, including when attenuation applies.",
   "at": "refresh/work/jiant.storage.json changes[0],[19]"
  },
  {
   "round": 1,
   "error": "9 other installers miss JIANT",
   "fixed": "Limit compatibility claim to JIANT’s own tools and document foreign port/backup rejection.",
   "at": "refresh/work/jiant.storage.json changes[22]"
  },
  {
   "round": 1,
   "error": "storage 2(a) installer detection",
   "fixed": "Add install and back-to-stock path report for new: foreign installer detection.",
   "at": "refresh/work/jiant.storage.json changes[23]"
  },
  {
   "round": 1,
   "error": "storage 2(b) GEN writes",
   "fixed": "Add written_when / undo report for new: GEN sections and song index.",
   "at": "refresh/work/jiant.storage.json changes[24]"
  },
  {
   "round": 1,
   "error": "storage 2(c) MIDI project switch",
   "fixed": "Add written_when / current music report for new: MIDI channel 16 project change.",
   "at": "refresh/work/jiant.storage.json changes[25]"
  },
  {
   "round": 1,
   "error": "storage 2(d) DRUM kit replacement",
   "fixed": "Add RAM changes / saved payload report for new: DRUM preset kit replacement.",
   "at": "refresh/work/jiant.storage.json changes[26]"
  },
  {
   "round": 1,
   "error": "storage 2(e) TRANS playback",
   "fixed": "Add load/playback semantics report for new: existing project TRANS interpretation.",
   "at": "refresh/work/jiant.storage.json changes[27]"
  },
  {
   "round": 1,
   "error": "1 owner guide",
   "fixed": "Update the corresponding owner-facing claim from report error 1.",
   "at": "control-maps/jiant.md"
  },
  {
   "round": 1,
   "error": "2 owner guide",
   "fixed": "Update the corresponding owner-facing claim from report error 2.",
   "at": "control-maps/jiant.md"
  },
  {
   "round": 1,
   "error": "3 owner guide",
   "fixed": "Update the corresponding owner-facing claim from report error 3.",
   "at": "control-maps/jiant.md"
  },
  {
   "round": 1,
   "error": "4 owner guide",
   "fixed": "Update the corresponding owner-facing claim from report error 4.",
   "at": "control-maps/jiant.md"
  },
  {
   "round": 1,
   "error": "5 owner guide",
   "fixed": "Update the corresponding owner-facing claim from report error 5.",
   "at": "control-maps/jiant.md"
  },
  {
   "round": 1,
   "error": "6 owner guide",
   "fixed": "Update the corresponding owner-facing claim from report error 6.",
   "at": "control-maps/jiant.md"
  },
  {
   "round": 1,
   "error": "7 owner guide",
   "fixed": "Update the corresponding owner-facing claim from report error 7.",
   "at": "control-maps/jiant.md"
  },
  {
   "round": 1,
   "error": "8 owner guide",
   "fixed": "Update the corresponding owner-facing claim from report error 8.",
   "at": "control-maps/jiant.md"
  },
  {
   "round": 1,
   "error": "9 owner guide",
   "fixed": "Update the corresponding owner-facing claim from report error 9.",
   "at": "control-maps/jiant.md"
  },
  {
   "round": 1,
   "error": "10 owner guide",
   "fixed": "Update the corresponding owner-facing claim from report error 10.",
   "at": "control-maps/jiant.md"
  },
  {
   "round": 1,
   "error": "12 owner guide",
   "fixed": "Update the corresponding owner-facing claim from report error 12.",
   "at": "control-maps/jiant.md"
  },
  {
   "round": 1,
   "error": "14 owner guide",
   "fixed": "Update the corresponding owner-facing claim from report error 14.",
   "at": "control-maps/jiant.md"
  },
  {
   "round": 1,
   "error": "15 owner guide",
   "fixed": "Update the corresponding owner-facing claim from report error 15.",
   "at": "control-maps/jiant.md"
  },
  {
   "round": 2,
   "error": "1 song and quick-chain guards",
   "fixed": "Include both running and armed songs or quick chains in the edit/generation guard.",
   "at": "controls.button_edit[8]"
  },
  {
   "round": 2,
   "error": "1 song and quick-chain guards",
   "fixed": "Include both running and armed songs or quick chains in the edit/generation guard.",
   "at": "controls.encoder_knob1[82]"
  },
  {
   "round": 2,
   "error": "1 song and quick-chain guards",
   "fixed": "Include both running and armed songs or quick chains in the edit/generation guard.",
   "at": "controls.encoder_knob2[82]"
  },
  {
   "round": 2,
   "error": "1 song and quick-chain guards",
   "fixed": "Include both running and armed songs or quick chains in the edit/generation guard.",
   "at": "controls.encoder_knob2[83]"
  },
  {
   "round": 2,
   "error": "1 song and quick-chain guards",
   "fixed": "Include both running and armed songs or quick chains in the edit/generation guard.",
   "at": "controls.encoder_knob3[83]"
  },
  {
   "round": 2,
   "error": "1 song and quick-chain guards",
   "fixed": "Include both running and armed songs or quick chains in the edit/generation guard.",
   "at": "controls.encoder_knob4[83]"
  },
  {
   "round": 2,
   "error": "1 song and quick-chain guards",
   "fixed": "Include both running and armed songs or quick chains in the edit/generation guard.",
   "at": "controls.button_oct_up[21]"
  },
  {
   "round": 2,
   "error": "1 song and quick-chain guards",
   "fixed": "Include both running and armed songs or quick chains in the edit/generation guard.",
   "at": "modes[87]"
  },
  {
   "round": 2,
   "error": "1 song and quick-chain guards",
   "fixed": "Include both running and armed songs or quick chains in the edit/generation guard.",
   "at": "lights.button_oct_up[19]"
  },
  {
   "round": 2,
   "error": "1 song and quick-chain guards",
   "fixed": "Name armed and running quick chains as well as songs in both guard explanations.",
   "at": "control-maps/jiant.md"
  },
  {
   "round": 2,
   "error": "2 precise and historical citations",
   "fixed": "Remove unrelated guards; cite the entry’s own handler and shared chain_busy definition.",
   "at": "controls.button_edit[8]"
  },
  {
   "round": 2,
   "error": "2 precise and historical citations",
   "fixed": "Remove unrelated guards; cite the entry’s own handler and shared chain_busy definition.",
   "at": "controls.encoder_knob1[82]"
  },
  {
   "round": 2,
   "error": "2 precise and historical citations",
   "fixed": "Remove unrelated guards; cite the entry’s own handler and shared chain_busy definition.",
   "at": "controls.encoder_knob2[82]"
  },
  {
   "round": 2,
   "error": "2 precise and historical citations",
   "fixed": "Remove unrelated guards; cite the entry’s own handler and shared chain_busy definition.",
   "at": "controls.encoder_knob2[83]"
  },
  {
   "round": 2,
   "error": "2 precise and historical citations",
   "fixed": "Remove unrelated guards; cite the entry’s own handler and shared chain_busy definition.",
   "at": "controls.encoder_knob3[83]"
  },
  {
   "round": 2,
   "error": "2 precise and historical citations",
   "fixed": "Remove unrelated guards; cite the entry’s own handler and shared chain_busy definition.",
   "at": "controls.encoder_knob4[83]"
  },
  {
   "round": 2,
   "error": "2 precise and historical citations",
   "fixed": "Add four explicitly historical, full-commit-pinned code comparisons for 0.6.71 rejection and automatic arrangement reset; compared_commit distinguishes these from stale current-release citations.",
   "at": "switching_note.going_back_a_version_source"
  },
  {
   "round": 2,
   "error": "2 precise and historical citations",
   "fixed": "Carry the old-reader and old-startup code comparisons beside the downgrade warnings.",
   "at": "refresh/work/jiant.storage.json changes[2]-[13]"
  },
  {
   "round": 2,
   "error": "3 TRANS release attribution",
   "fixed": "Date the audible TRANS change to released 0.6.82 per the changelog, rather than the code’s 0.6.81 working-version comment.",
   "at": "switching_note.kept_on_unit"
  },
  {
   "round": 2,
   "error": "3 TRANS release attribution",
   "fixed": "Use the 0.6.82 release boundary and cite its changelog entry.",
   "at": "refresh/work/jiant.storage.json changes[27]"
  },
  {
   "round": 2,
   "error": "3 TRANS release attribution",
   "fixed": "Correct the older-project TRANS release boundary to 0.6.82.",
   "at": "control-maps/jiant.md"
  },
  {
   "round": 2,
   "error": "4 conditional GEN transport selection",
   "fixed": "Limit automatic SONG selection to generation that actually writes sections and ARRANGE; LOOP and owner-section protection preserve the existing setting.",
   "at": "controls.button_play_stop[4]"
  },
  {
   "round": 2,
   "error": "4 conditional GEN transport selection",
   "fixed": "Explain the successful-write condition and the LOOP/owner-section early returns.",
   "at": "control-maps/jiant.md"
  }
 ]
}