{
 "firmware": "Jangada",
 "slug": "jangada",
 "author": "zednaked (Jangada), based on Felucca by Leo Kuroshita / Hügelton Instruments",
 "repo": "https://github.com/zednaked/jangada",
 "licence": "GPL-3.0-only",
 "closed_source": false,
 "mapped_release": "v1.0.1",
 "mapped_commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
 "release_date": "2026-10-16",
 "date_mapped": "2026-10-17",
 "status": "Independently checked: zero errors in round 3 (2026-10-17). No device testing.",
 "turns_it_into": "A four-track instrument with thirteen synth engines, drum kits, evolving drones and keys for live effects.",
 "docs": [
  {
   "title": "Jangada English guide",
   "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/README.md",
   "words": 5909,
   "read_at": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45"
  }
 ],
 "install": {
  "official": "https://github.com/zednaked/jangada/releases/tag/v1.0.1",
  "hub": "https://thefirmwarehub.com/"
 },
 "part_id_notes": "The panel’s SEL button is called SCL in the source and on its pages; it is button_sel here, and white keys are numbered from F3 to G5. Button indicators use lights.<button part>, with the key LEDs grouped under lights.key_lights. The source drives one logical PLAY indicator and does not separately address a green PLAY LED.",
 "evidence_note": "Read-only interpretation of the supplied tagged source and English guide; no firmware code, build, tools or tests were executed and nothing was tested on a unit.",
 "entry_precedence": "Specific modes and when conditions override general any entries; menu and clear questions take input before ordinary page handlers, layers take keys and KNOB 1–4, and held SEQ steps take the three upper encoders. Key release follows the layer or track where the key began.",
 "modes": [
  {
   "id": "env",
   "name": "ENV",
   "how_to_get_there": "Tap ENV until ENV appears.",
   "what_it_is": "Shows the amplitude envelope with attack, decay, sustain and release controls.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "394",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L394"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "394",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L394"
    }
   ]
  },
  {
   "id": "env_dest",
   "name": "ENV DEST",
   "how_to_get_there": "Tap ENV until ENV DEST appears.",
   "what_it_is": "Shows envelope amounts for filter, pitch and shape, plus envelope tempo sync.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "395",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L395"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "395",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L395"
    }
   ]
  },
  {
   "id": "lfo",
   "name": "LFO",
   "how_to_get_there": "Tap LFO until LFO appears.",
   "what_it_is": "Shows the LFO waveform and phase with rate, wave, phase and fade controls.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "397",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L397"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "397",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L397"
    }
   ]
  },
  {
   "id": "lfo_2",
   "name": "LFO 2",
   "how_to_get_there": "Tap LFO until LFO 2 appears.",
   "what_it_is": "Shows LFO tempo sync, retrigger mode and polarity.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "398",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L398"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "398",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L398"
    }
   ]
  },
  {
   "id": "lfo_dest",
   "name": "LFO DEST",
   "how_to_get_there": "Tap LFO until LFO DEST appears.",
   "what_it_is": "Shows LFO amounts for pitch, filter, shape and amplitude.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "399",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L399"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "399",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L399"
    }
   ]
  },
  {
   "id": "mod_1",
   "name": "MOD 1",
   "how_to_get_there": "Tap LFO until MOD 1 appears.",
   "what_it_is": "Shows this matrix slot’s source, destination and amount with a drawing of the routing.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "400",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L400"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "400",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L400"
    }
   ]
  },
  {
   "id": "mod_2",
   "name": "MOD 2",
   "how_to_get_there": "Tap LFO until MOD 2 appears.",
   "what_it_is": "Shows this matrix slot’s source, destination and amount with a drawing of the routing.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "401",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L401"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "401",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L401"
    }
   ]
  },
  {
   "id": "mod_3",
   "name": "MOD 3",
   "how_to_get_there": "Tap LFO until MOD 3 appears.",
   "what_it_is": "Shows this matrix slot’s source, destination and amount with a drawing of the routing.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "402",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L402"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "402",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L402"
    }
   ]
  },
  {
   "id": "mod_4",
   "name": "MOD 4",
   "how_to_get_there": "Tap LFO until MOD 4 appears.",
   "what_it_is": "Shows this matrix slot’s source, destination and amount with a drawing of the routing.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "403",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L403"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "403",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L403"
    }
   ]
  },
  {
   "id": "macro",
   "name": "MACRO",
   "how_to_get_there": "Tap LFO until MACRO appears.",
   "what_it_is": "Shows four performance macros shared by all tracks.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "404",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L404"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "404",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L404"
    }
   ]
  },
  {
   "id": "fx",
   "name": "FX",
   "how_to_get_there": "Tap FX until FX appears.",
   "what_it_is": "Shows the selected track’s distortion, chorus, delay and reverb amounts.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "405",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L405"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "405",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L405"
    }
   ]
  },
  {
   "id": "dist",
   "name": "DIST",
   "how_to_get_there": "Tap FX until DIST appears.",
   "what_it_is": "Shows the selected synth track’s distortion type, amount, ring frequency and track filter.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "406",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L406"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "406",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L406"
    }
   ]
  },
  {
   "id": "slicer",
   "name": "SLICER",
   "how_to_get_there": "Tap FX until SLICER appears.",
   "what_it_is": "Shows the slicer pattern and position with mode, pattern, rate and depth controls.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "408",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L408"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "408",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L408"
    }
   ]
  },
  {
   "id": "insert",
   "name": "INSERT",
   "how_to_get_there": "Tap FX until INSERT appears.",
   "what_it_is": "Shows the selected synth track’s insert type and three controls that follow that type.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "409",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L409"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "409",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L409"
    }
   ]
  },
  {
   "id": "insert_2",
   "name": "INSERT 2",
   "how_to_get_there": "Tap FX until INSERT 2 appears.",
   "what_it_is": "Shows the selected synth track’s insert wet level.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "410",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L410"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "410",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L410"
    }
   ]
  },
  {
   "id": "dly",
   "name": "DLY",
   "how_to_get_there": "Tap FX until DLY appears.",
   "what_it_is": "Shows shared delay time, feedback, tone and wet level.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "411",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L411"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "411",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L411"
    }
   ]
  },
  {
   "id": "rev_cho",
   "name": "REV/CHO",
   "how_to_get_there": "Tap FX until REV/CHO appears.",
   "what_it_is": "Shows shared reverb size and damping with chorus rate and depth.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "412",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L412"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "412",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L412"
    }
   ]
  },
  {
   "id": "reverb",
   "name": "REVERB",
   "how_to_get_there": "Tap FX until REVERB appears.",
   "what_it_is": "Shows shared reverb type, size and damping.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "413",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L413"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "413",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L413"
    }
   ]
  },
  {
   "id": "scl",
   "name": "SCL",
   "how_to_get_there": "Tap SEL until SCL appears.",
   "what_it_is": "Shows root, scale, keyboard quantization and transposition with a keyboard drawing.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "414",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L414"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "414",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L414"
    }
   ]
  },
  {
   "id": "chord",
   "name": "CHORD",
   "how_to_get_there": "Tap SEL until CHORD appears.",
   "what_it_is": "Shows chord type, strum time and voice leading.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "415",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L415"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "415",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L415"
    }
   ]
  },
  {
   "id": "edit_1",
   "name": "EDIT 1",
   "how_to_get_there": "Tap EDIT until EDIT 1 appears.",
   "what_it_is": "Shows up to four parameters from the selected engine with its animated sound picture.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "417",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "417",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417"
    }
   ]
  },
  {
   "id": "edit_2",
   "name": "EDIT 2",
   "how_to_get_there": "Tap EDIT until EDIT 2 appears.",
   "what_it_is": "Shows up to four parameters from the selected engine with its animated sound picture.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "418",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L418"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "418",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L418"
    }
   ]
  },
  {
   "id": "edit_3",
   "name": "EDIT 3",
   "how_to_get_there": "Tap EDIT until EDIT 3 appears.",
   "what_it_is": "Shows up to four parameters from the selected engine with its animated sound picture.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "419",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L419"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "419",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L419"
    }
   ]
  },
  {
   "id": "edit_4",
   "name": "EDIT 4",
   "how_to_get_there": "Tap EDIT until EDIT 4 appears.",
   "what_it_is": "Shows up to four parameters from the selected engine with its animated sound picture.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "420",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L420"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "420",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L420"
    }
   ]
  },
  {
   "id": "voice",
   "name": "VOICE",
   "how_to_get_there": "Tap EDIT until VOICE appears.",
   "what_it_is": "Shows voice mode, glide time, glide mode and note priority.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "421",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L421"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "421",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L421"
    }
   ]
  },
  {
   "id": "voice_2",
   "name": "VOICE 2",
   "how_to_get_there": "Tap EDIT until VOICE 2 appears.",
   "what_it_is": "Shows voice allocation, unison detuning, pan and mute.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "422",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L422"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "422",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L422"
    }
   ]
  },
  {
   "id": "global",
   "name": "GLOBAL",
   "how_to_get_there": "Tap GLO until GLOBAL appears.",
   "what_it_is": "Shows tempo, global swing, clock source and master tuning.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "423",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L423"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "423",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L423"
    }
   ]
  },
  {
   "id": "click",
   "name": "CLICK",
   "how_to_get_there": "Tap GLO until CLICK appears.",
   "what_it_is": "Shows metronome mode and level, count-in length and stopped-step preview.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "424",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L424"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "424",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L424"
    }
   ]
  },
  {
   "id": "system",
   "name": "SYSTEM",
   "how_to_get_there": "Tap GLO until SYSTEM appears.",
   "what_it_is": "Shows USB status, outgoing clock, incoming MIDI routing and CPU load.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "426",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L426"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "426",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L426"
    }
   ]
  },
  {
   "id": "drums",
   "name": "DRUMS",
   "how_to_get_there": "Tap GLO until DRUMS appears.",
   "what_it_is": "Shows drum MIDI channel, drum level, drum reverb and track 4 type.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "427",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L427"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "427",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L427"
    }
   ]
  },
  {
   "id": "master",
   "name": "MASTER",
   "how_to_get_there": "Tap GLO until MASTER appears.",
   "what_it_is": "Shows the shared dust, ducking, DJ filter and tape controls.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "428",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L428"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "428",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L428"
    }
   ]
  },
  {
   "id": "master_2",
   "name": "MASTER 2",
   "how_to_get_there": "Tap GLO until MASTER 2 appears.",
   "what_it_is": "Shows the shared hum, tape and dust controls.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "429",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L429"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "429",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L429"
    }
   ]
  },
  {
   "id": "kit",
   "name": "KIT",
   "how_to_get_there": "Tap GLO until KIT appears.",
   "what_it_is": "Shows drum kit, drum level, drum reverb and factory beat.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "430",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L430"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "430",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L430"
    }
   ]
  },
  {
   "id": "presets",
   "name": "PRESETS",
   "how_to_get_there": "Tap SAVE until PRESETS appears.",
   "what_it_is": "Shows the preset list with its selected sound, category, group and list size.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "431",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L431"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "431",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L431"
    }
   ]
  },
  {
   "id": "user",
   "name": "USER",
   "how_to_get_there": "Tap SAVE until USER appears.",
   "what_it_is": "Shows user sound slots with load, erase and save actions.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "432",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L432"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "432",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L432"
    }
   ]
  },
  {
   "id": "project",
   "name": "PROJECT",
   "how_to_get_there": "Tap SAVE until PROJECT appears.",
   "what_it_is": "Shows which of the four project slots contain data and the selected slot’s load and save actions.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "433",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L433"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "433",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L433"
    }
   ]
  },
  {
   "id": "tools",
   "name": "TOOLS",
   "how_to_get_there": "Tap SAVE until TOOLS appears.",
   "what_it_is": "Shows clear-pattern and reset-sound actions.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "434",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L434"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "434",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L434"
    }
   ]
  },
  {
   "id": "arp",
   "name": "ARP",
   "how_to_get_there": "Tap ARP until ARP appears.",
   "what_it_is": "Shows arpeggiator mode, division, octave range and gate.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "435",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L435"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "435",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L435"
    }
   ]
  },
  {
   "id": "arp_2",
   "name": "ARP 2",
   "how_to_get_there": "Tap ARP until ARP 2 appears.",
   "what_it_is": "Shows arp swing, chance, hold and key ordering.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "436",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L436"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "436",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L436"
    }
   ]
  },
  {
   "id": "drone",
   "name": "DRONE",
   "how_to_get_there": "Tap ARP until DRONE appears.",
   "what_it_is": "Shows hold, evolution, target tension and ramp length with the four moving walks and present tension.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "437",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L437"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "437",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L437"
    }
   ]
  },
  {
   "id": "step",
   "name": "STEP",
   "how_to_get_there": "Tap SEQ until STEP appears.",
   "what_it_is": "Shows the cursor’s step, note, note/tie/rest choice and accent/slide flags above a piano roll.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "438",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L438"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "438",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L438"
    }
   ]
  },
  {
   "id": "step_2",
   "name": "STEP 2",
   "how_to_get_there": "Tap SEQ until STEP 2 appears.",
   "what_it_is": "Shows the cursor’s step, ratchet, chance and velocity above a piano roll.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "439",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L439"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "439",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L439"
    }
   ]
  },
  {
   "id": "pattern",
   "name": "PATTERN",
   "how_to_get_there": "Tap SEQ until PATTERN appears.",
   "what_it_is": "Shows pattern length, division, swing and gate with the pattern steps.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "440",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L440"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "440",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L440"
    }
   ]
  },
  {
   "id": "vivo",
   "name": "VIVO",
   "how_to_get_there": "Tap SEQ until VIVO appears.",
   "what_it_is": "Shows pulse count, rotation, density and memory with a ring of the rhythm and recent played steps.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "441",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L441"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "441",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L441"
    }
   ]
  },
  {
   "id": "vivo_2",
   "name": "VIVO 2",
   "how_to_get_there": "Tap SEQ until VIVO 2 appears.",
   "what_it_is": "Shows chance-cycle length, accent cycle, evolution rule and random seed with the rhythm ring.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "442",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L442"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "442",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L442"
    }
   ]
  },
  {
   "id": "vivo_3",
   "name": "VIVO 3",
   "how_to_get_there": "Tap SEQ until VIVO 3 appears.",
   "what_it_is": "Shows freeze and evolution-loop interval with the rhythm ring.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "443",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L443"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "443",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L443"
    }
   ]
  },
  {
   "id": "tracks",
   "name": "TRACKS",
   "how_to_get_there": "Tap REC from a page outside the SEQ and ARP families.",
   "what_it_is": "Shows tempo, bar and beat, the four tracks and their playheads, plus type, level, length and pan for the selected track.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "444",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L444"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "444",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L444"
    }
   ]
  },
  {
   "id": "punch_layer",
   "name": "PUNCH",
   "how_to_get_there": "Hold FX, or double tap it to lock the layer.",
   "what_it_is": "The PUNCH layer takes over the keys and KNOB 1–4.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/ui_layers.c",
     "lines": "495-582",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L495-L582"
    }
   ]
  },
  {
   "id": "mix_layer",
   "name": "MIX",
   "how_to_get_there": "Hold GLO, or double tap it to lock the layer.",
   "what_it_is": "The MIX layer takes over the keys and KNOB 1–4.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/ui_layers.c",
     "lines": "495-582",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L495-L582"
    }
   ]
  },
  {
   "id": "steps_layer",
   "name": "STEPS",
   "how_to_get_there": "Hold SEQ, or double tap it to lock the layer.",
   "what_it_is": "The STEPS layer takes over the keys and KNOB 1–4.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/ui_layers.c",
     "lines": "495-582",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L495-L582"
    }
   ]
  },
  {
   "id": "key_layer",
   "name": "KEY",
   "how_to_get_there": "Hold SEL, or double tap it to lock the layer.",
   "what_it_is": "The KEY layer takes over the keys and KNOB 1–4.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/ui_layers.c",
     "lines": "495-582",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L495-L582"
    }
   ]
  },
  {
   "id": "engine_layer",
   "name": "ENGINE",
   "how_to_get_there": "Hold EDIT, or double tap it to lock the layer.",
   "what_it_is": "The ENGINE layer takes over the keys and KNOB 1–4.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/ui_layers.c",
     "lines": "495-582",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L495-L582"
    }
   ]
  },
  {
   "id": "locked_layer",
   "name": "Locked layer",
   "how_to_get_there": "Double tap a layer button, or press HOME while holding it.",
   "what_it_is": "The layer stays open after its button is released.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/ui_layers.c",
     "lines": "505-553",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L505-L553"
    }
   ]
  },
  {
   "id": "step_entry",
   "name": "Step note entry",
   "how_to_get_there": "Tap SEQ to STEP or STEP 2, with no layer held.",
   "what_it_is": "The keys enter the selected step and sound the notes.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/ui_input.c",
     "lines": "426-455",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L426-L455"
    }
   ]
  },
  {
   "id": "clear_confirm",
   "name": "Clear confirmation",
   "how_to_get_there": "Hold REC for over 0.7 seconds on a SEQ, ARP or TRACKS page.",
   "what_it_is": "OCT+ clears the selected track pattern and OCT- cancels.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/ui_input.c",
     "lines": "578-612",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L578-L612"
    }
   ]
  },
  {
   "id": "fm6_import",
   "name": "FM6 bank import",
   "how_to_get_there": "Send a valid DX7 bank while stopped, with no transport start pending and the backup buffer free, when the FM6 track chosen for that message has no bank patch selected.",
   "what_it_is": "A destination question for an incoming FM6 bank; a bank patch on the chosen FM6 track instead selects its bank for immediate writing without a question, and busy playback or backup makes the receive fail.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/ui_input.c",
     "lines": "477-500",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L477-L500"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/fm6_sysex.c",
     "lines": "28-50",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/fm6_sysex.c#L28-L50"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/fm6_sysex.c",
     "lines": "122-141",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/fm6_sysex.c#L122-L141"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/fm6_bank.c",
     "lines": "194-206",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/fm6_bank.c#L194-L206"
    }
   ]
  },
  {
   "id": "chord_play",
   "name": "Chord keyboard",
   "how_to_get_there": "Choose a CHORD type on the CHORD page of the SEL family, or with KEY-layer KNOB 1, and play outside a held or locked layer.",
   "what_it_is": "White keys play chords and black keys temporarily modify them.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/seq.c",
     "lines": "791-846",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L846"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "414-415",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L414-L415"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/ui_layers.c",
     "lines": "634-638",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L634-L638"
    }
   ]
  },
  {
   "id": "drum_keys",
   "name": "Drum keyboard",
   "how_to_get_there": "Select track 4 while its TYPE is DRUM.",
   "what_it_is": "The keys trigger the mapped percussion sounds.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/seq.c",
     "lines": "59-94",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L59-L94"
    }
   ]
  },
  {
   "id": "sample_kit_keys",
   "name": "SAMPLE GM kit keyboard",
   "how_to_get_there": "Choose a GM kit in SAMPLE.",
   "what_it_is": "The keys follow consecutive drum note numbers from C2.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/seq.c",
     "lines": "82-94",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L82-L94"
    }
   ]
  },
  {
   "id": "midi_learn",
   "name": "MIDI Learn",
   "how_to_get_there": "Hold GLO and press white key 14 (E5).",
   "what_it_is": "Turn a parameter knob and send a MIDI CC to bind it.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/midi_learn.c",
     "lines": "161-190",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/midi_learn.c#L161-L190"
    }
   ]
  },
  {
   "id": "calibration",
   "name": "Hardware calibration",
   "how_to_get_there": "Hold both physical OCT buttons while powering on.",
   "what_it_is": "Follow the button and clockwise encoder prompts; 30 seconds without input cancels.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/ui_input.c",
     "lines": "742-807",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L742-L807"
    }
   ]
  },
  {
   "id": "home",
   "name": "HOME",
   "how_to_get_there": "Tap HOME from a page or the visualiser; a tap from TRACKS opens the visualiser instead.",
   "what_it_is": "The selected sound’s four main values, with waveform and status.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/ui_input.c",
     "lines": "614-622",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L614-L622"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/ui_input.c",
     "lines": "614-622",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L614-L622"
    }
   ]
  },
  {
   "id": "visualiser",
   "name": "Visualiser",
   "how_to_get_there": "Tap HOME from TRACKS.",
   "what_it_is": "Five animated views of the audio; SELECT changes style.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/ui_vis.c",
     "lines": "14-40",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_vis.c#L14-L40"
    }
   ]
  },
  {
   "id": "menu",
   "name": "Settings menu",
   "how_to_get_there": "Hold HOME for more than 0.7 seconds.",
   "what_it_is": "Preferences and actions selected with PRESETS, edited with KNOB 1 or OCT+; OCT− backs out.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/ui_menu.c",
     "lines": "155-235",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L155-L235"
    }
   ]
  },
  {
   "id": "about",
   "name": "ABOUT",
   "how_to_get_there": "Choose ABOUT in the HOME menu and press OCT+.",
   "what_it_is": "Release and licence information.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/ui_menu.c",
     "lines": "225-228",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L225-L228"
    }
   ]
  },
  {
   "id": "update_mode",
   "name": "Update mode",
   "how_to_get_there": "Hold both OCT buttons for more than five seconds.",
   "what_it_is": "The updater takes over after its countdown.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/main.c",
     "lines": "275-299",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/main.c#L275-L299"
    }
   ]
  },
  {
   "id": "startup",
   "name": "Startup",
   "how_to_get_there": "Switch the FM-1 on.",
   "what_it_is": "Startup image before the playing interface.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/main.c",
     "lines": "189-191",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/main.c#L189-L191"
    }
   ]
  },
  {
   "id": "crash",
   "name": "Crash screen",
   "how_to_get_there": "A caught firmware fault opens this screen.",
   "what_it_is": "Diagnostic information for a fault.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/main.c",
     "lines": "109-125",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/main.c#L109-L125"
    }
   ]
  },
  {
   "id": "drum_unavailable",
   "name": "Unavailable drum pages",
   "how_to_get_there": "Select track 4 as DRUM and open a synth-only page.",
   "what_it_is": "ENV, LFO, scale/chord, engine/voice, FX/DIST/INSERT, ARP and preset/user-sound pages have no editable drum sound; SLICER, SEQ and global pages remain available.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/params.c",
     "lines": "448-494",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L448-L494"
    }
   ]
  },
  {
   "id": "usb_rescue",
   "name": "USB rescue",
   "how_to_get_there": "Hold physical OCT− alone at power-on, or reach two early failed starts retained across warm resets.",
   "what_it_is": "Audio stays off while the USB installer is available; entering rescue alone does not write saved work, and another failed rescue start falls back to the built-in updater.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/bootguard.h",
     "lines": "16-30",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/bootguard.h#L16-L30"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/main.c",
     "lines": "364-387",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/main.c#L364-L387"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/recovery.c",
     "lines": "54-72",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/recovery.c#L54-L72"
    }
   ]
  }
 ],
 "controls": {
  "button_fx": [
   {
    "mode": "any",
    "gesture": "release",
    "action": "An untouched tap shorter than 0.45 seconds opens the remembered effects page, or advances to its next page when that family is already open.",
    "short_label": "FX PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "526-544",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L526-L544"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "148-173",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L148-L173"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Activates the PUNCH layer while held, showing its key tiles after 0.14 seconds.",
    "short_label": "PUNCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "516-525",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L516-L525"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "26-30",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L26-L30"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "58-60",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L58-L60"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "double_press",
    "action": "Two untouched taps shorter than 0.45 seconds, with the second release within 0.4 seconds of the first release, lock this layer open.",
    "short_label": "LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "526-540",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L526-L540"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_oct_down",
    "action": "An untouched short tap goes to the preceding used effects page when that family is already open, restoring the octave from before OCT- was pressed.",
    "short_label": "PREV PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "33-39",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L33-L39"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "148-173",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L148-L173"
     }
    ]
   },
   {
    "mode": "fm6_import",
    "gesture": "press",
    "action": "Declines the pending FM6 bank import and consumes this press.",
    "short_label": "DECLINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "480-500",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L480-L500"
     }
    ]
   },
   {
    "mode": "locked_layer",
    "gesture": "press",
    "action": "Unlocks the layer and consumes this press; it does not perform the button’s usual page action.",
    "short_label": "UNLOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "505-514",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L505-L514"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Has no button action while the settings menu is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "571-577",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L571-L577"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "155-235",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L155-L235"
     }
    ]
   },
   {
    "mode": "clear_confirm",
    "gesture": "press",
    "action": "This press does not answer the clear question.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "590-612",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L590-L612"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "When prompted for this button, teaches its physical position; all buttons and seven clockwise encoder turns must finish before the mapping is kept.",
    "short_label": "TEACH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "757-802",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L757-L802"
     }
    ]
   }
  ],
  "button_glo": [
   {
    "mode": "any",
    "gesture": "release",
    "action": "An untouched tap shorter than 0.45 seconds opens the remembered global page, or advances to its next page when that family is already open.",
    "short_label": "GLO PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "526-544",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L526-L544"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "148-173",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L148-L173"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Activates the MIX layer while held, showing its key tiles after 0.14 seconds.",
    "short_label": "MIX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "516-525",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L516-L525"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "26-30",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L26-L30"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "58-60",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L58-L60"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "double_press",
    "action": "Two untouched taps shorter than 0.45 seconds, with the second release within 0.4 seconds of the first release, lock this layer open.",
    "short_label": "LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "526-540",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L526-L540"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_oct_down",
    "action": "An untouched short tap goes to the preceding used global page when that family is already open, restoring the octave from before OCT- was pressed.",
    "short_label": "PREV PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "33-39",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L33-L39"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "148-173",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L148-L173"
     }
    ]
   },
   {
    "mode": "fm6_import",
    "gesture": "press",
    "action": "Declines the pending FM6 bank import and consumes this press.",
    "short_label": "DECLINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "480-500",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L480-L500"
     }
    ]
   },
   {
    "mode": "locked_layer",
    "gesture": "press",
    "action": "Unlocks the layer and consumes this press; it does not perform the button’s usual page action.",
    "short_label": "UNLOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "505-514",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L505-L514"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Has no button action while the settings menu is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "571-577",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L571-L577"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "155-235",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L155-L235"
     }
    ]
   },
   {
    "mode": "clear_confirm",
    "gesture": "press",
    "action": "This press does not answer the clear question.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "590-612",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L590-L612"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "When prompted for this button, teaches its physical position; all buttons and seven clockwise encoder turns must finish before the mapping is kept.",
    "short_label": "TEACH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "757-802",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L757-L802"
     }
    ]
   }
  ],
  "button_seq": [
   {
    "mode": "any",
    "gesture": "release",
    "action": "An untouched tap shorter than 0.45 seconds opens the remembered sequencer page, or advances to its next page when that family is already open.",
    "short_label": "SEQ PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "526-544",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L526-L544"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "148-173",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L148-L173"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Activates the STEPS layer while held, showing its key tiles after 0.14 seconds.",
    "short_label": "STEPS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "516-525",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L516-L525"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "26-30",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L26-L30"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "58-60",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L58-L60"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "double_press",
    "action": "Two untouched taps shorter than 0.45 seconds, with the second release within 0.4 seconds of the first release, lock this layer open.",
    "short_label": "LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "526-540",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L526-L540"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_oct_down",
    "action": "An untouched short tap goes to the preceding used sequencer page when that family is already open, restoring the octave from before OCT- was pressed.",
    "short_label": "PREV PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "33-39",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L33-L39"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "148-173",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L148-L173"
     }
    ]
   },
   {
    "mode": "fm6_import",
    "gesture": "press",
    "action": "Declines the pending FM6 bank import and consumes this press.",
    "short_label": "DECLINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "480-500",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L480-L500"
     }
    ]
   },
   {
    "mode": "locked_layer",
    "gesture": "press",
    "action": "Unlocks the layer and consumes this press; it does not perform the button’s usual page action.",
    "short_label": "UNLOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "505-514",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L505-L514"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Has no button action while the settings menu is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "571-577",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L571-L577"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "155-235",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L155-L235"
     }
    ]
   },
   {
    "mode": "clear_confirm",
    "gesture": "press",
    "action": "This press does not answer the clear question.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "590-612",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L590-L612"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "When prompted for this button, teaches its physical position; all buttons and seven clockwise encoder turns must finish before the mapping is kept.",
    "short_label": "TEACH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "757-802",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L757-L802"
     }
    ]
   }
  ],
  "button_sel": [
   {
    "mode": "any",
    "gesture": "release",
    "action": "An untouched tap shorter than 0.45 seconds opens the remembered scale and chord page, or advances to its next page when that family is already open.",
    "short_label": "SEL PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "526-544",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L526-L544"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "148-173",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L148-L173"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Activates the KEY layer while held, showing its key tiles after 0.14 seconds.",
    "short_label": "KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "516-525",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L516-L525"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "26-30",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L26-L30"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "58-60",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L58-L60"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "double_press",
    "action": "Two untouched taps shorter than 0.45 seconds, with the second release within 0.4 seconds of the first release, lock this layer open.",
    "short_label": "LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "526-540",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L526-L540"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_oct_down",
    "action": "An untouched short tap goes to the preceding used scale and chord page when that family is already open, restoring the octave from before OCT- was pressed.",
    "short_label": "PREV PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "33-39",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L33-L39"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "148-173",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L148-L173"
     }
    ]
   },
   {
    "mode": "fm6_import",
    "gesture": "press",
    "action": "Declines the pending FM6 bank import and consumes this press.",
    "short_label": "DECLINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "480-500",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L480-L500"
     }
    ]
   },
   {
    "mode": "locked_layer",
    "gesture": "press",
    "action": "Unlocks the layer and consumes this press; it does not perform the button’s usual page action.",
    "short_label": "UNLOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "505-514",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L505-L514"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Has no button action while the settings menu is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "571-577",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L571-L577"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "155-235",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L155-L235"
     }
    ]
   },
   {
    "mode": "clear_confirm",
    "gesture": "press",
    "action": "This press does not answer the clear question.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "590-612",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L590-L612"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "When prompted for this button, teaches its physical position; all buttons and seven clockwise encoder turns must finish before the mapping is kept.",
    "short_label": "TEACH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "757-802",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L757-L802"
     }
    ]
   }
  ],
  "button_edit": [
   {
    "mode": "any",
    "gesture": "release",
    "action": "An untouched tap shorter than 0.45 seconds opens the remembered engine and voice page, or advances to its next page when that family is already open.",
    "short_label": "EDIT PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "526-544",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L526-L544"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "148-173",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L148-L173"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Activates the ENGINE layer while held, showing its key tiles after 0.14 seconds.",
    "short_label": "ENGINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "516-525",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L516-L525"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "26-30",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L26-L30"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "58-60",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L58-L60"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "double_press",
    "action": "Two untouched taps shorter than 0.45 seconds, with the second release within 0.4 seconds of the first release, lock this layer open.",
    "short_label": "LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "526-540",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L526-L540"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_oct_down",
    "action": "An untouched short tap goes to the preceding used engine and voice page when that family is already open, restoring the octave from before OCT- was pressed.",
    "short_label": "PREV PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "33-39",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L33-L39"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "148-173",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L148-L173"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "release",
    "action": "An untouched tap clears the cursor step, including its locks, timing nudge and condition, then advances without a question; it creates no new pattern undo snapshot and the project may autosave later.",
    "short_label": "CLEAR STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "531-538",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L531-L538"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "119-133",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L119-L133"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/project.c",
      "lines": "607-625",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L607-L625"
     }
    ]
   },
   {
    "mode": "fm6_import",
    "gesture": "press",
    "action": "Declines the pending FM6 bank import and consumes this press.",
    "short_label": "DECLINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "480-500",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L480-L500"
     }
    ]
   },
   {
    "mode": "locked_layer",
    "gesture": "press",
    "action": "Unlocks the layer and consumes this press; it does not perform the button’s usual page action.",
    "short_label": "UNLOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "505-514",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L505-L514"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Has no button action while the settings menu is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "571-577",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L571-L577"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "155-235",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L155-L235"
     }
    ]
   },
   {
    "mode": "clear_confirm",
    "gesture": "press",
    "action": "This press does not answer the clear question.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "590-612",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L590-L612"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "When prompted for this button, teaches its physical position; all buttons and seven clockwise encoder turns must finish before the mapping is kept.",
    "short_label": "TEACH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "757-802",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L757-L802"
     }
    ]
   }
  ],
  "button_env": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Opens the remembered envelope page, or advances through that family when already there.",
    "short_label": "ENV PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "666-670",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L666-L670"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "148-173",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L148-L173"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_oct_down",
    "action": "Moves to the previous envelope page when already in that family, restoring the octave from before OCT- was pressed.",
    "short_label": "ENV BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "33-39",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L33-L39"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "148-173",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L148-L173"
     }
    ]
   },
   {
    "mode": "fm6_import",
    "gesture": "press",
    "action": "Declines the pending FM6 bank import and consumes this press.",
    "short_label": "DECLINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "480-500",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L480-L500"
     }
    ]
   },
   {
    "mode": "locked_layer",
    "gesture": "press",
    "action": "Unlocks the layer and consumes this press; it does not perform the button’s usual page action.",
    "short_label": "UNLOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "505-514",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L505-L514"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Has no button action while the settings menu is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "571-577",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L571-L577"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "155-235",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L155-L235"
     }
    ]
   },
   {
    "mode": "clear_confirm",
    "gesture": "press",
    "action": "This press does not answer the clear question.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "590-612",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L590-L612"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "When prompted for this button, teaches its physical position; all buttons and seven clockwise encoder turns must finish before the mapping is kept.",
    "short_label": "TEACH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "757-802",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L757-L802"
     }
    ]
   }
  ],
  "button_lfo": [
   {
    "mode": "any",
    "gesture": "release",
    "action": "An untouched tap opens the remembered LFO or modulation page, or advances through that family.",
    "short_label": "LFO PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "529-540",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L529-L540"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "148-173",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L148-L173"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_oct_down",
    "action": "An untouched tap goes to the preceding used LFO or modulation page when already in that family.",
    "short_label": "LFO BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "33-39",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L33-L39"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "539-540",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L539-L540"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Captures up to sixteen ordinary page or HOME parameter values for release-time restoration, while PROJECT LOAD/SAVE, TOOLS CLEAR/INIT, USER, KIT/BEAT, browsing, tempo, steps, TRACKS and layer knobs keep their normal lasting effect.",
    "short_label": "MOMENTARY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "264-294",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L264-L294"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "303-376",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L303-L376"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "716-736",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L716-L736"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "After captured parameter edits, restores their remembered values unless OCT+ kept them; edits made after keeping start a new temporary set.",
    "short_label": "RESTORE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "264-294",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L264-L294"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "529-537",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L529-L537"
     }
    ]
   },
   {
    "mode": "fm6_import",
    "gesture": "press",
    "action": "Declines the pending FM6 bank import on press, then opens the LFO family on release if no parameter was edited while held.",
    "short_label": "DECLINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "480-500",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L480-L500"
     }
    ]
   },
   {
    "mode": "locked_layer",
    "gesture": "press",
    "action": "Unlocks the layer and consumes this press; it does not perform the button’s usual page action.",
    "short_label": "UNLOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "505-514",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L505-L514"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Has no button action while the settings menu is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "571-577",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L571-L577"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "155-235",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L155-L235"
     }
    ]
   },
   {
    "mode": "clear_confirm",
    "gesture": "press",
    "action": "This press does not answer the clear question.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "590-612",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L590-L612"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "When prompted for this button, teaches its physical position; all buttons and seven clockwise encoder turns must finish before the mapping is kept.",
    "short_label": "TEACH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "757-802",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L757-L802"
     }
    ]
   }
  ],
  "button_save": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Opens the remembered PRESETS, USER, PROJECT or TOOLS page, or advances through that family; pressing SAVE alone does not save anything.",
    "short_label": "SAVE PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "28-29",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L28-L29"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "666-670",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L666-L670"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "148-173",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L148-L173"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_oct_down",
    "action": "Moves to the preceding used SAVE-family page when that family is already open.",
    "short_label": "SAVE BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "33-39",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L33-L39"
     }
    ]
   },
   {
    "mode": "fm6_import",
    "gesture": "press",
    "action": "Accepts the pending DX7 bank and replaces the chosen 32-voice FM6 bank in flash immediately if stopped and available; this is the confirmation and there is no undo.",
    "short_label": "IMPORT BANK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "480-500",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L480-L500"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/fm6_sysex.c",
      "lines": "145-163",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/fm6_sysex.c#L145-L163"
     }
    ]
   },
   {
    "mode": "locked_layer",
    "gesture": "press",
    "action": "Unlocks the layer and consumes this press; it does not perform the button’s usual page action.",
    "short_label": "UNLOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "505-514",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L505-L514"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Has no button action while the settings menu is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "571-577",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L571-L577"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "155-235",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L155-L235"
     }
    ]
   },
   {
    "mode": "clear_confirm",
    "gesture": "press",
    "action": "This press does not answer the clear question.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "590-612",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L590-L612"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "When prompted for this button, teaches its physical position; all buttons and seven clockwise encoder turns must finish before the mapping is kept.",
    "short_label": "TEACH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "757-802",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L757-L802"
     }
    ]
   }
  ],
  "button_arp": [
   {
    "mode": "any",
    "gesture": "release",
    "action": "An untouched tap opens the remembered ARP page, or advances through the ARP family.",
    "short_label": "ARP PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "541-542",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L541-L542"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "148-173",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L148-L173"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_oct_down",
    "action": "An untouched tap goes to the previous ARP-family page when already in that family.",
    "short_label": "ARP BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "33-39",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L33-L39"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "541-542",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L541-L542"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "action": "After over 0.7 seconds, releases latched chords on all synth tracks whose physical keys are up; if none are latched, cuts their released voice tails.",
    "short_label": "DRONE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "506-507",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L506-L507"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "543-558",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L543-L558"
     }
    ]
   },
   {
    "mode": "fm6_import",
    "gesture": "press",
    "action": "Declines the pending FM6 bank import and consumes this press.",
    "short_label": "DECLINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "480-500",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L480-L500"
     }
    ]
   },
   {
    "mode": "locked_layer",
    "gesture": "press",
    "action": "Unlocks the layer and consumes this press; it does not perform the button’s usual page action.",
    "short_label": "UNLOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "505-514",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L505-L514"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Has no button action while the settings menu is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "571-577",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L571-L577"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "155-235",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L155-L235"
     }
    ]
   },
   {
    "mode": "clear_confirm",
    "gesture": "press",
    "action": "This press does not answer the clear question.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "590-612",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L590-L612"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "When prompted for this button, teaches its physical position; all buttons and seven clockwise encoder turns must finish before the mapping is kept.",
    "short_label": "TEACH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "757-802",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L757-L802"
     }
    ]
   }
  ],
  "button_home": [
   {
    "mode": "any",
    "gesture": "release",
    "action": "An untouched tap returns to HOME, except that TRACKS opens the visualiser and the visualiser returns HOME.",
    "short_label": "HOME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "614-622",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L614-L622"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "action": "After over 0.7 seconds, opens the settings menu or closes it; closing saves changed settings now if stopped or when playback stops.",
    "short_label": "MENU",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "560-577",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L560-L577"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "143-152",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L143-L152"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/project.c",
      "lines": "607-613",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L607-L613"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_fx",
    "action": "Locks the PUNCH layer open until another non-transport, non-octave button is pressed.",
    "short_label": "LAYER LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "546-553",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L546-L553"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_glo",
    "action": "Locks the MIX layer open until another non-transport, non-octave button is pressed.",
    "short_label": "LAYER LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "546-553",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L546-L553"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_seq",
    "action": "Locks the STEPS layer open until another non-transport, non-octave button is pressed.",
    "short_label": "LAYER LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "546-553",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L546-L553"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_sel",
    "action": "Locks the KEY layer open until another non-transport, non-octave button is pressed.",
    "short_label": "LAYER LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "546-553",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L546-L553"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_edit",
    "action": "Locks the ENGINE layer open until another non-transport, non-octave button is pressed.",
    "short_label": "LAYER LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "546-553",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L546-L553"
     }
    ]
   },
   {
    "mode": "fm6_import",
    "gesture": "press",
    "action": "Declines the pending FM6 bank import and consumes this press.",
    "short_label": "DECLINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "480-500",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L480-L500"
     }
    ]
   },
   {
    "mode": "locked_layer",
    "gesture": "press",
    "action": "Unlocks the layer and consumes this press; it does not perform the button’s usual page action.",
    "short_label": "UNLOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "505-514",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L505-L514"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "When prompted for this button, teaches its physical position; all buttons and seven clockwise encoder turns must finish before the mapping is kept.",
    "short_label": "TEACH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "757-802",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L757-L802"
     }
    ]
   }
  ],
  "button_play_stop": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Starts or stops the transport outside menus and clear dialogs; an armed-track start counts in only with the internal clock, and another press cancels that count-in.",
    "short_label": "PLAY/STOP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "630-632",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L630-L632"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "1734-1763",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L1734-L1763"
     }
    ]
   },
   {
    "mode": "fm6_import",
    "gesture": "press",
    "action": "Declines the pending FM6 bank import and consumes this press.",
    "short_label": "DECLINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "480-500",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L480-L500"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Has no button action while the settings menu is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "571-577",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L571-L577"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "155-235",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L155-L235"
     }
    ]
   },
   {
    "mode": "clear_confirm",
    "gesture": "press",
    "action": "This press does not answer the clear question.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "590-612",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L590-L612"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "When prompted for this button, teaches its physical position; all buttons and seven clockwise encoder turns must finish before the mapping is kept.",
    "short_label": "TEACH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "757-802",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L757-L802"
     }
    ]
   }
  ],
  "button_rec": [
   {
    "mode": "tracks",
    "gesture": "release",
    "action": "Toggles live recording for the selected track; arming it while stopped also starts playback.",
    "short_label": "RECORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "205-213",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L205-L213"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "582-588",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L582-L588"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "release",
    "action": "Toggles live recording for the selected track without starting a stopped transport.",
    "short_label": "ARM REC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "582-588",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L582-L588"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "long_press",
    "action": "After over 0.7 seconds, asks to clear the selected track pattern; OCT- cancels and OCT+ clears its steps, locks, nudges, conditions and latched chord, with no new undo snapshot and later autosave possible.",
    "short_label": "CLEAR ASK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "505-506",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L505-L506"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "578-612",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L578-L612"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "305-311",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L305-L311"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/project.c",
      "lines": "607-625",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L607-L625"
     }
    ]
   },
   {
    "mode": "arp_2",
    "gesture": "release",
    "action": "Toggles live recording for the selected track without starting a stopped transport.",
    "short_label": "ARM REC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "582-588",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L582-L588"
     }
    ]
   },
   {
    "mode": "arp_2",
    "gesture": "long_press",
    "action": "After over 0.7 seconds, asks to clear the selected track pattern; OCT- cancels and OCT+ clears its steps, locks, nudges, conditions and latched chord, with no new undo snapshot and later autosave possible.",
    "short_label": "CLEAR ASK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "505-506",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L505-L506"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "578-612",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L578-L612"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "305-311",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L305-L311"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/project.c",
      "lines": "607-625",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L607-L625"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "release",
    "action": "Toggles live recording for the selected track without starting a stopped transport.",
    "short_label": "ARM REC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "582-588",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L582-L588"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "long_press",
    "action": "After over 0.7 seconds, asks to clear the selected track pattern; OCT- cancels and OCT+ clears its steps, locks, nudges, conditions and latched chord, with no new undo snapshot and later autosave possible.",
    "short_label": "CLEAR ASK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "505-506",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L505-L506"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "578-612",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L578-L612"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "305-311",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L305-L311"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/project.c",
      "lines": "607-625",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L607-L625"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "release",
    "action": "Toggles live recording for the selected track without starting a stopped transport.",
    "short_label": "ARM REC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "582-588",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L582-L588"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "long_press",
    "action": "After over 0.7 seconds, asks to clear the selected track pattern; OCT- cancels and OCT+ clears its steps, locks, nudges, conditions and latched chord, with no new undo snapshot and later autosave possible.",
    "short_label": "CLEAR ASK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "505-506",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L505-L506"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "578-612",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L578-L612"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "305-311",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L305-L311"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/project.c",
      "lines": "607-625",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L607-L625"
     }
    ]
   },
   {
    "mode": "step_2",
    "gesture": "release",
    "action": "Toggles live recording for the selected track without starting a stopped transport.",
    "short_label": "ARM REC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "582-588",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L582-L588"
     }
    ]
   },
   {
    "mode": "step_2",
    "gesture": "long_press",
    "action": "After over 0.7 seconds, asks to clear the selected track pattern; OCT- cancels and OCT+ clears its steps, locks, nudges, conditions and latched chord, with no new undo snapshot and later autosave possible.",
    "short_label": "CLEAR ASK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "505-506",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L505-L506"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "578-612",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L578-L612"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "305-311",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L305-L311"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/project.c",
      "lines": "607-625",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L607-L625"
     }
    ]
   },
   {
    "mode": "pattern",
    "gesture": "release",
    "action": "Toggles live recording for the selected track without starting a stopped transport.",
    "short_label": "ARM REC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "582-588",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L582-L588"
     }
    ]
   },
   {
    "mode": "pattern",
    "gesture": "long_press",
    "action": "After over 0.7 seconds, asks to clear the selected track pattern; OCT- cancels and OCT+ clears its steps, locks, nudges, conditions and latched chord, with no new undo snapshot and later autosave possible.",
    "short_label": "CLEAR ASK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "505-506",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L505-L506"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "578-612",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L578-L612"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "305-311",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L305-L311"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/project.c",
      "lines": "607-625",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L607-L625"
     }
    ]
   },
   {
    "mode": "vivo",
    "gesture": "release",
    "action": "Toggles live recording for the selected track without starting a stopped transport.",
    "short_label": "ARM REC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "582-588",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L582-L588"
     }
    ]
   },
   {
    "mode": "vivo",
    "gesture": "long_press",
    "action": "After over 0.7 seconds, asks to clear the selected track pattern; OCT- cancels and OCT+ clears its steps, locks, nudges, conditions and latched chord, with no new undo snapshot and later autosave possible.",
    "short_label": "CLEAR ASK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "505-506",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L505-L506"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "578-612",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L578-L612"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "305-311",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L305-L311"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/project.c",
      "lines": "607-625",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L607-L625"
     }
    ]
   },
   {
    "mode": "vivo_2",
    "gesture": "release",
    "action": "Toggles live recording for the selected track without starting a stopped transport.",
    "short_label": "ARM REC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "582-588",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L582-L588"
     }
    ]
   },
   {
    "mode": "vivo_2",
    "gesture": "long_press",
    "action": "After over 0.7 seconds, asks to clear the selected track pattern; OCT- cancels and OCT+ clears its steps, locks, nudges, conditions and latched chord, with no new undo snapshot and later autosave possible.",
    "short_label": "CLEAR ASK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "505-506",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L505-L506"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "578-612",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L578-L612"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "305-311",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L305-L311"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/project.c",
      "lines": "607-625",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L607-L625"
     }
    ]
   },
   {
    "mode": "vivo_3",
    "gesture": "release",
    "action": "Toggles live recording for the selected track without starting a stopped transport.",
    "short_label": "ARM REC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "582-588",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L582-L588"
     }
    ]
   },
   {
    "mode": "vivo_3",
    "gesture": "long_press",
    "action": "After over 0.7 seconds, asks to clear the selected track pattern; OCT- cancels and OCT+ clears its steps, locks, nudges, conditions and latched chord, with no new undo snapshot and later autosave possible.",
    "short_label": "CLEAR ASK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "505-506",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L505-L506"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "578-612",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L578-L612"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "305-311",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L305-L311"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/project.c",
      "lines": "607-625",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L607-L625"
     }
    ]
   },
   {
    "mode": "tracks",
    "gesture": "long_press",
    "action": "After over 0.7 seconds, asks to clear the selected track pattern; OCT+ clears its steps, locks, nudges, conditions and latched chord, without resetting its sound or creating a new undo snapshot, and later autosave can keep the change.",
    "short_label": "TRACK CLEAR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "578-612",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L578-L612"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "305-311",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L305-L311"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/project.c",
      "lines": "607-625",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L607-L625"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Outside SEQ, ARP and TRACKS, opens TRACKS instead of recording.",
    "short_label": "TRACKS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "582-588",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L582-L588"
     }
    ]
   },
   {
    "mode": "fm6_import",
    "gesture": "press",
    "action": "Declines the pending FM6 bank import and consumes this press.",
    "short_label": "DECLINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "480-500",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L480-L500"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Has no button action while the settings menu is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "571-577",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L571-L577"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "155-235",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L155-L235"
     }
    ]
   },
   {
    "mode": "clear_confirm",
    "gesture": "press",
    "action": "This press does not answer the clear question.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "590-612",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L590-L612"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "When prompted for this button, teaches its physical position; all buttons and seven clockwise encoder turns must finish before the mapping is kept.",
    "short_label": "TEACH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "757-802",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L757-L802"
     }
    ]
   }
  ],
  "button_oct_down": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Moves the keyboard octave down within the range −3 to +3, except where a dialog, MIDI Learn, momentary edit or step layer takes the button.",
    "short_label": "OCT −",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "637-655",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L637-L655"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_oct_up",
    "action": "Resets the keyboard octave to its centre; keeping both OCT buttons down for over five seconds enters update mode.",
    "short_label": "OCT RESET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "649-654",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L649-L654"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/main.c",
      "lines": "275-298",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/main.c#L275-L298"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press",
    "action": "Undoes the last pattern edit captured by the STEPS layer, including steps, length, locks, nudges and conditions, when no step key is held; it changes RAM without asking and autosave may later keep it.",
    "short_label": "UNDO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "93-131",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L93-L131"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "560-569",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L560-L569"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/project.c",
      "lines": "607-625",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L607-L625"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press_while_holding:key_f3",
    "action": "Clears every lock and timing nudge on the held steps, preserving their notes and conditions, without asking; this edit is included in the layer undo snapshot and may autosave later.",
    "short_label": "CLEAR LOCKS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "353-374",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L353-L374"
     }
    ]
   },
   {
    "mode": "midi_learn",
    "gesture": "press",
    "action": "Deletes the selected parameter’s learned MIDI CC without asking, saving settings now if stopped or when playback stops; it has no undo.",
    "short_label": "UNLEARN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/midi_learn.c",
      "lines": "161-175",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/midi_learn.c#L161-L175"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/midi_learn.c",
      "lines": "67-72",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/midi_learn.c#L67-L72"
     }
    ]
   },
   {
    "mode": "clear_confirm",
    "gesture": "press",
    "action": "Cancels the requested pattern clear without changing the pattern.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "590-612",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L590-L612"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Closes the menu and saves changed settings now if stopped, or after playback stops.",
    "short_label": "BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "143-164",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L143-L164"
     }
    ]
   },
   {
    "mode": "about",
    "gesture": "press",
    "action": "Returns from ABOUT to the settings list.",
    "short_label": "MENU LIST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "158-164",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L158-L164"
     }
    ]
   },
   {
    "mode": "fm6_import",
    "gesture": "press",
    "action": "Chooses the first destination FM6 bank and gives another 15 seconds to answer.",
    "short_label": "BANK 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "480-500",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L480-L500"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "power_on_holding:button_oct_down",
    "action": "Starts USB rescue when the physical OCT- button alone is held at power-on.",
    "short_label": "USB RESCUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/recovery.c",
      "lines": "43-51",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/recovery.c#L43-L51"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/bootguard.h",
      "lines": "28-30",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/bootguard.h#L28-L30"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "power_on_holding:button_oct_down+button_oct_up",
    "action": "Starts hardware calibration; completing every prompt stores the mapping, while a 30-second timeout restores the old mapping but still runs the settings-save check.",
    "short_label": "CALIBRATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/main.c",
      "lines": "235-239",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/main.c#L235-L239"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "742-807",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L742-L807"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "When prompted for this button, teaches its physical position; all buttons and seven clockwise encoder turns must finish before the mapping is kept.",
    "short_label": "TEACH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "757-802",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L757-L802"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press_while_holding:key_g3",
    "action": "Clears all parameter locks and timing nudges on held steps, retaining their notes and conditions; it asks nothing, is covered by layer undo, and can autosave later.",
    "short_label": "CLEAR LOCKS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "353-374",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L353-L374"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press_while_holding:key_a3",
    "action": "Clears all parameter locks and timing nudges on held steps, retaining their notes and conditions; it asks nothing, is covered by layer undo, and can autosave later.",
    "short_label": "CLEAR LOCKS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "353-374",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L353-L374"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press_while_holding:key_b3",
    "action": "Clears all parameter locks and timing nudges on held steps, retaining their notes and conditions; it asks nothing, is covered by layer undo, and can autosave later.",
    "short_label": "CLEAR LOCKS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "353-374",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L353-L374"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press_while_holding:key_c4",
    "action": "Clears all parameter locks and timing nudges on held steps, retaining their notes and conditions; it asks nothing, is covered by layer undo, and can autosave later.",
    "short_label": "CLEAR LOCKS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "353-374",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L353-L374"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press_while_holding:key_d4",
    "action": "Clears all parameter locks and timing nudges on held steps, retaining their notes and conditions; it asks nothing, is covered by layer undo, and can autosave later.",
    "short_label": "CLEAR LOCKS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "353-374",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L353-L374"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press_while_holding:key_e4",
    "action": "Clears all parameter locks and timing nudges on held steps, retaining their notes and conditions; it asks nothing, is covered by layer undo, and can autosave later.",
    "short_label": "CLEAR LOCKS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "353-374",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L353-L374"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press_while_holding:key_f4",
    "action": "Clears all parameter locks and timing nudges on held steps, retaining their notes and conditions; it asks nothing, is covered by layer undo, and can autosave later.",
    "short_label": "CLEAR LOCKS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "353-374",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L353-L374"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press_while_holding:key_g4",
    "action": "Clears all parameter locks and timing nudges on held steps, retaining their notes and conditions; it asks nothing, is covered by layer undo, and can autosave later.",
    "short_label": "CLEAR LOCKS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "353-374",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L353-L374"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press_while_holding:key_a4",
    "action": "Clears all parameter locks and timing nudges on held steps, retaining their notes and conditions; it asks nothing, is covered by layer undo, and can autosave later.",
    "short_label": "CLEAR LOCKS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "353-374",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L353-L374"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press_while_holding:key_b4",
    "action": "Clears all parameter locks and timing nudges on held steps, retaining their notes and conditions; it asks nothing, is covered by layer undo, and can autosave later.",
    "short_label": "CLEAR LOCKS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "353-374",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L353-L374"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press_while_holding:key_c5",
    "action": "Clears all parameter locks and timing nudges on held steps, retaining their notes and conditions; it asks nothing, is covered by layer undo, and can autosave later.",
    "short_label": "CLEAR LOCKS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "353-374",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L353-L374"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press_while_holding:key_d5",
    "action": "Clears all parameter locks and timing nudges on held steps, retaining their notes and conditions; it asks nothing, is covered by layer undo, and can autosave later.",
    "short_label": "CLEAR LOCKS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "353-374",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L353-L374"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press_while_holding:key_e5",
    "action": "Clears all parameter locks and timing nudges on held steps, retaining their notes and conditions; it asks nothing, is covered by layer undo, and can autosave later.",
    "short_label": "CLEAR LOCKS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "353-374",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L353-L374"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press_while_holding:key_f5",
    "action": "Clears all parameter locks and timing nudges on held steps, retaining their notes and conditions; it asks nothing, is covered by layer undo, and can autosave later.",
    "short_label": "CLEAR LOCKS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "353-374",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L353-L374"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press_while_holding:key_g5",
    "action": "Clears all parameter locks and timing nudges on held steps, retaining their notes and conditions; it asks nothing, is covered by layer undo, and can autosave later.",
    "short_label": "CLEAR LOCKS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "353-374",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L353-L374"
     }
    ]
   }
  ],
  "button_oct_up": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Moves the keyboard octave up within the range −3 to +3, except where a dialog, MIDI Learn, momentary edit or step layer takes the button.",
    "short_label": "OCT +",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "637-655",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L637-L655"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_oct_down",
    "action": "Resets the keyboard octave to its centre; keeping both OCT buttons down for over five seconds enters update mode.",
    "short_label": "OCT RESET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "649-654",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L649-L654"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/main.c",
      "lines": "275-298",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/main.c#L275-L298"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_lfo",
    "action": "Keeps the currently captured momentary parameter changes; further captured changes before LFO is released can still revert.",
    "short_label": "KEEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "640-647",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L640-L647"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "269-282",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L269-L282"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press",
    "action": "Redoes the last pattern edit captured by the STEPS layer, including steps, length, locks, nudges and conditions, when no step key is held; it changes RAM without asking and autosave may later keep it.",
    "short_label": "REDO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "93-131",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L93-L131"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "560-569",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L560-L569"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/project.c",
      "lines": "607-625",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L607-L625"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press_while_holding:key_f3",
    "action": "Cycles held steps together through ALWAYS, FILL ONLY and NO FILL, using the first held step as the starting point.",
    "short_label": "CONDITION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "353-374",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L353-L374"
     }
    ]
   },
   {
    "mode": "clear_confirm",
    "gesture": "press",
    "action": "Clears the chosen track’s steps, locks, nudges, conditions and latched chord at once without resetting its sound; no new undo snapshot is made and later autosave may keep the clear.",
    "short_label": "CONFIRM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "590-606",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L590-L606"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "305-311",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L305-L311"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/project.c",
      "lines": "607-625",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L607-L625"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Changes or opens the selected menu item; NEW PROJECT requires two presses, while MIDI LEARN clears all learned CCs with one press and no undo.",
    "short_label": "MENU OK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "175-233",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L175-L233"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "double_press",
    "action": "On NEW PROJECT, a first press arms the command and a second resets all tracks and patterns in RAM and stops playback; stored project slots, user sounds, samples and FM6 banks remain, no undo is captured and the empty working project can autosave later.",
    "short_label": "NEW PROJECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "22-45",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L22-L45"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "211-219",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L211-L219"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/project.c",
      "lines": "607-625",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L607-L625"
     }
    ]
   },
   {
    "mode": "fm6_import",
    "gesture": "press",
    "action": "Chooses the second destination FM6 bank and gives another 15 seconds to answer.",
    "short_label": "BANK 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "480-500",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L480-L500"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "power_on_holding:button_oct_up",
    "action": "Skips the saved working project and starts with the default empty project when physical OCT+ alone is held; leaving it idle and stopped can later overwrite the old autosave without another question.",
    "short_label": "EMPTY START",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/project.c",
      "lines": "628-641",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L628-L641"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/project.c",
      "lines": "607-625",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L607-L625"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "When prompted for this button, teaches its physical position; all buttons and seven clockwise encoder turns must finish before the mapping is kept.",
    "short_label": "TEACH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "757-802",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L757-L802"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press_while_holding:key_g3",
    "action": "Cycles the held steps through ALWAYS, FILL ONLY and NO FILL together.",
    "short_label": "CONDITION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "353-374",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L353-L374"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press_while_holding:key_a3",
    "action": "Cycles the held steps through ALWAYS, FILL ONLY and NO FILL together.",
    "short_label": "CONDITION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "353-374",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L353-L374"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press_while_holding:key_b3",
    "action": "Cycles the held steps through ALWAYS, FILL ONLY and NO FILL together.",
    "short_label": "CONDITION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "353-374",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L353-L374"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press_while_holding:key_c4",
    "action": "Cycles the held steps through ALWAYS, FILL ONLY and NO FILL together.",
    "short_label": "CONDITION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "353-374",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L353-L374"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press_while_holding:key_d4",
    "action": "Cycles the held steps through ALWAYS, FILL ONLY and NO FILL together.",
    "short_label": "CONDITION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "353-374",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L353-L374"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press_while_holding:key_e4",
    "action": "Cycles the held steps through ALWAYS, FILL ONLY and NO FILL together.",
    "short_label": "CONDITION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "353-374",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L353-L374"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press_while_holding:key_f4",
    "action": "Cycles the held steps through ALWAYS, FILL ONLY and NO FILL together.",
    "short_label": "CONDITION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "353-374",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L353-L374"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press_while_holding:key_g4",
    "action": "Cycles the held steps through ALWAYS, FILL ONLY and NO FILL together.",
    "short_label": "CONDITION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "353-374",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L353-L374"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press_while_holding:key_a4",
    "action": "Cycles the held steps through ALWAYS, FILL ONLY and NO FILL together.",
    "short_label": "CONDITION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "353-374",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L353-L374"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press_while_holding:key_b4",
    "action": "Cycles the held steps through ALWAYS, FILL ONLY and NO FILL together.",
    "short_label": "CONDITION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "353-374",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L353-L374"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press_while_holding:key_c5",
    "action": "Cycles the held steps through ALWAYS, FILL ONLY and NO FILL together.",
    "short_label": "CONDITION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "353-374",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L353-L374"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press_while_holding:key_d5",
    "action": "Cycles the held steps through ALWAYS, FILL ONLY and NO FILL together.",
    "short_label": "CONDITION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "353-374",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L353-L374"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press_while_holding:key_e5",
    "action": "Cycles the held steps through ALWAYS, FILL ONLY and NO FILL together.",
    "short_label": "CONDITION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "353-374",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L353-L374"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press_while_holding:key_f5",
    "action": "Cycles the held steps through ALWAYS, FILL ONLY and NO FILL together.",
    "short_label": "CONDITION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "353-374",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L353-L374"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press_while_holding:key_g5",
    "action": "Cycles the held steps through ALWAYS, FILL ONLY and NO FILL together.",
    "short_label": "CONDITION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "353-374",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L353-L374"
     }
    ]
   }
  ],
  "key_f3": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Outside layers and chord modifiers, plays the selected track’s note from F3, subject to octave, transpose and scale settings; WHITE quantisation silences black keys.",
    "short_label": "NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "97-140",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L97-L140"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L846"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the note or chord on the track where this key began; arp HOLD or sustain can keep it sounding.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "847-878",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L847-L878"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "689-698",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L689-L698"
     }
    ]
   },
   {
    "mode": "drum_keys",
    "gesture": "press",
    "action": "Triggers the kit’s kick sound at drum note 36, independent of octave and scale.",
    "short_label": "DRUM HIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "59-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L59-L94"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "With CHORD off, plays GM kit note 36 at the centre octave; octave shifts still apply and scale settings do not.",
    "short_label": "GM KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "82-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L82-L94"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "press",
    "action": "If this key maps to a note, sounds it and writes it into the cursor step; a non-POLY voice keeps the latest key, while POLY keeps up to four keys pressed together.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "426-450",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L426-L450"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "774-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L774-L846"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "release",
    "action": "When all note keys are released after entering notes, advances the cursor to the next step within the pattern.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "453-454",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L453-L454"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "127-133",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L127-L133"
     }
    ]
   },
   {
    "mode": "key_layer",
    "gesture": "press",
    "action": "Sets F as ROOT for every synth track; drum tracks are unchanged.",
    "short_label": "ROOT F",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "451-459",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L451-L459"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "press",
    "action": "Applies LOOP 4 to the whole mix while this key is held, replacing any other active punch effect; pressing its already latched effect again switches it off.",
    "short_label": "LOOP 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-806",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L806"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/punch.c",
      "lines": "13-18",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/punch.c#L13-L18"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "double_press",
    "action": "Two presses within 0.35 seconds latch LOOP 4 beyond key release and beyond leaving the FX layer; another effect replaces it.",
    "short_label": "FX LATCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "767-806",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L767-L806"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "release",
    "action": "Releases this key’s punch effect unless it is latched or another key has replaced it.",
    "short_label": "FX RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "850-854",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L850-L854"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press",
    "action": "Holds step 1 of the selected 16-step page; an empty step is filled at once with the last note, while an occupied step waits to clear on release unless edited.",
    "short_label": "STEP 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "215-234",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L215-L234"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "422-434",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L422-L434"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "release",
    "action": "Clears an occupied step and its locks, timing nudge and condition unless a step-editing control was used while held; it asks nothing, the layer undo snapshot can restore it, and autosave may keep the change later.",
    "short_label": "STEP RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "236-249",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L236-L249"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "252-258",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L252-L258"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "93-105",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L93-L105"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/project.c",
      "lines": "607-625",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L607-L625"
     }
    ]
   },
   {
    "mode": "engine_layer",
    "gesture": "press",
    "action": "Selects ANALOG on the selected synth track and loads that engine’s first preset; the drum track refuses this choice.",
    "short_label": "ANALOG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "438-449",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L438-L449"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/engines.c",
      "lines": "48-55",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/engines.c#L48-L55"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "381-398",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L381-L398"
     }
    ]
   },
   {
    "mode": "mix_layer",
    "gesture": "press",
    "action": "Toggles mute for track 1.",
    "short_label": "MUTE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "473-476",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L473-L476"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "press",
    "action": "Plays a scale chord on the selected synth track; transpose, octave, black-key modifiers, strum and voice leading affect the result.",
    "short_label": "CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "818-840",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L818-L840"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "97-140",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L97-L140"
     }
    ]
   }
  ],
  "key_fs3": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Outside layers and chord modifiers, plays the selected track’s note from F#3, subject to octave, transpose and scale settings; WHITE quantisation silences black keys.",
    "short_label": "NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "97-140",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L97-L140"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L846"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the note or chord on the track where this key began; arp HOLD or sustain can keep it sounding.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "847-878",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L847-L878"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "689-698",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L689-L698"
     }
    ]
   },
   {
    "mode": "drum_keys",
    "gesture": "press",
    "action": "Triggers the kit’s bass drum sound at drum note 35, independent of octave and scale.",
    "short_label": "DRUM HIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "59-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L59-L94"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "With CHORD off, plays GM kit note 37 at the centre octave; octave shifts still apply and scale settings do not.",
    "short_label": "GM KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "82-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L82-L94"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "press",
    "action": "If this key maps to a note, sounds it and writes it into the cursor step; a non-POLY voice keeps the latest key, while POLY keeps up to four keys pressed together.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "426-450",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L426-L450"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "774-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L774-L846"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "release",
    "action": "When all note keys are released after entering notes, advances the cursor to the next step within the pattern.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "453-454",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L453-L454"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "127-133",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L127-L133"
     }
    ]
   },
   {
    "mode": "key_layer",
    "gesture": "press",
    "action": "Sets F# as ROOT for every synth track; drum tracks are unchanged.",
    "short_label": "ROOT F#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "451-459",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L451-L459"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "press",
    "action": "Temporarily swaps a major third and minor third when that chord contains one; it can modify chords already held and combines with other black-key modifiers, while POWER responds only to inversion.",
    "short_label": "MINOR SWAP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "153-229",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L153-L229"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "818-822",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L818-L822"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "release",
    "action": "Removes this black-key modifier and retunes any chords still held to match the remaining modifiers.",
    "short_label": "MOD OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "859-862",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L859-L862"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "730-764",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L730-L764"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "press",
    "action": "Temporarily raises every track’s reverb send to full.",
    "short_label": "REV THROW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "807-808",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L807-L808"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/fx.c",
      "lines": "1012-1020",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/fx.c#L1012-L1020"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/fx.c",
      "lines": "773-779",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/fx.c#L773-L779"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/drums.c",
      "lines": "135-140",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/drums.c#L135-L140"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "release",
    "action": "Returns the temporary sends toward their stored values while existing effect tails continue.",
    "short_label": "THROW OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "848-849",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L848-L849"
     }
    ]
   },
   {
    "mode": "mix_layer",
    "gesture": "press",
    "action": "Has no action in the MIX layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "465-466",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L465-L466"
     }
    ]
   },
   {
    "mode": "engine_layer",
    "gesture": "press",
    "action": "Has no action in the ENGINE layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "438-440",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L438-L440"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press",
    "action": "Selects steps 1–16 when that page lies within the pattern length.",
    "short_label": "PAGE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "392-412",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L392-L412"
     }
    ]
   }
  ],
  "key_g3": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Outside layers and chord modifiers, plays the selected track’s note from G3, subject to octave, transpose and scale settings; WHITE quantisation silences black keys.",
    "short_label": "NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "97-140",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L97-L140"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L846"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the note or chord on the track where this key began; arp HOLD or sustain can keep it sounding.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "847-878",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L847-L878"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "689-698",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L689-L698"
     }
    ]
   },
   {
    "mode": "drum_keys",
    "gesture": "press",
    "action": "Triggers the kit’s snare sound at drum note 38, independent of octave and scale.",
    "short_label": "DRUM HIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "59-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L59-L94"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "With CHORD off, plays GM kit note 38 at the centre octave; octave shifts still apply and scale settings do not.",
    "short_label": "GM KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "82-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L82-L94"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "press",
    "action": "If this key maps to a note, sounds it and writes it into the cursor step; a non-POLY voice keeps the latest key, while POLY keeps up to four keys pressed together.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "426-450",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L426-L450"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "774-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L774-L846"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "release",
    "action": "When all note keys are released after entering notes, advances the cursor to the next step within the pattern.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "453-454",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L453-L454"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "127-133",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L127-L133"
     }
    ]
   },
   {
    "mode": "key_layer",
    "gesture": "press",
    "action": "Sets G as ROOT for every synth track; drum tracks are unchanged.",
    "short_label": "ROOT G",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "451-459",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L451-L459"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "press",
    "action": "Applies LOOP 8 to the whole mix while this key is held, replacing any other active punch effect; pressing its already latched effect again switches it off.",
    "short_label": "LOOP 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-806",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L806"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/punch.c",
      "lines": "13-18",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/punch.c#L13-L18"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "double_press",
    "action": "Two presses within 0.35 seconds latch LOOP 8 beyond key release and beyond leaving the FX layer; another effect replaces it.",
    "short_label": "FX LATCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "767-806",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L767-L806"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "release",
    "action": "Releases this key’s punch effect unless it is latched or another key has replaced it.",
    "short_label": "FX RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "850-854",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L850-L854"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press",
    "action": "Holds step 2 of the selected 16-step page; an empty step is filled at once with the last note, while an occupied step waits to clear on release unless edited.",
    "short_label": "STEP 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "215-234",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L215-L234"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "422-434",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L422-L434"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "release",
    "action": "Clears an occupied step and its locks, timing nudge and condition unless a step-editing control was used while held; it asks nothing, the layer undo snapshot can restore it, and autosave may keep the change later.",
    "short_label": "STEP RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "236-249",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L236-L249"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "252-258",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L252-L258"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "93-105",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L93-L105"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/project.c",
      "lines": "607-625",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L607-L625"
     }
    ]
   },
   {
    "mode": "engine_layer",
    "gesture": "press",
    "action": "Selects DIGITAL on the selected synth track and loads that engine’s first preset; the drum track refuses this choice.",
    "short_label": "DIGITAL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "438-449",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L438-L449"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/engines.c",
      "lines": "48-55",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/engines.c#L48-L55"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "381-398",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L381-L398"
     }
    ]
   },
   {
    "mode": "mix_layer",
    "gesture": "press",
    "action": "Toggles mute for track 2.",
    "short_label": "MUTE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "473-476",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L473-L476"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "press",
    "action": "Plays a scale chord on the selected synth track; transpose, octave, black-key modifiers, strum and voice leading affect the result.",
    "short_label": "CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "818-840",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L818-L840"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "97-140",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L97-L140"
     }
    ]
   }
  ],
  "key_gs3": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Outside layers and chord modifiers, plays the selected track’s note from G#3, subject to octave, transpose and scale settings; WHITE quantisation silences black keys.",
    "short_label": "NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "97-140",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L97-L140"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L846"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the note or chord on the track where this key began; arp HOLD or sustain can keep it sounding.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "847-878",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L847-L878"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "689-698",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L689-L698"
     }
    ]
   },
   {
    "mode": "drum_keys",
    "gesture": "press",
    "action": "Triggers the kit’s electric snare sound at drum note 40, independent of octave and scale.",
    "short_label": "DRUM HIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "59-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L59-L94"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "With CHORD off, plays GM kit note 39 at the centre octave; octave shifts still apply and scale settings do not.",
    "short_label": "GM KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "82-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L82-L94"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "press",
    "action": "If this key maps to a note, sounds it and writes it into the cursor step; a non-POLY voice keeps the latest key, while POLY keeps up to four keys pressed together.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "426-450",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L426-L450"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "774-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L774-L846"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "release",
    "action": "When all note keys are released after entering notes, advances the cursor to the next step within the pattern.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "453-454",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L453-L454"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "127-133",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L127-L133"
     }
    ]
   },
   {
    "mode": "key_layer",
    "gesture": "press",
    "action": "Sets G# as ROOT for every synth track; drum tracks are unchanged.",
    "short_label": "ROOT G#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "451-459",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L451-L459"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "press",
    "action": "Temporarily adds the scale’s seventh when room and chord type allow; it can modify chords already held and combines with other black-key modifiers, while POWER responds only to inversion.",
    "short_label": "ADD SEVENTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "153-229",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L153-L229"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "818-822",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L818-L822"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "release",
    "action": "Removes this black-key modifier and retunes any chords still held to match the remaining modifiers.",
    "short_label": "MOD OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "859-862",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L859-L862"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "730-764",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L730-L764"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "press",
    "action": "Temporarily raises every synth track’s delay send to full and lifts low feedback toward 70 percent; the drum track has no delay send.",
    "short_label": "ECHO THROW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "807-808",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L807-L808"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/fx.c",
      "lines": "1012-1020",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/fx.c#L1012-L1020"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/fx.c",
      "lines": "350-353",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/fx.c#L350-L353"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/fx.c",
      "lines": "773-779",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/fx.c#L773-L779"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/drums.c",
      "lines": "135-140",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/drums.c#L135-L140"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "release",
    "action": "Returns the temporary sends toward their stored values while existing effect tails continue.",
    "short_label": "THROW OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "848-849",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L848-L849"
     }
    ]
   },
   {
    "mode": "mix_layer",
    "gesture": "press",
    "action": "Has no action in the MIX layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "465-466",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L465-L466"
     }
    ]
   },
   {
    "mode": "engine_layer",
    "gesture": "press",
    "action": "Has no action in the ENGINE layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "438-440",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L438-L440"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press",
    "action": "Selects steps 17–32 when that page lies within the pattern length.",
    "short_label": "PAGE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "392-412",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L392-L412"
     }
    ]
   }
  ],
  "key_a3": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Outside layers and chord modifiers, plays the selected track’s note from A3, subject to octave, transpose and scale settings; WHITE quantisation silences black keys.",
    "short_label": "NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "97-140",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L97-L140"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L846"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the note or chord on the track where this key began; arp HOLD or sustain can keep it sounding.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "847-878",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L847-L878"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "689-698",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L689-L698"
     }
    ]
   },
   {
    "mode": "drum_keys",
    "gesture": "press",
    "action": "Triggers the kit’s side stick sound at drum note 37, independent of octave and scale.",
    "short_label": "DRUM HIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "59-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L59-L94"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "With CHORD off, plays GM kit note 40 at the centre octave; octave shifts still apply and scale settings do not.",
    "short_label": "GM KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "82-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L82-L94"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "press",
    "action": "If this key maps to a note, sounds it and writes it into the cursor step; a non-POLY voice keeps the latest key, while POLY keeps up to four keys pressed together.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "426-450",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L426-L450"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "774-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L774-L846"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "release",
    "action": "When all note keys are released after entering notes, advances the cursor to the next step within the pattern.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "453-454",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L453-L454"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "127-133",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L127-L133"
     }
    ]
   },
   {
    "mode": "key_layer",
    "gesture": "press",
    "action": "Sets A as ROOT for every synth track; drum tracks are unchanged.",
    "short_label": "ROOT A",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "451-459",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L451-L459"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "press",
    "action": "Applies LOOP 16 to the whole mix while this key is held, replacing any other active punch effect; pressing its already latched effect again switches it off.",
    "short_label": "LOOP 16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-806",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L806"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/punch.c",
      "lines": "13-18",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/punch.c#L13-L18"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "double_press",
    "action": "Two presses within 0.35 seconds latch LOOP 16 beyond key release and beyond leaving the FX layer; another effect replaces it.",
    "short_label": "FX LATCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "767-806",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L767-L806"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "release",
    "action": "Releases this key’s punch effect unless it is latched or another key has replaced it.",
    "short_label": "FX RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "850-854",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L850-L854"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press",
    "action": "Holds step 3 of the selected 16-step page; an empty step is filled at once with the last note, while an occupied step waits to clear on release unless edited.",
    "short_label": "STEP 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "215-234",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L215-L234"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "422-434",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L422-L434"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "release",
    "action": "Clears an occupied step and its locks, timing nudge and condition unless a step-editing control was used while held; it asks nothing, the layer undo snapshot can restore it, and autosave may keep the change later.",
    "short_label": "STEP RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "236-249",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L236-L249"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "252-258",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L252-L258"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "93-105",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L93-L105"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/project.c",
      "lines": "607-625",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L607-L625"
     }
    ]
   },
   {
    "mode": "engine_layer",
    "gesture": "press",
    "action": "Selects PHASE on the selected synth track and loads that engine’s first preset; the drum track refuses this choice.",
    "short_label": "PHASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "438-449",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L438-L449"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/engines.c",
      "lines": "48-55",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/engines.c#L48-L55"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "381-398",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L381-L398"
     }
    ]
   },
   {
    "mode": "mix_layer",
    "gesture": "press",
    "action": "Toggles mute for track 3.",
    "short_label": "MUTE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "473-476",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L473-L476"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "press",
    "action": "Plays a scale chord on the selected synth track; transpose, octave, black-key modifiers, strum and voice leading affect the result.",
    "short_label": "CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "818-840",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L818-L840"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "97-140",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L97-L140"
     }
    ]
   }
  ],
  "key_as3": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Outside layers and chord modifiers, plays the selected track’s note from A#3, subject to octave, transpose and scale settings; WHITE quantisation silences black keys.",
    "short_label": "NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "97-140",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L97-L140"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L846"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the note or chord on the track where this key began; arp HOLD or sustain can keep it sounding.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "847-878",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L847-L878"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "689-698",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L689-L698"
     }
    ]
   },
   {
    "mode": "drum_keys",
    "gesture": "press",
    "action": "Triggers the kit’s clap sound at drum note 39, independent of octave and scale.",
    "short_label": "DRUM HIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "59-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L59-L94"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "With CHORD off, plays GM kit note 41 at the centre octave; octave shifts still apply and scale settings do not.",
    "short_label": "GM KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "82-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L82-L94"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "press",
    "action": "If this key maps to a note, sounds it and writes it into the cursor step; a non-POLY voice keeps the latest key, while POLY keeps up to four keys pressed together.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "426-450",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L426-L450"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "774-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L774-L846"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "release",
    "action": "When all note keys are released after entering notes, advances the cursor to the next step within the pattern.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "453-454",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L453-L454"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "127-133",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L127-L133"
     }
    ]
   },
   {
    "mode": "key_layer",
    "gesture": "press",
    "action": "Sets A# as ROOT for every synth track; drum tracks are unchanged.",
    "short_label": "ROOT A#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "451-459",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L451-L459"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "press",
    "action": "Temporarily replaces the chord’s third with the scale’s fourth; it can modify chords already held and combines with other black-key modifiers, while POWER responds only to inversion.",
    "short_label": "SUS4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "153-229",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L153-L229"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "818-822",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L818-L822"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "release",
    "action": "Removes this black-key modifier and retunes any chords still held to match the remaining modifiers.",
    "short_label": "MOD OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "859-862",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L859-L862"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "730-764",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L730-L764"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "press",
    "action": "Has no action in the PUNCH layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-810",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L810"
     }
    ]
   },
   {
    "mode": "mix_layer",
    "gesture": "press",
    "action": "Has no action in the MIX layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "465-466",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L465-L466"
     }
    ]
   },
   {
    "mode": "engine_layer",
    "gesture": "press",
    "action": "Has no action in the ENGINE layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "438-440",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L438-L440"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press",
    "action": "Selects steps 33–48 when that page lies within the pattern length.",
    "short_label": "PAGE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "392-412",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L392-L412"
     }
    ]
   }
  ],
  "key_b3": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Outside layers and chord modifiers, plays the selected track’s note from B3, subject to octave, transpose and scale settings; WHITE quantisation silences black keys.",
    "short_label": "NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "97-140",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L97-L140"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L846"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the note or chord on the track where this key began; arp HOLD or sustain can keep it sounding.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "847-878",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L847-L878"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "689-698",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L689-L698"
     }
    ]
   },
   {
    "mode": "drum_keys",
    "gesture": "press",
    "action": "Triggers the kit’s closed hi-hat sound at drum note 42, independent of octave and scale.",
    "short_label": "DRUM HIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "59-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L59-L94"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "With CHORD off, plays GM kit note 42 at the centre octave; octave shifts still apply and scale settings do not.",
    "short_label": "GM KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "82-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L82-L94"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "press",
    "action": "If this key maps to a note, sounds it and writes it into the cursor step; a non-POLY voice keeps the latest key, while POLY keeps up to four keys pressed together.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "426-450",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L426-L450"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "774-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L774-L846"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "release",
    "action": "When all note keys are released after entering notes, advances the cursor to the next step within the pattern.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "453-454",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L453-L454"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "127-133",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L127-L133"
     }
    ]
   },
   {
    "mode": "key_layer",
    "gesture": "press",
    "action": "Sets B as ROOT for every synth track; drum tracks are unchanged.",
    "short_label": "ROOT B",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "451-459",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L451-L459"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "press",
    "action": "Applies LOOP 32 to the whole mix while this key is held, replacing any other active punch effect; pressing its already latched effect again switches it off.",
    "short_label": "LOOP 32",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-806",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L806"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/punch.c",
      "lines": "13-18",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/punch.c#L13-L18"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "double_press",
    "action": "Two presses within 0.35 seconds latch LOOP 32 beyond key release and beyond leaving the FX layer; another effect replaces it.",
    "short_label": "FX LATCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "767-806",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L767-L806"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "release",
    "action": "Releases this key’s punch effect unless it is latched or another key has replaced it.",
    "short_label": "FX RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "850-854",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L850-L854"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press",
    "action": "Holds step 4 of the selected 16-step page; an empty step is filled at once with the last note, while an occupied step waits to clear on release unless edited.",
    "short_label": "STEP 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "215-234",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L215-L234"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "422-434",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L422-L434"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "release",
    "action": "Clears an occupied step and its locks, timing nudge and condition unless a step-editing control was used while held; it asks nothing, the layer undo snapshot can restore it, and autosave may keep the change later.",
    "short_label": "STEP RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "236-249",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L236-L249"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "252-258",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L252-L258"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "93-105",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L93-L105"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/project.c",
      "lines": "607-625",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L607-L625"
     }
    ]
   },
   {
    "mode": "engine_layer",
    "gesture": "press",
    "action": "Selects LOFI on the selected synth track and loads that engine’s first preset; the drum track refuses this choice.",
    "short_label": "LOFI",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "438-449",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L438-L449"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/engines.c",
      "lines": "48-55",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/engines.c#L48-L55"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "381-398",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L381-L398"
     }
    ]
   },
   {
    "mode": "mix_layer",
    "gesture": "press",
    "action": "Toggles mute for track 4.",
    "short_label": "MUTE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "473-476",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L473-L476"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "press",
    "action": "Plays a scale chord on the selected synth track; transpose, octave, black-key modifiers, strum and voice leading affect the result.",
    "short_label": "CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "818-840",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L818-L840"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "97-140",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L97-L140"
     }
    ]
   }
  ],
  "key_c4": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Outside layers and chord modifiers, plays the selected track’s note from C4, subject to octave, transpose and scale settings; WHITE quantisation silences black keys.",
    "short_label": "NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "97-140",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L97-L140"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L846"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the note or chord on the track where this key began; arp HOLD or sustain can keep it sounding.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "847-878",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L847-L878"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "689-698",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L689-L698"
     }
    ]
   },
   {
    "mode": "drum_keys",
    "gesture": "press",
    "action": "Triggers the kit’s pedal hi-hat sound at drum note 44, independent of octave and scale.",
    "short_label": "DRUM HIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "59-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L59-L94"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "With CHORD off, plays GM kit note 43 at the centre octave; octave shifts still apply and scale settings do not.",
    "short_label": "GM KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "82-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L82-L94"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "press",
    "action": "If this key maps to a note, sounds it and writes it into the cursor step; a non-POLY voice keeps the latest key, while POLY keeps up to four keys pressed together.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "426-450",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L426-L450"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "774-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L774-L846"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "release",
    "action": "When all note keys are released after entering notes, advances the cursor to the next step within the pattern.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "453-454",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L453-L454"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "127-133",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L127-L133"
     }
    ]
   },
   {
    "mode": "key_layer",
    "gesture": "press",
    "action": "Sets C as ROOT for every synth track; drum tracks are unchanged.",
    "short_label": "ROOT C",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "451-459",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L451-L459"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "press",
    "action": "Applies STUTTER to the whole mix while this key is held, replacing any other active punch effect; pressing its already latched effect again switches it off.",
    "short_label": "STUTTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-806",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L806"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/punch.c",
      "lines": "13-18",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/punch.c#L13-L18"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "double_press",
    "action": "Two presses within 0.35 seconds latch STUTTER beyond key release and beyond leaving the FX layer; another effect replaces it.",
    "short_label": "FX LATCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "767-806",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L767-L806"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "release",
    "action": "Releases this key’s punch effect unless it is latched or another key has replaced it.",
    "short_label": "FX RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "850-854",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L850-L854"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press",
    "action": "Holds step 5 of the selected 16-step page; an empty step is filled at once with the last note, while an occupied step waits to clear on release unless edited.",
    "short_label": "STEP 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "215-234",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L215-L234"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "422-434",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L422-L434"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "release",
    "action": "Clears an occupied step and its locks, timing nudge and condition unless a step-editing control was used while held; it asks nothing, the layer undo snapshot can restore it, and autosave may keep the change later.",
    "short_label": "STEP RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "236-249",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L236-L249"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "252-258",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L252-L258"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "93-105",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L93-L105"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/project.c",
      "lines": "607-625",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L607-L625"
     }
    ]
   },
   {
    "mode": "engine_layer",
    "gesture": "press",
    "action": "Selects SAMPLE on the selected synth track and loads that engine’s first preset; the drum track refuses this choice.",
    "short_label": "SAMPLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "438-449",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L438-L449"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/engines.c",
      "lines": "48-55",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/engines.c#L48-L55"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "381-398",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L381-L398"
     }
    ]
   },
   {
    "mode": "mix_layer",
    "gesture": "press",
    "action": "Toggles solo for track 1; several tracks can be soloed together.",
    "short_label": "SOLO 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "473-476",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L473-L476"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "press",
    "action": "Plays a scale chord on the selected synth track; transpose, octave, black-key modifiers, strum and voice leading affect the result.",
    "short_label": "CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "818-840",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L818-L840"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "97-140",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L97-L140"
     }
    ]
   }
  ],
  "key_cs4": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Outside layers and chord modifiers, plays the selected track’s note from C#4, subject to octave, transpose and scale settings; WHITE quantisation silences black keys.",
    "short_label": "NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "97-140",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L97-L140"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L846"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the note or chord on the track where this key began; arp HOLD or sustain can keep it sounding.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "847-878",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L847-L878"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "689-698",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L689-L698"
     }
    ]
   },
   {
    "mode": "drum_keys",
    "gesture": "press",
    "action": "Triggers the kit’s open hi-hat sound at drum note 46, independent of octave and scale.",
    "short_label": "DRUM HIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "59-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L59-L94"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "With CHORD off, plays GM kit note 44 at the centre octave; octave shifts still apply and scale settings do not.",
    "short_label": "GM KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "82-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L82-L94"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "press",
    "action": "If this key maps to a note, sounds it and writes it into the cursor step; a non-POLY voice keeps the latest key, while POLY keeps up to four keys pressed together.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "426-450",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L426-L450"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "774-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L774-L846"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "release",
    "action": "When all note keys are released after entering notes, advances the cursor to the next step within the pattern.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "453-454",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L453-L454"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "127-133",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L127-L133"
     }
    ]
   },
   {
    "mode": "key_layer",
    "gesture": "press",
    "action": "Sets C# as ROOT for every synth track; drum tracks are unchanged.",
    "short_label": "ROOT C#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "451-459",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L451-L459"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "press",
    "action": "Temporarily adds the scale’s ninth when room and chord type allow; it can modify chords already held and combines with other black-key modifiers, while POWER responds only to inversion.",
    "short_label": "ADD NINTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "153-229",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L153-L229"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "818-822",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L818-L822"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "release",
    "action": "Removes this black-key modifier and retunes any chords still held to match the remaining modifiers.",
    "short_label": "MOD OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "859-862",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L859-L862"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "730-764",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L730-L764"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "press",
    "action": "Has no action in the PUNCH layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-810",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L810"
     }
    ]
   },
   {
    "mode": "mix_layer",
    "gesture": "press",
    "action": "Has no action in the MIX layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "465-466",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L465-L466"
     }
    ]
   },
   {
    "mode": "engine_layer",
    "gesture": "press",
    "action": "Has no action in the ENGINE layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "438-440",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L438-L440"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press",
    "action": "Selects steps 49–64 when that page lies within the pattern length.",
    "short_label": "PAGE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "392-412",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L392-L412"
     }
    ]
   }
  ],
  "key_d4": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Outside layers and chord modifiers, plays the selected track’s note from D4, subject to octave, transpose and scale settings; WHITE quantisation silences black keys.",
    "short_label": "NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "97-140",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L97-L140"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L846"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the note or chord on the track where this key began; arp HOLD or sustain can keep it sounding.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "847-878",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L847-L878"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "689-698",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L689-L698"
     }
    ]
   },
   {
    "mode": "drum_keys",
    "gesture": "press",
    "action": "Triggers the kit’s low floor tom sound at drum note 41, independent of octave and scale.",
    "short_label": "DRUM HIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "59-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L59-L94"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "With CHORD off, plays GM kit note 45 at the centre octave; octave shifts still apply and scale settings do not.",
    "short_label": "GM KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "82-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L82-L94"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "press",
    "action": "If this key maps to a note, sounds it and writes it into the cursor step; a non-POLY voice keeps the latest key, while POLY keeps up to four keys pressed together.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "426-450",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L426-L450"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "774-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L774-L846"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "release",
    "action": "When all note keys are released after entering notes, advances the cursor to the next step within the pattern.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "453-454",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L453-L454"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "127-133",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L127-L133"
     }
    ]
   },
   {
    "mode": "key_layer",
    "gesture": "press",
    "action": "Sets D as ROOT for every synth track; drum tracks are unchanged.",
    "short_label": "ROOT D",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "451-459",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L451-L459"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "press",
    "action": "Applies REVERSE to the whole mix while this key is held, replacing any other active punch effect; pressing its already latched effect again switches it off.",
    "short_label": "REVERSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-806",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L806"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/punch.c",
      "lines": "13-18",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/punch.c#L13-L18"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "double_press",
    "action": "Two presses within 0.35 seconds latch REVERSE beyond key release and beyond leaving the FX layer; another effect replaces it.",
    "short_label": "FX LATCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "767-806",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L767-L806"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "release",
    "action": "Releases this key’s punch effect unless it is latched or another key has replaced it.",
    "short_label": "FX RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "850-854",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L850-L854"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press",
    "action": "Holds step 6 of the selected 16-step page; an empty step is filled at once with the last note, while an occupied step waits to clear on release unless edited.",
    "short_label": "STEP 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "215-234",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L215-L234"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "422-434",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L422-L434"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "release",
    "action": "Clears an occupied step and its locks, timing nudge and condition unless a step-editing control was used while held; it asks nothing, the layer undo snapshot can restore it, and autosave may keep the change later.",
    "short_label": "STEP RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "236-249",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L236-L249"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "252-258",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L252-L258"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "93-105",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L93-L105"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/project.c",
      "lines": "607-625",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L607-L625"
     }
    ]
   },
   {
    "mode": "engine_layer",
    "gesture": "press",
    "action": "Selects VOICE on the selected synth track and loads that engine’s first preset; the drum track refuses this choice.",
    "short_label": "VOICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "438-449",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L438-L449"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/engines.c",
      "lines": "48-55",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/engines.c#L48-L55"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "381-398",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L381-L398"
     }
    ]
   },
   {
    "mode": "mix_layer",
    "gesture": "press",
    "action": "Toggles solo for track 2; several tracks can be soloed together.",
    "short_label": "SOLO 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "473-476",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L473-L476"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "press",
    "action": "Plays a scale chord on the selected synth track; transpose, octave, black-key modifiers, strum and voice leading affect the result.",
    "short_label": "CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "818-840",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L818-L840"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "97-140",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L97-L140"
     }
    ]
   }
  ],
  "key_ds4": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Outside layers and chord modifiers, plays the selected track’s note from D#4, subject to octave, transpose and scale settings; WHITE quantisation silences black keys.",
    "short_label": "NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "97-140",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L97-L140"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L846"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the note or chord on the track where this key began; arp HOLD or sustain can keep it sounding.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "847-878",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L847-L878"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "689-698",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L689-L698"
     }
    ]
   },
   {
    "mode": "drum_keys",
    "gesture": "press",
    "action": "Triggers the kit’s high floor tom sound at drum note 43, independent of octave and scale.",
    "short_label": "DRUM HIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "59-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L59-L94"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "With CHORD off, plays GM kit note 46 at the centre octave; octave shifts still apply and scale settings do not.",
    "short_label": "GM KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "82-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L82-L94"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "press",
    "action": "If this key maps to a note, sounds it and writes it into the cursor step; a non-POLY voice keeps the latest key, while POLY keeps up to four keys pressed together.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "426-450",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L426-L450"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "774-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L774-L846"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "release",
    "action": "When all note keys are released after entering notes, advances the cursor to the next step within the pattern.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "453-454",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L453-L454"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "127-133",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L127-L133"
     }
    ]
   },
   {
    "mode": "key_layer",
    "gesture": "press",
    "action": "Sets D# as ROOT for every synth track; drum tracks are unchanged.",
    "short_label": "ROOT D#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "451-459",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L451-L459"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "press",
    "action": "Temporarily raises the chord’s root by an octave when possible; it can modify chords already held and combines with other black-key modifiers, while POWER responds only to inversion.",
    "short_label": "INVERSION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "153-229",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L153-L229"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "818-822",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L818-L822"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "release",
    "action": "Removes this black-key modifier and retunes any chords still held to match the remaining modifiers.",
    "short_label": "MOD OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "859-862",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L859-L862"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "730-764",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L730-L764"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "press",
    "action": "Has no action in the PUNCH layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-810",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L810"
     }
    ]
   },
   {
    "mode": "mix_layer",
    "gesture": "press",
    "action": "Has no action in the MIX layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "465-466",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L465-L466"
     }
    ]
   },
   {
    "mode": "engine_layer",
    "gesture": "press",
    "action": "Has no action in the ENGINE layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "438-440",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L438-L440"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press",
    "action": "Rotates the current pattern one step earlier, moving its locks, nudges and conditions with it; it asks nothing, the layer undo snapshot can restore it, and autosave may keep it later.",
    "short_label": "SHIFT LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "133-198",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L133-L198"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/project.c",
      "lines": "607-625",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L607-L625"
     }
    ]
   }
  ],
  "key_e4": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Outside layers and chord modifiers, plays the selected track’s note from E4, subject to octave, transpose and scale settings; WHITE quantisation silences black keys.",
    "short_label": "NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "97-140",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L97-L140"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L846"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the note or chord on the track where this key began; arp HOLD or sustain can keep it sounding.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "847-878",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L847-L878"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "689-698",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L689-L698"
     }
    ]
   },
   {
    "mode": "drum_keys",
    "gesture": "press",
    "action": "Triggers the kit’s low tom sound at drum note 45, independent of octave and scale.",
    "short_label": "DRUM HIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "59-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L59-L94"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "With CHORD off, plays GM kit note 47 at the centre octave; octave shifts still apply and scale settings do not.",
    "short_label": "GM KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "82-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L82-L94"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "press",
    "action": "If this key maps to a note, sounds it and writes it into the cursor step; a non-POLY voice keeps the latest key, while POLY keeps up to four keys pressed together.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "426-450",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L426-L450"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "774-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L774-L846"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "release",
    "action": "When all note keys are released after entering notes, advances the cursor to the next step within the pattern.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "453-454",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L453-L454"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "127-133",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L127-L133"
     }
    ]
   },
   {
    "mode": "key_layer",
    "gesture": "press",
    "action": "Sets E as ROOT for every synth track; drum tracks are unchanged.",
    "short_label": "ROOT E",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "451-459",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L451-L459"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "press",
    "action": "Applies STOP to the whole mix while this key is held, replacing any other active punch effect; pressing its already latched effect again switches it off.",
    "short_label": "STOP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-806",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L806"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/punch.c",
      "lines": "13-18",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/punch.c#L13-L18"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "double_press",
    "action": "Two presses within 0.35 seconds latch STOP beyond key release and beyond leaving the FX layer; another effect replaces it.",
    "short_label": "FX LATCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "767-806",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L767-L806"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "release",
    "action": "Releases this key’s punch effect unless it is latched or another key has replaced it.",
    "short_label": "FX RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "850-854",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L850-L854"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press",
    "action": "Holds step 7 of the selected 16-step page; an empty step is filled at once with the last note, while an occupied step waits to clear on release unless edited.",
    "short_label": "STEP 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "215-234",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L215-L234"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "422-434",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L422-L434"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "release",
    "action": "Clears an occupied step and its locks, timing nudge and condition unless a step-editing control was used while held; it asks nothing, the layer undo snapshot can restore it, and autosave may keep the change later.",
    "short_label": "STEP RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "236-249",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L236-L249"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "252-258",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L252-L258"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "93-105",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L93-L105"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/project.c",
      "lines": "607-625",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L607-L625"
     }
    ]
   },
   {
    "mode": "engine_layer",
    "gesture": "press",
    "action": "Selects TRIO on the selected synth track and loads that engine’s first preset; the drum track refuses this choice.",
    "short_label": "TRIO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "438-449",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L438-L449"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/engines.c",
      "lines": "48-55",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/engines.c#L48-L55"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "381-398",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L381-L398"
     }
    ]
   },
   {
    "mode": "mix_layer",
    "gesture": "press",
    "action": "Toggles solo for track 3; several tracks can be soloed together.",
    "short_label": "SOLO 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "473-476",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L473-L476"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "press",
    "action": "Plays a scale chord on the selected synth track; transpose, octave, black-key modifiers, strum and voice leading affect the result.",
    "short_label": "CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "818-840",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L818-L840"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "97-140",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L97-L140"
     }
    ]
   }
  ],
  "key_f4": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Outside layers and chord modifiers, plays the selected track’s note from F4, subject to octave, transpose and scale settings; WHITE quantisation silences black keys.",
    "short_label": "NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "97-140",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L97-L140"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L846"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the note or chord on the track where this key began; arp HOLD or sustain can keep it sounding.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "847-878",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L847-L878"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "689-698",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L689-L698"
     }
    ]
   },
   {
    "mode": "drum_keys",
    "gesture": "press",
    "action": "Triggers the kit’s low-mid tom sound at drum note 47, independent of octave and scale.",
    "short_label": "DRUM HIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "59-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L59-L94"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "With CHORD off, plays GM kit note 48 at the centre octave; octave shifts still apply and scale settings do not.",
    "short_label": "GM KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "82-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L82-L94"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "press",
    "action": "If this key maps to a note, sounds it and writes it into the cursor step; a non-POLY voice keeps the latest key, while POLY keeps up to four keys pressed together.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "426-450",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L426-L450"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "774-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L774-L846"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "release",
    "action": "When all note keys are released after entering notes, advances the cursor to the next step within the pattern.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "453-454",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L453-L454"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "127-133",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L127-L133"
     }
    ]
   },
   {
    "mode": "key_layer",
    "gesture": "press",
    "action": "Sets F as ROOT for every synth track; drum tracks are unchanged.",
    "short_label": "ROOT F",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "451-459",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L451-L459"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "press",
    "action": "Applies HALF to the whole mix while this key is held, replacing any other active punch effect; pressing its already latched effect again switches it off.",
    "short_label": "HALF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-806",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L806"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/punch.c",
      "lines": "13-18",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/punch.c#L13-L18"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "double_press",
    "action": "Two presses within 0.35 seconds latch HALF beyond key release and beyond leaving the FX layer; another effect replaces it.",
    "short_label": "FX LATCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "767-806",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L767-L806"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "release",
    "action": "Releases this key’s punch effect unless it is latched or another key has replaced it.",
    "short_label": "FX RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "850-854",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L850-L854"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press",
    "action": "Holds step 8 of the selected 16-step page; an empty step is filled at once with the last note, while an occupied step waits to clear on release unless edited.",
    "short_label": "STEP 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "215-234",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L215-L234"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "422-434",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L422-L434"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "release",
    "action": "Clears an occupied step and its locks, timing nudge and condition unless a step-editing control was used while held; it asks nothing, the layer undo snapshot can restore it, and autosave may keep the change later.",
    "short_label": "STEP RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "236-249",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L236-L249"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "252-258",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L252-L258"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "93-105",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L93-L105"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/project.c",
      "lines": "607-625",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L607-L625"
     }
    ]
   },
   {
    "mode": "engine_layer",
    "gesture": "press",
    "action": "Selects WHEEL on the selected synth track and loads that engine’s first preset; the drum track refuses this choice.",
    "short_label": "WHEEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "438-449",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L438-L449"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/engines.c",
      "lines": "48-55",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/engines.c#L48-L55"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "381-398",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L381-L398"
     }
    ]
   },
   {
    "mode": "mix_layer",
    "gesture": "press",
    "action": "Toggles solo for track 4; several tracks can be soloed together.",
    "short_label": "SOLO 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "473-476",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L473-L476"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "press",
    "action": "Plays a scale chord on the selected synth track; transpose, octave, black-key modifiers, strum and voice leading affect the result.",
    "short_label": "CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "818-840",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L818-L840"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "97-140",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L97-L140"
     }
    ]
   }
  ],
  "key_fs4": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Outside layers and chord modifiers, plays the selected track’s note from F#4, subject to octave, transpose and scale settings; WHITE quantisation silences black keys.",
    "short_label": "NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "97-140",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L97-L140"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L846"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the note or chord on the track where this key began; arp HOLD or sustain can keep it sounding.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "847-878",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L847-L878"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "689-698",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L689-L698"
     }
    ]
   },
   {
    "mode": "drum_keys",
    "gesture": "press",
    "action": "Triggers the kit’s high-mid tom sound at drum note 48, independent of octave and scale.",
    "short_label": "DRUM HIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "59-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L59-L94"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "With CHORD off, plays GM kit note 49 at the centre octave; octave shifts still apply and scale settings do not.",
    "short_label": "GM KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "82-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L82-L94"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "press",
    "action": "If this key maps to a note, sounds it and writes it into the cursor step; a non-POLY voice keeps the latest key, while POLY keeps up to four keys pressed together.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "426-450",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L426-L450"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "774-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L774-L846"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "release",
    "action": "When all note keys are released after entering notes, advances the cursor to the next step within the pattern.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "453-454",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L453-L454"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "127-133",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L127-L133"
     }
    ]
   },
   {
    "mode": "key_layer",
    "gesture": "press",
    "action": "Sets F# as ROOT for every synth track; drum tracks are unchanged.",
    "short_label": "ROOT F#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "451-459",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L451-L459"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "press",
    "action": "Temporarily swaps a major third and minor third when that chord contains one; it can modify chords already held and combines with other black-key modifiers, while POWER responds only to inversion.",
    "short_label": "MINOR SWAP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "153-229",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L153-L229"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "818-822",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L818-L822"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "release",
    "action": "Removes this black-key modifier and retunes any chords still held to match the remaining modifiers.",
    "short_label": "MOD OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "859-862",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L859-L862"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "730-764",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L730-L764"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "press",
    "action": "Has no action in the PUNCH layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-810",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L810"
     }
    ]
   },
   {
    "mode": "mix_layer",
    "gesture": "press",
    "action": "Has no action in the MIX layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "465-466",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L465-L466"
     }
    ]
   },
   {
    "mode": "engine_layer",
    "gesture": "press",
    "action": "Has no action in the ENGINE layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "438-440",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L438-L440"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press",
    "action": "Rotates the current pattern one step later, moving its locks, nudges and conditions with it; it asks nothing, the layer undo snapshot can restore it, and autosave may keep it later.",
    "short_label": "SHIFT RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "133-198",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L133-L198"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/project.c",
      "lines": "607-625",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L607-L625"
     }
    ]
   }
  ],
  "key_g4": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Outside layers and chord modifiers, plays the selected track’s note from G4, subject to octave, transpose and scale settings; WHITE quantisation silences black keys.",
    "short_label": "NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "97-140",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L97-L140"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L846"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the note or chord on the track where this key began; arp HOLD or sustain can keep it sounding.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "847-878",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L847-L878"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "689-698",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L689-L698"
     }
    ]
   },
   {
    "mode": "drum_keys",
    "gesture": "press",
    "action": "Triggers the kit’s high tom sound at drum note 50, independent of octave and scale.",
    "short_label": "DRUM HIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "59-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L59-L94"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "With CHORD off, plays GM kit note 50 at the centre octave; octave shifts still apply and scale settings do not.",
    "short_label": "GM KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "82-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L82-L94"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "press",
    "action": "If this key maps to a note, sounds it and writes it into the cursor step; a non-POLY voice keeps the latest key, while POLY keeps up to four keys pressed together.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "426-450",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L426-L450"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "774-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L774-L846"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "release",
    "action": "When all note keys are released after entering notes, advances the cursor to the next step within the pattern.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "453-454",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L453-L454"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "127-133",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L127-L133"
     }
    ]
   },
   {
    "mode": "key_layer",
    "gesture": "press",
    "action": "Sets G as ROOT for every synth track; drum tracks are unchanged.",
    "short_label": "ROOT G",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "451-459",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L451-L459"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "press",
    "action": "Applies LOW to the whole mix while this key is held, replacing any other active punch effect; pressing its already latched effect again switches it off.",
    "short_label": "LOW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-806",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L806"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/punch.c",
      "lines": "13-18",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/punch.c#L13-L18"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "double_press",
    "action": "Two presses within 0.35 seconds latch LOW beyond key release and beyond leaving the FX layer; another effect replaces it.",
    "short_label": "FX LATCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "767-806",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L767-L806"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "release",
    "action": "Releases this key’s punch effect unless it is latched or another key has replaced it.",
    "short_label": "FX RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "850-854",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L850-L854"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press",
    "action": "Holds step 9 of the selected 16-step page; an empty step is filled at once with the last note, while an occupied step waits to clear on release unless edited.",
    "short_label": "STEP 9",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "215-234",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L215-L234"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "422-434",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L422-L434"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "release",
    "action": "Clears an occupied step and its locks, timing nudge and condition unless a step-editing control was used while held; it asks nothing, the layer undo snapshot can restore it, and autosave may keep the change later.",
    "short_label": "STEP RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "236-249",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L236-L249"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "252-258",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L252-L258"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "93-105",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L93-L105"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/project.c",
      "lines": "607-625",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L607-L625"
     }
    ]
   },
   {
    "mode": "engine_layer",
    "gesture": "press",
    "action": "Selects GRAIN on the selected synth track and loads that engine’s first preset; the drum track refuses this choice.",
    "short_label": "GRAIN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "438-449",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L438-L449"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/engines.c",
      "lines": "48-55",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/engines.c#L48-L55"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "381-398",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L381-L398"
     }
    ]
   },
   {
    "mode": "mix_layer",
    "gesture": "press",
    "action": "Activates fill conditions for as long as this key stays held.",
    "short_label": "FILL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "461-463",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L461-L463"
     }
    ]
   },
   {
    "mode": "mix_layer",
    "gesture": "release",
    "action": "Ends the held fill; a separately armed bar fill can still be active.",
    "short_label": "FILL OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "461-463",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L461-L463"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "press",
    "action": "Plays a scale chord on the selected synth track; transpose, octave, black-key modifiers, strum and voice leading affect the result.",
    "short_label": "CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "818-840",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L818-L840"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "97-140",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L97-L140"
     }
    ]
   }
  ],
  "key_gs4": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Outside layers and chord modifiers, plays the selected track’s note from G#4, subject to octave, transpose and scale settings; WHITE quantisation silences black keys.",
    "short_label": "NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "97-140",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L97-L140"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L846"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the note or chord on the track where this key began; arp HOLD or sustain can keep it sounding.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "847-878",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L847-L878"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "689-698",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L689-L698"
     }
    ]
   },
   {
    "mode": "drum_keys",
    "gesture": "press",
    "action": "Triggers the kit’s crash 1 sound at drum note 49, independent of octave and scale.",
    "short_label": "DRUM HIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "59-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L59-L94"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "With CHORD off, plays GM kit note 51 at the centre octave; octave shifts still apply and scale settings do not.",
    "short_label": "GM KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "82-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L82-L94"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "press",
    "action": "If this key maps to a note, sounds it and writes it into the cursor step; a non-POLY voice keeps the latest key, while POLY keeps up to four keys pressed together.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "426-450",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L426-L450"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "774-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L774-L846"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "release",
    "action": "When all note keys are released after entering notes, advances the cursor to the next step within the pattern.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "453-454",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L453-L454"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "127-133",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L127-L133"
     }
    ]
   },
   {
    "mode": "key_layer",
    "gesture": "press",
    "action": "Sets G# as ROOT for every synth track; drum tracks are unchanged.",
    "short_label": "ROOT G#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "451-459",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L451-L459"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "press",
    "action": "Temporarily adds the scale’s seventh when room and chord type allow; it can modify chords already held and combines with other black-key modifiers, while POWER responds only to inversion.",
    "short_label": "ADD SEVENTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "153-229",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L153-L229"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "818-822",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L818-L822"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "release",
    "action": "Removes this black-key modifier and retunes any chords still held to match the remaining modifiers.",
    "short_label": "MOD OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "859-862",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L859-L862"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "730-764",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L730-L764"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "press",
    "action": "Has no action in the PUNCH layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-810",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L810"
     }
    ]
   },
   {
    "mode": "mix_layer",
    "gesture": "press",
    "action": "Has no action in the MIX layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "465-466",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L465-L466"
     }
    ]
   },
   {
    "mode": "engine_layer",
    "gesture": "press",
    "action": "Has no action in the ENGINE layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "438-440",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L438-L440"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press",
    "action": "Halves the current pattern length, rounding down and keeping at least one step, without deleting the hidden steps; it asks nothing, the layer undo snapshot can restore it, and autosave may keep it later.",
    "short_label": "HALF LENGTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "133-198",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L133-L198"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/project.c",
      "lines": "607-625",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L607-L625"
     }
    ]
   }
  ],
  "key_a4": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Outside layers and chord modifiers, plays the selected track’s note from A4, subject to octave, transpose and scale settings; WHITE quantisation silences black keys.",
    "short_label": "NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "97-140",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L97-L140"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L846"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the note or chord on the track where this key began; arp HOLD or sustain can keep it sounding.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "847-878",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L847-L878"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "689-698",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L689-L698"
     }
    ]
   },
   {
    "mode": "drum_keys",
    "gesture": "press",
    "action": "Triggers the kit’s crash 2 sound at drum note 57, independent of octave and scale.",
    "short_label": "DRUM HIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "59-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L59-L94"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "With CHORD off, plays GM kit note 52 at the centre octave; octave shifts still apply and scale settings do not.",
    "short_label": "GM KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "82-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L82-L94"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "press",
    "action": "If this key maps to a note, sounds it and writes it into the cursor step; a non-POLY voice keeps the latest key, while POLY keeps up to four keys pressed together.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "426-450",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L426-L450"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "774-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L774-L846"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "release",
    "action": "When all note keys are released after entering notes, advances the cursor to the next step within the pattern.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "453-454",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L453-L454"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "127-133",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L127-L133"
     }
    ]
   },
   {
    "mode": "key_layer",
    "gesture": "press",
    "action": "Sets A as ROOT for every synth track; drum tracks are unchanged.",
    "short_label": "ROOT A",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "451-459",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L451-L459"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "press",
    "action": "Applies HIGH to the whole mix while this key is held, replacing any other active punch effect; pressing its already latched effect again switches it off.",
    "short_label": "HIGH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-806",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L806"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/punch.c",
      "lines": "13-18",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/punch.c#L13-L18"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "double_press",
    "action": "Two presses within 0.35 seconds latch HIGH beyond key release and beyond leaving the FX layer; another effect replaces it.",
    "short_label": "FX LATCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "767-806",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L767-L806"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "release",
    "action": "Releases this key’s punch effect unless it is latched or another key has replaced it.",
    "short_label": "FX RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "850-854",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L850-L854"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press",
    "action": "Holds step 10 of the selected 16-step page; an empty step is filled at once with the last note, while an occupied step waits to clear on release unless edited.",
    "short_label": "STEP 10",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "215-234",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L215-L234"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "422-434",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L422-L434"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "release",
    "action": "Clears an occupied step and its locks, timing nudge and condition unless a step-editing control was used while held; it asks nothing, the layer undo snapshot can restore it, and autosave may keep the change later.",
    "short_label": "STEP RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "236-249",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L236-L249"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "252-258",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L252-L258"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "93-105",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L93-L105"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/project.c",
      "lines": "607-625",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L607-L625"
     }
    ]
   },
   {
    "mode": "engine_layer",
    "gesture": "press",
    "action": "Selects FM6 on the selected synth track and loads that engine’s first preset; the drum track refuses this choice.",
    "short_label": "FM6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "438-449",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L438-L449"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/engines.c",
      "lines": "48-55",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/engines.c#L48-L55"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "381-398",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L381-L398"
     }
    ]
   },
   {
    "mode": "mix_layer",
    "gesture": "press",
    "action": "While playing, arms a fill for the next bar or cancels that pending fill; while stopped it asks for playback first.",
    "short_label": "NEXT FILL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "467-471",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L467-L471"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "press",
    "action": "Plays a scale chord on the selected synth track; transpose, octave, black-key modifiers, strum and voice leading affect the result.",
    "short_label": "CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "818-840",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L818-L840"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "97-140",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L97-L140"
     }
    ]
   }
  ],
  "key_as4": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Outside layers and chord modifiers, plays the selected track’s note from A#4, subject to octave, transpose and scale settings; WHITE quantisation silences black keys.",
    "short_label": "NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "97-140",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L97-L140"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L846"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the note or chord on the track where this key began; arp HOLD or sustain can keep it sounding.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "847-878",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L847-L878"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "689-698",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L689-L698"
     }
    ]
   },
   {
    "mode": "drum_keys",
    "gesture": "press",
    "action": "Triggers the kit’s ride 1 sound at drum note 51, independent of octave and scale.",
    "short_label": "DRUM HIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "59-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L59-L94"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "With CHORD off, plays GM kit note 53 at the centre octave; octave shifts still apply and scale settings do not.",
    "short_label": "GM KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "82-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L82-L94"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "press",
    "action": "If this key maps to a note, sounds it and writes it into the cursor step; a non-POLY voice keeps the latest key, while POLY keeps up to four keys pressed together.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "426-450",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L426-L450"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "774-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L774-L846"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "release",
    "action": "When all note keys are released after entering notes, advances the cursor to the next step within the pattern.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "453-454",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L453-L454"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "127-133",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L127-L133"
     }
    ]
   },
   {
    "mode": "key_layer",
    "gesture": "press",
    "action": "Sets A# as ROOT for every synth track; drum tracks are unchanged.",
    "short_label": "ROOT A#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "451-459",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L451-L459"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "press",
    "action": "Temporarily replaces the chord’s third with the scale’s fourth; it can modify chords already held and combines with other black-key modifiers, while POWER responds only to inversion.",
    "short_label": "SUS4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "153-229",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L153-L229"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "818-822",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L818-L822"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "release",
    "action": "Removes this black-key modifier and retunes any chords still held to match the remaining modifiers.",
    "short_label": "MOD OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "859-862",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L859-L862"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "730-764",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L730-L764"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "press",
    "action": "Has no action in the PUNCH layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-810",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L810"
     }
    ]
   },
   {
    "mode": "mix_layer",
    "gesture": "press",
    "action": "Has no action in the MIX layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "465-466",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L465-L466"
     }
    ]
   },
   {
    "mode": "engine_layer",
    "gesture": "press",
    "action": "Has no action in the ENGINE layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "438-440",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L438-L440"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press",
    "action": "Copies the pattern after itself and doubles its length when at most 32 steps long, copying locks only while free lock slots remain; it asks nothing, the layer undo snapshot can restore it, and autosave may keep it later.",
    "short_label": "DOUBLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "133-198",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L133-L198"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/project.c",
      "lines": "607-625",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L607-L625"
     }
    ]
   }
  ],
  "key_b4": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Outside layers and chord modifiers, plays the selected track’s note from B4, subject to octave, transpose and scale settings; WHITE quantisation silences black keys.",
    "short_label": "NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "97-140",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L97-L140"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L846"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the note or chord on the track where this key began; arp HOLD or sustain can keep it sounding.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "847-878",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L847-L878"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "689-698",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L689-L698"
     }
    ]
   },
   {
    "mode": "drum_keys",
    "gesture": "press",
    "action": "Triggers the kit’s ride bell sound at drum note 53, independent of octave and scale.",
    "short_label": "DRUM HIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "59-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L59-L94"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "With CHORD off, plays GM kit note 54 at the centre octave; octave shifts still apply and scale settings do not.",
    "short_label": "GM KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "82-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L82-L94"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "press",
    "action": "If this key maps to a note, sounds it and writes it into the cursor step; a non-POLY voice keeps the latest key, while POLY keeps up to four keys pressed together.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "426-450",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L426-L450"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "774-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L774-L846"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "release",
    "action": "When all note keys are released after entering notes, advances the cursor to the next step within the pattern.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "453-454",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L453-L454"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "127-133",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L127-L133"
     }
    ]
   },
   {
    "mode": "key_layer",
    "gesture": "press",
    "action": "Sets B as ROOT for every synth track; drum tracks are unchanged.",
    "short_label": "ROOT B",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "451-459",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L451-L459"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "press",
    "action": "Applies PHONE to the whole mix while this key is held, replacing any other active punch effect; pressing its already latched effect again switches it off.",
    "short_label": "PHONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-806",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L806"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/punch.c",
      "lines": "13-18",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/punch.c#L13-L18"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "double_press",
    "action": "Two presses within 0.35 seconds latch PHONE beyond key release and beyond leaving the FX layer; another effect replaces it.",
    "short_label": "FX LATCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "767-806",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L767-L806"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "release",
    "action": "Releases this key’s punch effect unless it is latched or another key has replaced it.",
    "short_label": "FX RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "850-854",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L850-L854"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press",
    "action": "Holds step 11 of the selected 16-step page; an empty step is filled at once with the last note, while an occupied step waits to clear on release unless edited.",
    "short_label": "STEP 11",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "215-234",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L215-L234"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "422-434",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L422-L434"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "release",
    "action": "Clears an occupied step and its locks, timing nudge and condition unless a step-editing control was used while held; it asks nothing, the layer undo snapshot can restore it, and autosave may keep the change later.",
    "short_label": "STEP RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "236-249",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L236-L249"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "252-258",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L252-L258"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "93-105",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L93-L105"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/project.c",
      "lines": "607-625",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L607-L625"
     }
    ]
   },
   {
    "mode": "engine_layer",
    "gesture": "press",
    "action": "Selects NOISE on the selected synth track and loads that engine’s first preset; the drum track refuses this choice.",
    "short_label": "NOISE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "438-449",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L438-L449"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/engines.c",
      "lines": "48-55",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/engines.c#L48-L55"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "381-398",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L381-L398"
     }
    ]
   },
   {
    "mode": "mix_layer",
    "gesture": "press",
    "action": "Has no action in the MIX layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "465-481",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L465-L481"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "press",
    "action": "Plays a scale chord on the selected synth track; transpose, octave, black-key modifiers, strum and voice leading affect the result.",
    "short_label": "CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "818-840",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L818-L840"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "97-140",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L97-L140"
     }
    ]
   }
  ],
  "key_c5": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Outside layers and chord modifiers, plays the selected track’s note from C5, subject to octave, transpose and scale settings; WHITE quantisation silences black keys.",
    "short_label": "NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "97-140",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L97-L140"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L846"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the note or chord on the track where this key began; arp HOLD or sustain can keep it sounding.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "847-878",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L847-L878"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "689-698",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L689-L698"
     }
    ]
   },
   {
    "mode": "drum_keys",
    "gesture": "press",
    "action": "Triggers the kit’s tambourine sound at drum note 54, independent of octave and scale.",
    "short_label": "DRUM HIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "59-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L59-L94"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "With CHORD off, plays GM kit note 55 at the centre octave; octave shifts still apply and scale settings do not.",
    "short_label": "GM KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "82-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L82-L94"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "press",
    "action": "If this key maps to a note, sounds it and writes it into the cursor step; a non-POLY voice keeps the latest key, while POLY keeps up to four keys pressed together.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "426-450",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L426-L450"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "774-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L774-L846"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "release",
    "action": "When all note keys are released after entering notes, advances the cursor to the next step within the pattern.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "453-454",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L453-L454"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "127-133",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L127-L133"
     }
    ]
   },
   {
    "mode": "key_layer",
    "gesture": "press",
    "action": "Sets C as ROOT for every synth track; drum tracks are unchanged.",
    "short_label": "ROOT C",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "451-459",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L451-L459"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "press",
    "action": "Applies CRUSH to the whole mix while this key is held, replacing any other active punch effect; pressing its already latched effect again switches it off.",
    "short_label": "CRUSH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-806",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L806"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/punch.c",
      "lines": "13-18",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/punch.c#L13-L18"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "double_press",
    "action": "Two presses within 0.35 seconds latch CRUSH beyond key release and beyond leaving the FX layer; another effect replaces it.",
    "short_label": "FX LATCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "767-806",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L767-L806"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "release",
    "action": "Releases this key’s punch effect unless it is latched or another key has replaced it.",
    "short_label": "FX RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "850-854",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L850-L854"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press",
    "action": "Holds step 12 of the selected 16-step page; an empty step is filled at once with the last note, while an occupied step waits to clear on release unless edited.",
    "short_label": "STEP 12",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "215-234",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L215-L234"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "422-434",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L422-L434"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "release",
    "action": "Clears an occupied step and its locks, timing nudge and condition unless a step-editing control was used while held; it asks nothing, the layer undo snapshot can restore it, and autosave may keep the change later.",
    "short_label": "STEP RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "236-249",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L236-L249"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "252-258",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L252-L258"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "93-105",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L93-L105"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/project.c",
      "lines": "607-625",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L607-L625"
     }
    ]
   },
   {
    "mode": "engine_layer",
    "gesture": "press",
    "action": "Selects PHYS on the selected synth track and loads that engine’s first preset; the drum track refuses this choice.",
    "short_label": "PHYS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "438-449",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L438-L449"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/engines.c",
      "lines": "48-55",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/engines.c#L48-L55"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "381-398",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L381-L398"
     }
    ]
   },
   {
    "mode": "mix_layer",
    "gesture": "press",
    "action": "Has no action in the MIX layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "465-481",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L465-L481"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "press",
    "action": "Plays a scale chord on the selected synth track; transpose, octave, black-key modifiers, strum and voice leading affect the result.",
    "short_label": "CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "818-840",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L818-L840"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "97-140",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L97-L140"
     }
    ]
   }
  ],
  "key_cs5": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Outside layers and chord modifiers, plays the selected track’s note from C#5, subject to octave, transpose and scale settings; WHITE quantisation silences black keys.",
    "short_label": "NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "97-140",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L97-L140"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L846"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the note or chord on the track where this key began; arp HOLD or sustain can keep it sounding.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "847-878",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L847-L878"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "689-698",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L689-L698"
     }
    ]
   },
   {
    "mode": "drum_keys",
    "gesture": "press",
    "action": "Triggers the kit’s cowbell sound at drum note 56, independent of octave and scale.",
    "short_label": "DRUM HIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "59-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L59-L94"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "With CHORD off, plays GM kit note 56 at the centre octave; octave shifts still apply and scale settings do not.",
    "short_label": "GM KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "82-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L82-L94"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "press",
    "action": "If this key maps to a note, sounds it and writes it into the cursor step; a non-POLY voice keeps the latest key, while POLY keeps up to four keys pressed together.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "426-450",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L426-L450"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "774-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L774-L846"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "release",
    "action": "When all note keys are released after entering notes, advances the cursor to the next step within the pattern.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "453-454",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L453-L454"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "127-133",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L127-L133"
     }
    ]
   },
   {
    "mode": "key_layer",
    "gesture": "press",
    "action": "Sets C# as ROOT for every synth track; drum tracks are unchanged.",
    "short_label": "ROOT C#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "451-459",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L451-L459"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "press",
    "action": "Temporarily adds the scale’s ninth when room and chord type allow; it can modify chords already held and combines with other black-key modifiers, while POWER responds only to inversion.",
    "short_label": "ADD NINTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "153-229",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L153-L229"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "818-822",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L818-L822"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "release",
    "action": "Removes this black-key modifier and retunes any chords still held to match the remaining modifiers.",
    "short_label": "MOD OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "859-862",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L859-L862"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "730-764",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L730-L764"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "press",
    "action": "Has no action in the PUNCH layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-810",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L810"
     }
    ]
   },
   {
    "mode": "mix_layer",
    "gesture": "press",
    "action": "Has no action in the MIX layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "465-466",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L465-L466"
     }
    ]
   },
   {
    "mode": "engine_layer",
    "gesture": "press",
    "action": "Has no action in the ENGINE layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "438-440",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L438-L440"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press",
    "action": "Lowers every stored pattern note by one semitone on a synth track, clamped to note 1; it asks nothing, the layer undo snapshot can restore it, and autosave may keep it later.",
    "short_label": "TRANSPOSE −",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "133-198",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L133-L198"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/project.c",
      "lines": "607-625",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L607-L625"
     }
    ]
   }
  ],
  "key_d5": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Outside layers and chord modifiers, plays the selected track’s note from D5, subject to octave, transpose and scale settings; WHITE quantisation silences black keys.",
    "short_label": "NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "97-140",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L97-L140"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L846"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the note or chord on the track where this key began; arp HOLD or sustain can keep it sounding.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "847-878",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L847-L878"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "689-698",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L689-L698"
     }
    ]
   },
   {
    "mode": "drum_keys",
    "gesture": "press",
    "action": "Triggers the kit’s muted conga sound at drum note 62, independent of octave and scale.",
    "short_label": "DRUM HIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "59-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L59-L94"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "With CHORD off, plays GM kit note 57 at the centre octave; octave shifts still apply and scale settings do not.",
    "short_label": "GM KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "82-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L82-L94"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "press",
    "action": "If this key maps to a note, sounds it and writes it into the cursor step; a non-POLY voice keeps the latest key, while POLY keeps up to four keys pressed together.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "426-450",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L426-L450"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "774-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L774-L846"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "release",
    "action": "When all note keys are released after entering notes, advances the cursor to the next step within the pattern.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "453-454",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L453-L454"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "127-133",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L127-L133"
     }
    ]
   },
   {
    "mode": "key_layer",
    "gesture": "press",
    "action": "Sets D as ROOT for every synth track; drum tracks are unchanged.",
    "short_label": "ROOT D",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "451-459",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L451-L459"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "press",
    "action": "Applies ALIAS to the whole mix while this key is held, replacing any other active punch effect; pressing its already latched effect again switches it off.",
    "short_label": "ALIAS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-806",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L806"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/punch.c",
      "lines": "13-18",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/punch.c#L13-L18"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "double_press",
    "action": "Two presses within 0.35 seconds latch ALIAS beyond key release and beyond leaving the FX layer; another effect replaces it.",
    "short_label": "FX LATCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "767-806",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L767-L806"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "release",
    "action": "Releases this key’s punch effect unless it is latched or another key has replaced it.",
    "short_label": "FX RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "850-854",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L850-L854"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press",
    "action": "Holds step 13 of the selected 16-step page; an empty step is filled at once with the last note, while an occupied step waits to clear on release unless edited.",
    "short_label": "STEP 13",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "215-234",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L215-L234"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "422-434",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L422-L434"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "release",
    "action": "Clears an occupied step and its locks, timing nudge and condition unless a step-editing control was used while held; it asks nothing, the layer undo snapshot can restore it, and autosave may keep the change later.",
    "short_label": "STEP RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "236-249",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L236-L249"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "252-258",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L252-L258"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "93-105",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L93-L105"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/project.c",
      "lines": "607-625",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L607-L625"
     }
    ]
   },
   {
    "mode": "engine_layer",
    "gesture": "press",
    "action": "Selects ROBO on the selected synth track and loads that engine’s first preset; the drum track refuses this choice.",
    "short_label": "ROBO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "438-449",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L438-L449"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/engines.c",
      "lines": "48-55",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/engines.c#L48-L55"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "381-398",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L381-L398"
     }
    ]
   },
   {
    "mode": "mix_layer",
    "gesture": "press",
    "action": "Has no action in the MIX layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "465-481",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L465-L481"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "press",
    "action": "Plays a scale chord on the selected synth track; transpose, octave, black-key modifiers, strum and voice leading affect the result.",
    "short_label": "CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "818-840",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L818-L840"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "97-140",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L97-L140"
     }
    ]
   }
  ],
  "key_ds5": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Outside layers and chord modifiers, plays the selected track’s note from D#5, subject to octave, transpose and scale settings; WHITE quantisation silences black keys.",
    "short_label": "NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "97-140",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L97-L140"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L846"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the note or chord on the track where this key began; arp HOLD or sustain can keep it sounding.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "847-878",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L847-L878"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "689-698",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L689-L698"
     }
    ]
   },
   {
    "mode": "drum_keys",
    "gesture": "press",
    "action": "Triggers the kit’s open conga sound at drum note 63, independent of octave and scale.",
    "short_label": "DRUM HIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "59-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L59-L94"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "With CHORD off, plays GM kit note 58 at the centre octave; octave shifts still apply and scale settings do not.",
    "short_label": "GM KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "82-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L82-L94"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "press",
    "action": "If this key maps to a note, sounds it and writes it into the cursor step; a non-POLY voice keeps the latest key, while POLY keeps up to four keys pressed together.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "426-450",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L426-L450"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "774-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L774-L846"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "release",
    "action": "When all note keys are released after entering notes, advances the cursor to the next step within the pattern.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "453-454",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L453-L454"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "127-133",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L127-L133"
     }
    ]
   },
   {
    "mode": "key_layer",
    "gesture": "press",
    "action": "Sets D# as ROOT for every synth track; drum tracks are unchanged.",
    "short_label": "ROOT D#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "451-459",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L451-L459"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "press",
    "action": "Temporarily raises the chord’s root by an octave when possible; it can modify chords already held and combines with other black-key modifiers, while POWER responds only to inversion.",
    "short_label": "INVERSION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "153-229",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L153-L229"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "818-822",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L818-L822"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "release",
    "action": "Removes this black-key modifier and retunes any chords still held to match the remaining modifiers.",
    "short_label": "MOD OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "859-862",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L859-L862"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "730-764",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L730-L764"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "press",
    "action": "Has no action in the PUNCH layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-810",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L810"
     }
    ]
   },
   {
    "mode": "mix_layer",
    "gesture": "press",
    "action": "Has no action in the MIX layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "465-466",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L465-L466"
     }
    ]
   },
   {
    "mode": "engine_layer",
    "gesture": "press",
    "action": "Has no action in the ENGINE layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "438-440",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L438-L440"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press",
    "action": "Raises every stored pattern note by one semitone on a synth track, clamped to note 127; it asks nothing, the layer undo snapshot can restore it, and autosave may keep it later.",
    "short_label": "TRANSPOSE +",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "133-198",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L133-L198"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/project.c",
      "lines": "607-625",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L607-L625"
     }
    ]
   }
  ],
  "key_e5": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Outside layers and chord modifiers, plays the selected track’s note from E5, subject to octave, transpose and scale settings; WHITE quantisation silences black keys.",
    "short_label": "NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "97-140",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L97-L140"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L846"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the note or chord on the track where this key began; arp HOLD or sustain can keep it sounding.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "847-878",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L847-L878"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "689-698",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L689-L698"
     }
    ]
   },
   {
    "mode": "drum_keys",
    "gesture": "press",
    "action": "Triggers the kit’s low conga sound at drum note 64, independent of octave and scale.",
    "short_label": "DRUM HIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "59-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L59-L94"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "With CHORD off, plays GM kit note 59 at the centre octave; octave shifts still apply and scale settings do not.",
    "short_label": "GM KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "82-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L82-L94"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "press",
    "action": "If this key maps to a note, sounds it and writes it into the cursor step; a non-POLY voice keeps the latest key, while POLY keeps up to four keys pressed together.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "426-450",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L426-L450"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "774-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L774-L846"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "release",
    "action": "When all note keys are released after entering notes, advances the cursor to the next step within the pattern.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "453-454",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L453-L454"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "127-133",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L127-L133"
     }
    ]
   },
   {
    "mode": "key_layer",
    "gesture": "press",
    "action": "Sets E as ROOT for every synth track; drum tracks are unchanged.",
    "short_label": "ROOT E",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "451-459",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L451-L459"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "press",
    "action": "Applies GATE to the whole mix while this key is held, replacing any other active punch effect; pressing its already latched effect again switches it off.",
    "short_label": "GATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-806",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L806"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/punch.c",
      "lines": "13-18",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/punch.c#L13-L18"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "double_press",
    "action": "Two presses within 0.35 seconds latch GATE beyond key release and beyond leaving the FX layer; another effect replaces it.",
    "short_label": "FX LATCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "767-806",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L767-L806"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "release",
    "action": "Releases this key’s punch effect unless it is latched or another key has replaced it.",
    "short_label": "FX RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "850-854",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L850-L854"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press",
    "action": "Holds step 14 of the selected 16-step page; an empty step is filled at once with the last note, while an occupied step waits to clear on release unless edited.",
    "short_label": "STEP 14",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "215-234",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L215-L234"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "422-434",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L422-L434"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "release",
    "action": "Clears an occupied step and its locks, timing nudge and condition unless a step-editing control was used while held; it asks nothing, the layer undo snapshot can restore it, and autosave may keep the change later.",
    "short_label": "STEP RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "236-249",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L236-L249"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "252-258",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L252-L258"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "93-105",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L93-L105"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/project.c",
      "lines": "607-625",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L607-L625"
     }
    ]
   },
   {
    "mode": "engine_layer",
    "gesture": "press",
    "action": "Has no action in the ENGINE layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "438-449",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L438-L449"
     }
    ]
   },
   {
    "mode": "mix_layer",
    "gesture": "press",
    "action": "Enters or leaves MIDI Learn so a turned track parameter can be assigned to an incoming CC.",
    "short_label": "MIDI LEARN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "477-478",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L477-L478"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "press",
    "action": "Plays a scale chord on the selected synth track; transpose, octave, black-key modifiers, strum and voice leading affect the result.",
    "short_label": "CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "818-840",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L818-L840"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "97-140",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L97-L140"
     }
    ]
   }
  ],
  "key_f5": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Outside layers and chord modifiers, plays the selected track’s note from F5, subject to octave, transpose and scale settings; WHITE quantisation silences black keys.",
    "short_label": "NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "97-140",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L97-L140"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L846"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the note or chord on the track where this key began; arp HOLD or sustain can keep it sounding.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "847-878",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L847-L878"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "689-698",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L689-L698"
     }
    ]
   },
   {
    "mode": "drum_keys",
    "gesture": "press",
    "action": "Triggers the kit’s maracas sound at drum note 70, independent of octave and scale.",
    "short_label": "DRUM HIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "59-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L59-L94"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "With CHORD off, plays GM kit note 60 at the centre octave; octave shifts still apply and scale settings do not.",
    "short_label": "GM KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "82-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L82-L94"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "press",
    "action": "If this key maps to a note, sounds it and writes it into the cursor step; a non-POLY voice keeps the latest key, while POLY keeps up to four keys pressed together.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "426-450",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L426-L450"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "774-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L774-L846"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "release",
    "action": "When all note keys are released after entering notes, advances the cursor to the next step within the pattern.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "453-454",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L453-L454"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "127-133",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L127-L133"
     }
    ]
   },
   {
    "mode": "key_layer",
    "gesture": "press",
    "action": "Sets F as ROOT for every synth track; drum tracks are unchanged.",
    "short_label": "ROOT F",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "451-459",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L451-L459"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "press",
    "action": "Applies ECHO to the whole mix while this key is held, replacing any other active punch effect; pressing its already latched effect again switches it off.",
    "short_label": "ECHO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-806",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L806"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/punch.c",
      "lines": "13-18",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/punch.c#L13-L18"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "double_press",
    "action": "Two presses within 0.35 seconds latch ECHO beyond key release and beyond leaving the FX layer; another effect replaces it.",
    "short_label": "FX LATCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "767-806",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L767-L806"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "release",
    "action": "Releases this key’s punch effect unless it is latched or another key has replaced it.",
    "short_label": "FX RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "850-854",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L850-L854"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press",
    "action": "Holds step 15 of the selected 16-step page; an empty step is filled at once with the last note, while an occupied step waits to clear on release unless edited.",
    "short_label": "STEP 15",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "215-234",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L215-L234"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "422-434",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L422-L434"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "release",
    "action": "Clears an occupied step and its locks, timing nudge and condition unless a step-editing control was used while held; it asks nothing, the layer undo snapshot can restore it, and autosave may keep the change later.",
    "short_label": "STEP RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "236-249",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L236-L249"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "252-258",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L252-L258"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "93-105",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L93-L105"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/project.c",
      "lines": "607-625",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L607-L625"
     }
    ]
   },
   {
    "mode": "engine_layer",
    "gesture": "press",
    "action": "Has no action in the ENGINE layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "438-449",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L438-L449"
     }
    ]
   },
   {
    "mode": "mix_layer",
    "gesture": "press",
    "action": "Has no action in the MIX layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "465-481",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L465-L481"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "press",
    "action": "Plays a scale chord on the selected synth track; transpose, octave, black-key modifiers, strum and voice leading affect the result.",
    "short_label": "CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "818-840",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L818-L840"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "97-140",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L97-L140"
     }
    ]
   }
  ],
  "key_fs5": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Outside layers and chord modifiers, plays the selected track’s note from F#5, subject to octave, transpose and scale settings; WHITE quantisation silences black keys.",
    "short_label": "NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "97-140",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L97-L140"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L846"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the note or chord on the track where this key began; arp HOLD or sustain can keep it sounding.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "847-878",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L847-L878"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "689-698",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L689-L698"
     }
    ]
   },
   {
    "mode": "drum_keys",
    "gesture": "press",
    "action": "Triggers the kit’s claves sound at drum note 75, independent of octave and scale.",
    "short_label": "DRUM HIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "59-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L59-L94"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "With CHORD off, plays GM kit note 61 at the centre octave; octave shifts still apply and scale settings do not.",
    "short_label": "GM KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "82-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L82-L94"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "press",
    "action": "If this key maps to a note, sounds it and writes it into the cursor step; a non-POLY voice keeps the latest key, while POLY keeps up to four keys pressed together.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "426-450",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L426-L450"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "774-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L774-L846"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "release",
    "action": "When all note keys are released after entering notes, advances the cursor to the next step within the pattern.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "453-454",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L453-L454"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "127-133",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L127-L133"
     }
    ]
   },
   {
    "mode": "key_layer",
    "gesture": "press",
    "action": "Sets F# as ROOT for every synth track; drum tracks are unchanged.",
    "short_label": "ROOT F#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "451-459",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L451-L459"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "press",
    "action": "Temporarily swaps a major third and minor third when that chord contains one; it can modify chords already held and combines with other black-key modifiers, while POWER responds only to inversion.",
    "short_label": "MINOR SWAP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "153-229",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L153-L229"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "818-822",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L818-L822"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "release",
    "action": "Removes this black-key modifier and retunes any chords still held to match the remaining modifiers.",
    "short_label": "MOD OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "859-862",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L859-L862"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "730-764",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L730-L764"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "press",
    "action": "Has no action in the PUNCH layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-810",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L810"
     }
    ]
   },
   {
    "mode": "mix_layer",
    "gesture": "press",
    "action": "Has no action in the MIX layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "465-466",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L465-L466"
     }
    ]
   },
   {
    "mode": "engine_layer",
    "gesture": "press",
    "action": "Has no action in the ENGINE layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "438-440",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L438-L440"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press",
    "action": "While stopped, immediately erases all 64 stored steps and their locks, nudges and conditions without a question; while playing, starts erasing each occupied step the playhead reaches, with layer undo available and later autosave possible.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "394-406",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L394-L406"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "200-212",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L200-L212"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/project.c",
      "lines": "607-625",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L607-L625"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "release",
    "action": "Stops the held playhead eraser.",
    "short_label": "ERASE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "394-406",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L394-L406"
     }
    ]
   }
  ],
  "key_g5": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Outside layers and chord modifiers, plays the selected track’s note from G5, subject to octave, transpose and scale settings; WHITE quantisation silences black keys.",
    "short_label": "NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "97-140",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L97-L140"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L846"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Releases the note or chord on the track where this key began; arp HOLD or sustain can keep it sounding.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "847-878",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L847-L878"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "689-698",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L689-L698"
     }
    ]
   },
   {
    "mode": "drum_keys",
    "gesture": "press",
    "action": "Triggers the kit’s wood block sound at drum note 76, independent of octave and scale.",
    "short_label": "DRUM HIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "59-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L59-L94"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "With CHORD off, plays GM kit note 62 at the centre octave; octave shifts still apply and scale settings do not.",
    "short_label": "GM KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "82-94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L82-L94"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "press",
    "action": "If this key maps to a note, sounds it and writes it into the cursor step; a non-POLY voice keeps the latest key, while POLY keeps up to four keys pressed together.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "426-450",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L426-L450"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "774-846",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L774-L846"
     }
    ]
   },
   {
    "mode": "step_entry",
    "gesture": "release",
    "action": "When all note keys are released after entering notes, advances the cursor to the next step within the pattern.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "453-454",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L453-L454"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "127-133",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L127-L133"
     }
    ]
   },
   {
    "mode": "key_layer",
    "gesture": "press",
    "action": "Sets G as ROOT for every synth track; drum tracks are unchanged.",
    "short_label": "ROOT G",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "451-459",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L451-L459"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "press",
    "action": "Applies WOBBLE to the whole mix while this key is held, replacing any other active punch effect; pressing its already latched effect again switches it off.",
    "short_label": "WOBBLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "791-806",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L791-L806"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/punch.c",
      "lines": "13-18",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/punch.c#L13-L18"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "double_press",
    "action": "Two presses within 0.35 seconds latch WOBBLE beyond key release and beyond leaving the FX layer; another effect replaces it.",
    "short_label": "FX LATCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "767-806",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L767-L806"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "release",
    "action": "Releases this key’s punch effect unless it is latched or another key has replaced it.",
    "short_label": "FX RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "850-854",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L850-L854"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "press",
    "action": "Holds step 16 of the selected 16-step page; an empty step is filled at once with the last note, while an occupied step waits to clear on release unless edited.",
    "short_label": "STEP 16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "215-234",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L215-L234"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "422-434",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L422-L434"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "release",
    "action": "Clears an occupied step and its locks, timing nudge and condition unless a step-editing control was used while held; it asks nothing, the layer undo snapshot can restore it, and autosave may keep the change later.",
    "short_label": "STEP RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "236-249",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L236-L249"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "252-258",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L252-L258"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "93-105",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L93-L105"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/project.c",
      "lines": "607-625",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L607-L625"
     }
    ]
   },
   {
    "mode": "engine_layer",
    "gesture": "press",
    "action": "Switches track 4 between DRUM and SYNTH, stopping its held notes and voices at once; entering SYNTH loads TRIO’s first preset.",
    "short_label": "T4 TYPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "438-449",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L438-L449"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "403-438",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L403-L438"
     }
    ]
   },
   {
    "mode": "mix_layer",
    "gesture": "press",
    "action": "Sets tempo from repeated taps, averaging up to three recent intervals; a pause over two seconds starts a new tap count.",
    "short_label": "TAP TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "72-87",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L72-L87"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "479-480",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L479-L480"
     }
    ]
   },
   {
    "mode": "chord_play",
    "gesture": "press",
    "action": "Plays a scale chord on the selected synth track; transpose, octave, black-key modifiers, strum and voice leading affect the result.",
    "short_label": "CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "818-840",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L818-L840"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/seq.c",
      "lines": "97-140",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/seq.c#L97-L140"
     }
    ]
   }
  ],
  "encoder_knob1": [
   {
    "mode": "env",
    "gesture": "turn",
    "short_label": "ATTACK",
    "action": "Adjusts the selected synth track’s attack time, using note lengths when ESYNC is on.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "394",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L394"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "77",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L77"
     }
    ],
    "when": "Selected synth is not FM6"
   },
   {
    "mode": "env_dest",
    "gesture": "turn",
    "short_label": "ENV FILTER",
    "action": "Adjusts the envelope’s filter amount.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "395",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L395"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "81",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L81"
     }
    ],
    "when": "Selected synth is not FM6"
   },
   {
    "mode": "lfo",
    "gesture": "turn",
    "short_label": "LFO RATE",
    "action": "Adjusts the LFO speed when LFO sync is off.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "397",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L397"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "85",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L85"
     }
    ]
   },
   {
    "mode": "lfo_2",
    "gesture": "turn",
    "short_label": "LFO SYNC",
    "action": "Adjusts the LFO’s tempo division, or OFF for its free speed.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "398",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L398"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "160",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L160"
     }
    ]
   },
   {
    "mode": "lfo_dest",
    "gesture": "turn",
    "short_label": "LFO PITCH",
    "action": "Adjusts the LFO’s pitch amount.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "399",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L399"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "89",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L89"
     }
    ]
   },
   {
    "mode": "mod_1",
    "gesture": "turn",
    "short_label": "MOD 1 SOURCE",
    "action": "Adjusts modulation slot 1’s source, including DRIFT and MAC1–4.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "400",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L400"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "126",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L126"
     }
    ]
   },
   {
    "mode": "mod_2",
    "gesture": "turn",
    "short_label": "MOD 2 SOURCE",
    "action": "Adjusts modulation slot 2’s source, including DRIFT and MAC1–4.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "401",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L401"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "127",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L127"
     }
    ]
   },
   {
    "mode": "mod_3",
    "gesture": "turn",
    "short_label": "MOD 3 SOURCE",
    "action": "Adjusts modulation slot 3’s source, including DRIFT and MAC1–4.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "402",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L402"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "128",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L128"
     }
    ]
   },
   {
    "mode": "mod_4",
    "gesture": "turn",
    "short_label": "MOD 4 SOURCE",
    "action": "Adjusts modulation slot 4’s source, including DRIFT and MAC1–4.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "403",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L403"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "129",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L129"
     }
    ]
   },
   {
    "mode": "macro",
    "gesture": "turn",
    "short_label": "MAC1",
    "action": "Adjusts macro 1, shared across the tracks’ modulation matrices.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "404",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L404"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "201",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L201"
     }
    ]
   },
   {
    "mode": "fx",
    "gesture": "turn",
    "short_label": "DISTORTION",
    "action": "Adjusts the selected synth track’s distortion amount for its chosen distortion type.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "405",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L405"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "109",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L109"
     }
    ]
   },
   {
    "mode": "dist",
    "gesture": "turn",
    "short_label": "DIST TYPE",
    "action": "Adjusts the track distortion type: SOFT, FUZZ, FOLD, CRUSH or RING.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "406",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L406"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "132",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L132"
     }
    ]
   },
   {
    "mode": "slicer",
    "gesture": "turn",
    "short_label": "SLICER",
    "action": "Adjusts the selected track’s slicer mode: OFF, GATE or STUT.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "408",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L408"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "121",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L121"
     }
    ]
   },
   {
    "mode": "insert",
    "gesture": "turn",
    "short_label": "INSERT TYPE",
    "action": "Adjusts the insert type: OFF, SOFT, HARD, FOLD, FUZZ, CRUSH, PHASR, FLANG, CHOR or DISP.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "409",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L409"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "143",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L143"
     }
    ]
   },
   {
    "mode": "insert_2",
    "gesture": "turn",
    "short_label": "INSERT MIX",
    "action": "Adjusts the insert wet/dry mix.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "410",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L410"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "147",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L147"
     }
    ]
   },
   {
    "mode": "dly",
    "gesture": "turn",
    "short_label": "DELAY TIME",
    "action": "Adjusts the shared delay’s tempo division.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "411",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L411"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "168",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L168"
     }
    ]
   },
   {
    "mode": "rev_cho",
    "gesture": "turn",
    "short_label": "REVERB SIZE",
    "action": "Adjusts the shared reverb size.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "412",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L412"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "172",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L172"
     }
    ]
   },
   {
    "mode": "reverb",
    "gesture": "turn",
    "short_label": "REVERB TYPE",
    "action": "Adjusts ROOM, SPRING or PLATE reverb.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "413",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L413"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "196",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L196"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "turn",
    "short_label": "ROOT",
    "action": "Adjusts the selected synth track’s root pitch class.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "414",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L414"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "101",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L101"
     }
    ]
   },
   {
    "mode": "chord",
    "gesture": "turn",
    "short_label": "CHRD",
    "action": "Adjusts one-key chord mode: OFF, TRIAD, 7TH, 9TH, SUS4 or POWER.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "415",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L415"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "130",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L130"
     }
    ]
   },
   {
    "mode": "voice",
    "gesture": "turn",
    "short_label": "VOICE MODE",
    "action": "Adjusts POLY, MONO, LEG or UNI voice mode.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "421",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L421"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "113",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L113"
     }
    ]
   },
   {
    "mode": "voice_2",
    "gesture": "turn",
    "short_label": "VOICE REUSE",
    "action": "Adjusts ROT or REUSE voice allocation.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "422",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L422"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "117",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L117"
     }
    ]
   },
   {
    "mode": "global",
    "gesture": "turn",
    "short_label": "TEMPO",
    "action": "Adjusts the project tempo from 40 to 240 BPM.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "423",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L423"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "164",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L164"
     }
    ]
   },
   {
    "mode": "click",
    "gesture": "turn",
    "short_label": "METRONOME",
    "action": "Adjusts the metronome mode: OFF, REC or ON, scheduling a preference save once stopped for nonzero choices while zero waits for another settings save.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "424",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L424"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "203",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L203"
     }
    ]
   },
   {
    "mode": "system",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing because this column is display-only.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "426",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L426"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "176",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L176"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "turn",
    "short_label": "DRUM MIDI",
    "action": "Adjusts the drum MIDI channel from 1 to 16, or 0 for off.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "427",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L427"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "188",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L188"
     }
    ]
   },
   {
    "mode": "master",
    "gesture": "turn",
    "short_label": "DUST",
    "action": "Adjusts the master’s dust effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "428",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L428"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "192",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L192"
     }
    ]
   },
   {
    "mode": "master_2",
    "gesture": "turn",
    "short_label": "HUM",
    "action": "Adjusts the master’s mains hum, hiss and crackle amount.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "429",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L429"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "199",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L199"
     }
    ]
   },
   {
    "mode": "kit",
    "gesture": "turn",
    "short_label": "KIT",
    "action": "Chooses a drum kit and immediately replaces an empty or untouched factory drum pattern with that kit’s beat, without a question or new undo snapshot.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "430",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L430"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "195",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L195"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "269-302",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L269-L302"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "turn",
    "short_label": "PROJECT SLOT",
    "action": "Chooses project slot 1–4 without loading or saving it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "433",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L433"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "180",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L180"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "621-635",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L621-L635"
     }
    ]
   },
   {
    "mode": "tools",
    "gesture": "turn",
    "short_label": "CLEAR STEPS",
    "action": "Arms on one clockwise turn and clears the selected track’s pattern on a second within about 1.5 seconds, with no panel undo and later autosave of the cleared work.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "434",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L434"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "186",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L186"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "385-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L385-L420"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "turn",
    "short_label": "ARP MODE",
    "action": "Adjusts the arpeggiator mode, including OFF and RPT.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "435",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L435"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "93",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L93"
     }
    ]
   },
   {
    "mode": "arp_2",
    "gesture": "turn",
    "short_label": "ARP SWING",
    "action": "Adjusts the arpeggiator swing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "436",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L436"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "97",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L97"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "turn",
    "short_label": "CHORD HOLD",
    "action": "Adjusts held-chord latching on or off.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "437",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L437"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "99",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L99"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn",
    "short_label": "STEP",
    "action": "Moves the step cursor and previews it when stopped if PREVIEW is on.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "438",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L438"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "215-261",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L215-L261"
     }
    ]
   },
   {
    "mode": "step_2",
    "gesture": "turn",
    "short_label": "STEP",
    "action": "Moves the step cursor and previews it when stopped if PREVIEW is on.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "439",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L439"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "215-261",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L215-L261"
     }
    ]
   },
   {
    "mode": "pattern",
    "gesture": "turn",
    "short_label": "LENGTH",
    "action": "Adjusts the selected track’s pattern length from 1 to 64 steps.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "440",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L440"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "105",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L105"
     }
    ]
   },
   {
    "mode": "vivo",
    "gesture": "turn",
    "short_label": "PULS",
    "action": "Adjusts the VIVO Euclidean pulse count from 0 to 64.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "441",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L441"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "149",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L149"
     }
    ]
   },
   {
    "mode": "vivo_2",
    "gesture": "turn",
    "short_label": "CYC",
    "action": "Adjusts the VIVO cycle length.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "442",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L442"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "153",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L153"
     }
    ]
   },
   {
    "mode": "vivo_3",
    "gesture": "turn",
    "short_label": "FRZ",
    "action": "Adjusts VIVO freeze on or off.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "443",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L443"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "157",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L157"
     }
    ]
   },
   {
    "mode": "tracks",
    "gesture": "turn",
    "short_label": "TRACK TYPE",
    "action": "Sets track 4 to SYNTH clockwise or DRUM counterclockwise, while tracks 1–3 stay synths.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "444",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L444"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "173-203",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L173-L203"
     }
    ]
   },
   {
    "mode": "presets",
    "gesture": "turn",
    "short_label": "PRESET",
    "action": "Loads the previous or next sound within the current browser category, replacing the selected synth sound in memory.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "313-329",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L313-L329"
     }
    ]
   },
   {
    "mode": "user",
    "gesture": "turn",
    "short_label": "USER SLOT",
    "action": "Chooses one of 32 user-sound slots and cancels any armed action.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "331-348",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L331-L348"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/upreset.c",
      "lines": "475-501",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/upreset.c#L475-L501"
     }
    ]
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "ANALOG WAVE",
    "action": "With ANALOG selected, adjusts its waveform.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_analog.c",
      "lines": "384",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_analog.c#L384"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "ANALOG engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "ANALOG CUT",
    "action": "With ANALOG selected, adjusts its filter cutoff.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_analog.c",
      "lines": "388",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_analog.c#L388"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "ANALOG engine selected"
   },
   {
    "mode": "edit_3",
    "gesture": "turn",
    "short_label": "ANALOG SUPR",
    "action": "With ANALOG selected, adjusts its superwave voice count.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_analog.c",
      "lines": "392",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_analog.c#L392"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "ANALOG engine selected"
   },
   {
    "mode": "edit_4",
    "gesture": "turn",
    "short_label": "ANALOG FTYP",
    "action": "With ANALOG selected, adjusts its filter model.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_analog.c",
      "lines": "396",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_analog.c#L396"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "ANALOG engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "ANALOG CUT",
    "action": "With ANALOG selected, adjusts its filter cutoff.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_analog.c",
      "lines": "388",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_analog.c#L388"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     }
    ],
    "when": "ANALOG engine selected"
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "DIGITAL ALG",
    "action": "With DIGITAL selected, adjusts its FM algorithm.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_digital.c",
      "lines": "140",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_digital.c#L140"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "DIGITAL engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "DIGITAL IDX",
    "action": "With DIGITAL selected, adjusts its FM depth.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_digital.c",
      "lines": "144",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_digital.c#L144"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "DIGITAL engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "DIGITAL IDX",
    "action": "With DIGITAL selected, adjusts its FM depth.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_digital.c",
      "lines": "144",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_digital.c#L144"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     }
    ],
    "when": "DIGITAL engine selected"
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "WHEEL REG",
    "action": "With WHEEL selected, adjusts its drawbar registration.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_drawbar.c",
      "lines": "293",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_drawbar.c#L293"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "WHEEL engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "WHEEL PERC",
    "action": "With WHEEL selected, adjusts its organ percussion.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_drawbar.c",
      "lines": "297",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_drawbar.c#L297"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "WHEEL engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "WHEEL REG",
    "action": "With WHEEL selected, adjusts its drawbar registration.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_drawbar.c",
      "lines": "293",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_drawbar.c#L293"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     }
    ],
    "when": "WHEEL engine selected"
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "FM6 ALG",
    "action": "With FM6 selected, adjusts its algorithm override, with 0 keeping the patch’s algorithm.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_fm6.c",
      "lines": "398",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_fm6.c#L398"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "FM6 engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "FM6 MEG",
    "action": "With FM6 selected, adjusts its modulator envelope offset.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_fm6.c",
      "lines": "402",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_fm6.c#L402"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "FM6 engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "FM6 MLVL",
    "action": "With FM6 selected, adjusts its modulator level offset.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_fm6.c",
      "lines": "400",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_fm6.c#L400"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     }
    ],
    "when": "FM6 engine selected"
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "VOICE VOWL",
    "action": "With VOICE selected, adjusts its first vowel.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_formant.c",
      "lines": "231",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_formant.c#L231"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "VOICE engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "VOICE BUZZ",
    "action": "With VOICE selected, adjusts its buzz level.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_formant.c",
      "lines": "235",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_formant.c#L235"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "VOICE engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "VOICE VOWL",
    "action": "With VOICE selected, adjusts its first vowel.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_formant.c",
      "lines": "231",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_formant.c#L231"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     }
    ],
    "when": "VOICE engine selected"
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "GRAIN SRC",
    "action": "With GRAIN selected, adjusts its sample source.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_grain.c",
      "lines": "445",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_grain.c#L445"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "GRAIN engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "GRAIN PTCH",
    "action": "With GRAIN selected, adjusts its grain transposition.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_grain.c",
      "lines": "449",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_grain.c#L449"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "GRAIN engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "GRAIN POS",
    "action": "With GRAIN selected, adjusts its position.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_grain.c",
      "lines": "446",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_grain.c#L446"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     }
    ],
    "when": "GRAIN engine selected"
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "LOFI CHIP",
    "action": "With LOFI selected, adjusts its chip model.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_lofi.c",
      "lines": "221",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_lofi.c#L221"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_lofi.c",
      "lines": "49-61",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_lofi.c#L49-L61"
     }
    ],
    "when": "LOFI engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "LOFI SWP",
    "action": "With LOFI selected, adjusts its pitch sweep.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_lofi.c",
      "lines": "225",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_lofi.c#L225"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_lofi.c",
      "lines": "49-61",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_lofi.c#L49-L61"
     }
    ],
    "when": "LOFI engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "LOFI WAVE",
    "action": "With LOFI selected, adjusts its waveform.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_lofi.c",
      "lines": "222",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_lofi.c#L222"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_lofi.c",
      "lines": "49-61",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_lofi.c#L49-L61"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     }
    ],
    "when": "LOFI engine selected"
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "NOISE MODE",
    "action": "With NOISE selected, adjusts its model.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_noise.c",
      "lines": "380",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_noise.c#L380"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_noise.c",
      "lines": "66-74",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_noise.c#L66-L74"
     }
    ],
    "when": "NOISE engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "NOISE TRK",
    "action": "With NOISE selected, adjusts its key tracking.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_noise.c",
      "lines": "384",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_noise.c#L384"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_noise.c",
      "lines": "66-74",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_noise.c#L66-L74"
     }
    ],
    "when": "NOISE engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "NOISE FREQ",
    "action": "With NOISE selected, adjusts its filter frequency.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_noise.c",
      "lines": "382",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_noise.c#L382"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_noise.c",
      "lines": "66-74",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_noise.c#L66-L74"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     }
    ],
    "when": "NOISE engine selected"
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "PHASE WAVE",
    "action": "With PHASE selected, adjusts its waveform.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_phase.c",
      "lines": "187",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_phase.c#L187"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "PHASE engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "PHASE DTN",
    "action": "With PHASE selected, adjusts its oscillator detune.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_phase.c",
      "lines": "191",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_phase.c#L191"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "PHASE engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "PHASE DCW",
    "action": "With PHASE selected, adjusts its phase distortion depth.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_phase.c",
      "lines": "189",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_phase.c#L189"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     }
    ],
    "when": "PHASE engine selected"
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "PHYS MODEL",
    "action": "With PHYS selected, adjusts its physical model.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_phys.c",
      "lines": "294",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_phys.c#L294"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_phys.c",
      "lines": "61-74",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_phys.c#L61-L74"
     }
    ],
    "when": "PHYS engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "PHYS POS",
    "action": "With PHYS selected, adjusts excitation position or sympathetic-string level for SYMP.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_phys.c",
      "lines": "298",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_phys.c#L298"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_phys.c",
      "lines": "61-74",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_phys.c#L61-L74"
     }
    ],
    "when": "PHYS engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "PHYS STRC",
    "action": "With PHYS selected, adjusts structure, membrane harmonics for MEMB, or the sympathetic chord for SYMP.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_phys.c",
      "lines": "295",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_phys.c#L295"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_phys.c",
      "lines": "61-74",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_phys.c#L61-L74"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     }
    ],
    "when": "PHYS engine selected"
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "ROBO MODE",
    "action": "With ROBO selected, adjusts its model.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_robo.c",
      "lines": "494",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_robo.c#L494"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_robo.c",
      "lines": "37-67",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_robo.c#L37-L67"
     }
    ],
    "when": "ROBO engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "ROBO TRK",
    "action": "With ROBO selected, adjusts VOSIM key tracking, GENDY seed, WALSH sweep, or SCAN hit shape.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_robo.c",
      "lines": "498",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_robo.c#L498"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_robo.c",
      "lines": "37-67",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_robo.c#L37-L67"
     }
    ],
    "when": "ROBO engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "ROBO FORM",
    "action": "With ROBO selected, adjusts VOSIM formant, GENDY level walk, WALSH sequence centre, or SCAN stiffness.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_robo.c",
      "lines": "495",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_robo.c#L495"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_robo.c",
      "lines": "37-67",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_robo.c#L37-L67"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     }
    ],
    "when": "ROBO engine selected"
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "SAMPLE SET",
    "action": "With SAMPLE selected, adjusts its sample set.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_sample.c",
      "lines": "210",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_sample.c#L210"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "SAMPLE engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "SAMPLE CUT",
    "action": "With SAMPLE selected, adjusts its sample low-pass cutoff.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_sample.c",
      "lines": "214",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_sample.c#L214"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "SAMPLE engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "SAMPLE SET",
    "action": "With SAMPLE selected, adjusts its sample set.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_sample.c",
      "lines": "210",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_sample.c#L210"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     }
    ],
    "when": "SAMPLE engine selected"
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "TRIO WAVE",
    "action": "With TRIO selected, adjusts its waveform.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_trio.c",
      "lines": "378",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_trio.c#L378"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "TRIO engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "TRIO MODE",
    "action": "With TRIO selected, adjusts its LP, BP, HP or notch filter mode.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_trio.c",
      "lines": "382",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_trio.c#L382"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "TRIO engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "TRIO CUT",
    "action": "With TRIO selected, adjusts its filter cutoff.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_trio.c",
      "lines": "383",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_trio.c#L383"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     }
    ],
    "when": "TRIO engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "DRUM LEVEL",
    "action": "Adjusts the drum track level.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     }
    ],
    "when": "Track 4 is selected as DRUM"
   },
   {
    "mode": "punch_layer",
    "gesture": "turn",
    "short_label": "MAIN FILTER",
    "action": "Adjusts the master filter, with low-pass left and high-pass right.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "595-603",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L595-L603"
     }
    ],
    "when": "Layer held or locked"
   },
   {
    "mode": "punch_layer",
    "gesture": "turn_while_holding:button_fx",
    "short_label": "MAIN FILTER",
    "action": "Adjusts the master filter, with low-pass left and high-pass right.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "595-603",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L595-L603"
     }
    ],
    "when": "Layer held or locked"
   },
   {
    "mode": "mix_layer",
    "gesture": "turn",
    "short_label": "TRACK 1 MIX",
    "action": "Adjusts track 1’s level without clearing its mute flag.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "604-606",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L604-L606"
     }
    ],
    "when": "Layer held or locked"
   },
   {
    "mode": "mix_layer",
    "gesture": "turn_while_holding:button_glo",
    "short_label": "TRACK 1 MIX",
    "action": "Adjusts track 1’s level without clearing its mute flag.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "604-606",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L604-L606"
     }
    ],
    "when": "Layer held or locked"
   },
   {
    "mode": "engine_layer",
    "gesture": "turn",
    "short_label": "LOCAL PRESET",
    "action": "Loads another factory preset of the current synth engine, replacing the sound in memory.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "607-625",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L607-L625"
     }
    ],
    "when": "Layer held or locked"
   },
   {
    "mode": "engine_layer",
    "gesture": "turn_while_holding:button_edit",
    "short_label": "LOCAL PRESET",
    "action": "Loads another factory preset of the current synth engine, replacing the sound in memory.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "607-625",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L607-L625"
     }
    ],
    "when": "Layer held or locked"
   },
   {
    "mode": "key_layer",
    "gesture": "turn",
    "short_label": "CHORD TYPE",
    "action": "Chooses one-key chord mode for the selected synth track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "626-639",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L626-L639"
     }
    ],
    "when": "Layer held or locked"
   },
   {
    "mode": "key_layer",
    "gesture": "turn_while_holding:button_sel",
    "short_label": "CHORD TYPE",
    "action": "Chooses one-key chord mode for the selected synth track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "626-639",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L626-L639"
     }
    ],
    "when": "Layer held or locked"
   },
   {
    "mode": "steps_layer",
    "gesture": "turn",
    "short_label": "PEN NOTE",
    "action": "Sets the note used when adding a step.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "640-655",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L640-L655"
     }
    ],
    "when": "No step key held"
   },
   {
    "mode": "steps_layer",
    "gesture": "turn_while_holding:button_seq",
    "short_label": "PEN NOTE",
    "action": "Sets the note used when adding a step.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "640-655",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L640-L655"
     }
    ],
    "when": "No step key held"
   },
   {
    "mode": "steps_layer",
    "gesture": "turn",
    "short_label": "STEP NOTE",
    "action": "Transposes all notes of every populated held step and keeps those steps when released.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "253-275",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L253-L275"
     }
    ],
    "when": "At least one step key is held"
   },
   {
    "mode": "engine_layer",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing for the drum track in this column.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "607-613",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L607-L613"
     }
    ],
    "when": "Selected track 4 is DRUM"
   },
   {
    "mode": "key_layer",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing for the drum track in this column.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "626-639",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L626-L639"
     }
    ],
    "when": "Selected track 4 is DRUM"
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_lfo",
    "short_label": "TEMPORARY",
    "action": "Captures up to sixteen ordinary page or HOME values until LFO is released, while PROJECT LOAD/SAVE, TOOLS CLEAR/INIT, USER actions, KIT/BEAT changes, browsing, steps, TRACKS and performance-layer knobs keep their normal lasting effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "264-294",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L264-L294"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "374-376",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L374-L376"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "730-736",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L730-L736"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "266-282",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L266-L282"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "331-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L331-L420"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "short_label": "COLOUR",
    "action": "Cycles the screen palette, storing changed preferences on menu exit immediately if stopped or once playback stops.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "170-203",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L170-L203"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "143-151",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L143-L151"
     }
    ],
    "when": "COLOR row selected"
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "short_label": "SPEAKER",
    "action": "Turns the speaker low-cut on clockwise or off counterclockwise, storing changed preferences on menu exit immediately if stopped or once playback stops.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "170-203",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L170-L203"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "143-151",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L143-L151"
     }
    ],
    "when": "SPEAKER row selected"
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "short_label": "BACKLIGHT",
    "action": "Sets OFF, LOW, MID or HIGH panel backlighting, storing changed preferences on menu exit immediately if stopped or once playback stops.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "170-203",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L170-L203"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "143-151",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L143-L151"
     }
    ],
    "when": "LIGHTS row selected"
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "short_label": "GUIDE KEYS",
    "action": "Sets OFF, C KEYS, WHITE KEYS or SCALE guide lighting and enables LOW backlighting if needed, storing changed preferences on menu exit immediately if stopped or once playback stops.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "170-203",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L170-L203"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "143-151",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L143-L151"
     }
    ],
    "when": "KEYS row selected"
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "short_label": "NOTE LIGHTS",
    "action": "Turns sounding-note lighting on clockwise or off counterclockwise, storing changed preferences on menu exit immediately if stopped or once playback stops.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "170-203",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L170-L203"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "143-151",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L143-L151"
     }
    ],
    "when": "NOTES row selected"
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "short_label": "USB LEVEL",
    "action": "Chooses FULL recording level clockwise or MASTER-controlled recording level counterclockwise, storing changed preferences on menu exit immediately if stopped or once playback stops.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "170-203",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L170-L203"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "143-151",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L143-L151"
     }
    ],
    "when": "USB AUDIO row selected"
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "short_label": "MIDI OUTPUT",
    "action": "Chooses SEQ for keys with sequencer and arp output clockwise, or KEYS alone counterclockwise, storing changed preferences on menu exit immediately if stopped or once playback stops.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "170-203",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L170-L203"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "143-151",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L143-L151"
     }
    ],
    "when": "MIDI OUT row selected"
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "short_label": "MIDI INPUT",
    "action": "Chooses CLOCK-only input clockwise or NOTES input counterclockwise, storing changed preferences on menu exit immediately if stopped or once playback stops.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "170-203",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L170-L203"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "143-151",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L143-L151"
     }
    ],
    "when": "MIDI IN row selected"
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "short_label": "SECOND CORE",
    "action": "Selects AUTO, OFF or BOOST second-core use, storing changed preferences on menu exit immediately if stopped or once playback stops.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "170-203",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L170-L203"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "143-151",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L143-L151"
     }
    ],
    "when": "2ND CORE row selected"
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing on MIDI LEARN, NEW PROJECT and ABOUT.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "170-234",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L170-L234"
     }
    ],
    "when": "An action row is selected"
   },
   {
    "mode": "about",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing on ABOUT.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "155-235",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L155-L235"
     }
    ]
   },
   {
    "mode": "clear_confirm",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing while the clear question is open.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "590-612",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L590-L612"
     }
    ]
   },
   {
    "mode": "drum_unavailable",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing on this unavailable drum page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "451-494",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L451-L494"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "303-304",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L303-L304"
     }
    ]
   },
   {
    "mode": "env",
    "gesture": "turn",
    "short_label": "-",
    "action": "Has no audible effect on FM6, whose patch envelopes control the sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_fm6.c",
      "lines": "15-27",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_fm6.c#L15-L27"
     }
    ],
    "when": "FM6 engine selected"
   },
   {
    "mode": "env_dest",
    "gesture": "turn",
    "short_label": "-",
    "action": "Has no audible effect on FM6, whose patch envelopes control the sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_fm6.c",
      "lines": "15-27",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_fm6.c#L15-L27"
     }
    ],
    "when": "FM6 engine selected"
   },
   {
    "mode": "calibration",
    "gesture": "turn",
    "short_label": "TEACH TURN",
    "action": "When prompted for this encoder, teaches its clockwise direction and position, with settings checked for saving after calibration finishes or times out.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "775-807",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L775-L807"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/main.c",
      "lines": "233-239",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/main.c#L233-L239"
     }
    ]
   },
   {
    "mode": "midi_learn",
    "gesture": "turn",
    "short_label": "LEARN TARGET",
    "action": "Edits and selects this track or engine parameter for the next eligible MIDI CC, replacing that CC’s or parameter’s old assignment and saving preferences immediately if stopped or once playback stops without another question.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "374-383",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L374-L383"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/midi_learn.c",
      "lines": "51-73",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/midi_learn.c#L51-L73"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/midi_learn.c",
      "lines": "114-159",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/midi_learn.c#L114-L159"
     }
    ],
    "when": "A track or engine parameter page is open; HOME, globals and performance-layer knobs do not select a Learn target"
   }
  ],
  "encoder_knob2": [
   {
    "mode": "env",
    "gesture": "turn",
    "short_label": "DECAY",
    "action": "Adjusts the selected synth track’s decay time, using note lengths when ESYNC is on.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "394",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L394"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "78",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L78"
     }
    ],
    "when": "Selected synth is not FM6"
   },
   {
    "mode": "env_dest",
    "gesture": "turn",
    "short_label": "ENV PITCH",
    "action": "Adjusts the envelope’s pitch amount.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "395",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L395"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "82",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L82"
     }
    ],
    "when": "Selected synth is not FM6"
   },
   {
    "mode": "lfo",
    "gesture": "turn",
    "short_label": "WAVE",
    "action": "Adjusts the LFO waveform.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "397",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L397"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "86",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L86"
     }
    ]
   },
   {
    "mode": "lfo_2",
    "gesture": "turn",
    "short_label": "TRIG",
    "action": "Adjusts whether a note restarts the LFO or it runs freely.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "398",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L398"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "160",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L160"
     }
    ]
   },
   {
    "mode": "lfo_dest",
    "gesture": "turn",
    "short_label": "LFO FILTER",
    "action": "Adjusts the LFO’s filter amount.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "399",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L399"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "90",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L90"
     }
    ]
   },
   {
    "mode": "mod_1",
    "gesture": "turn",
    "short_label": "MOD 1 TARGET",
    "action": "Adjusts modulation slot 1’s destination, including the selected engine’s parameters.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "400",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L400"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "126",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L126"
     }
    ]
   },
   {
    "mode": "mod_2",
    "gesture": "turn",
    "short_label": "MOD 2 TARGET",
    "action": "Adjusts modulation slot 2’s destination, including the selected engine’s parameters.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "401",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L401"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "127",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L127"
     }
    ]
   },
   {
    "mode": "mod_3",
    "gesture": "turn",
    "short_label": "MOD 3 TARGET",
    "action": "Adjusts modulation slot 3’s destination, including the selected engine’s parameters.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "402",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L402"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "128",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L128"
     }
    ]
   },
   {
    "mode": "mod_4",
    "gesture": "turn",
    "short_label": "MOD 4 TARGET",
    "action": "Adjusts modulation slot 4’s destination, including the selected engine’s parameters.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "403",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L403"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "129",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L129"
     }
    ]
   },
   {
    "mode": "macro",
    "gesture": "turn",
    "short_label": "MAC2",
    "action": "Adjusts macro 2, shared across the tracks’ modulation matrices.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "404",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L404"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "201",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L201"
     }
    ]
   },
   {
    "mode": "fx",
    "gesture": "turn",
    "short_label": "CHORUS SEND",
    "action": "Adjusts the selected synth track’s chorus send.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "405",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L405"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "110",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L110"
     }
    ]
   },
   {
    "mode": "dist",
    "gesture": "turn",
    "short_label": "DISTORTION",
    "action": "Adjusts the selected synth track’s distortion amount for its chosen distortion type.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "406",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L406"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "109",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L109"
     }
    ]
   },
   {
    "mode": "slicer",
    "gesture": "turn",
    "short_label": "SLICER BEAT",
    "action": "Adjusts one of sixteen slicer rhythms.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "408",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L408"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "122",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L122"
     }
    ]
   },
   {
    "mode": "insert",
    "gesture": "turn",
    "short_label": "INSERT A",
    "action": "Adjusts insert A: drive for SOFT/HARD/FOLD/FUZZ, bits for CRUSH, rate for PHASR/FLANG/CHOR, or amount for DISP.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "409",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L409"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "144",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L144"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "207-222",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L207-L222"
     }
    ]
   },
   {
    "mode": "insert_2",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing in this empty column.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "410",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L410"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     }
    ]
   },
   {
    "mode": "dly",
    "gesture": "turn",
    "short_label": "DELAY REPEAT",
    "action": "Adjusts the shared delay’s feedback.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "411",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L411"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "169",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L169"
     }
    ]
   },
   {
    "mode": "rev_cho",
    "gesture": "turn",
    "short_label": "REVERB DAMP",
    "action": "Adjusts the shared reverb damping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "412",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L412"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "173",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L173"
     }
    ]
   },
   {
    "mode": "reverb",
    "gesture": "turn",
    "short_label": "REVERB SIZE",
    "action": "Adjusts the shared reverb size.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "413",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L413"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "172",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L172"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "turn",
    "short_label": "SCALE",
    "action": "Adjusts the selected synth track’s scale, including NORD.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "414",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L414"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "102",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L102"
     }
    ]
   },
   {
    "mode": "chord",
    "gesture": "turn",
    "short_label": "STRUM",
    "action": "Adjusts the signed spacing between a chord’s notes from −60 to +60 ms.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "415",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L415"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "139",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L139"
     }
    ]
   },
   {
    "mode": "voice",
    "gesture": "turn",
    "short_label": "GLD",
    "action": "Adjusts the glide amount.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "421",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L421"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "114",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L114"
     }
    ]
   },
   {
    "mode": "voice_2",
    "gesture": "turn",
    "short_label": "DTUNE",
    "action": "Adjusts the unison detune amount.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "422",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L422"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "118",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L118"
     }
    ]
   },
   {
    "mode": "global",
    "gesture": "turn",
    "short_label": "SWG",
    "action": "Adjusts the project swing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "423",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L423"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "165",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L165"
     }
    ]
   },
   {
    "mode": "click",
    "gesture": "turn",
    "short_label": "CLICK LEVEL",
    "action": "Adjusts LOW, MID or HIGH metronome volume, scheduling a preference save once stopped for nonzero choices while zero waits for another settings save.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "424",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L424"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "203",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L203"
     }
    ]
   },
   {
    "mode": "system",
    "gesture": "turn",
    "short_label": "CLOCK OUT",
    "action": "Adjusts USB MIDI clock output OFF or OUT.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "426",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L426"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "177",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L177"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "turn",
    "short_label": "DRUM LEVEL",
    "action": "Adjusts the drum track level.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "427",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L427"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "189",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L189"
     }
    ]
   },
   {
    "mode": "master",
    "gesture": "turn",
    "short_label": "DUCK",
    "action": "Adjusts how much the kick lowers the synth tracks.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "428",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L428"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "193",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L193"
     }
    ]
   },
   {
    "mode": "master_2",
    "gesture": "turn",
    "short_label": "TAPE",
    "action": "Adjusts the master’s worn-tape amount.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "429",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L429"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "198",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L198"
     }
    ]
   },
   {
    "mode": "kit",
    "gesture": "turn",
    "short_label": "DRUM LEVEL",
    "action": "Adjusts the drum track level.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "430",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L430"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "189",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L189"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing in this empty column.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "433",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L433"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     }
    ]
   },
   {
    "mode": "tools",
    "gesture": "turn",
    "short_label": "INIT SOUND",
    "action": "Arms on one clockwise turn and resets the selected synth sound to its engine’s first preset on a second within about 1.5 seconds, with no panel undo and later autosave of the change.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "434",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L434"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "187",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L187"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "385-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L385-L420"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "turn",
    "short_label": "ARP RATE",
    "action": "Adjusts the arpeggiator’s tempo division, up to four bars.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "435",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L435"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "94",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L94"
     }
    ]
   },
   {
    "mode": "arp_2",
    "gesture": "turn",
    "short_label": "ARP CHANCE",
    "action": "Adjusts the arpeggiator note probability.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "436",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L436"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "98",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L98"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "turn",
    "short_label": "DRONE MOTION",
    "action": "Adjusts the drone’s evolving motion.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "437",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L437"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "135",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L135"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn",
    "short_label": "STEP NOTE",
    "action": "Transposes the step’s notes, or puts the last played note into an empty step.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "438",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L438"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "215-261",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L215-L261"
     }
    ]
   },
   {
    "mode": "step_2",
    "gesture": "turn",
    "short_label": "RATCHET",
    "action": "Sets this step’s ratchet count from one to four.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "439",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L439"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "215-261",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L215-L261"
     }
    ]
   },
   {
    "mode": "pattern",
    "gesture": "turn",
    "short_label": "STEP RATE",
    "action": "Adjusts the selected track’s step division, up to four bars.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "440",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L440"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "106",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L106"
     }
    ]
   },
   {
    "mode": "vivo",
    "gesture": "turn",
    "short_label": "ROT",
    "action": "Adjusts the VIVO rhythm rotation.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "441",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L441"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "150",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L150"
     }
    ]
   },
   {
    "mode": "vivo_2",
    "gesture": "turn",
    "short_label": "VIVO ACCENT",
    "action": "Adjusts the VIVO accent interval.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "442",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L442"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "154",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L154"
     }
    ]
   },
   {
    "mode": "vivo_3",
    "gesture": "turn",
    "short_label": "LOOP",
    "action": "Adjusts the VIVO loop multiplier: x1, x2, x4 or x8.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "443",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L443"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "158",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L158"
     }
    ]
   },
   {
    "mode": "tracks",
    "gesture": "turn",
    "short_label": "TRACK LEVEL",
    "action": "Unmutes a muted track on the first turn, then adjusts its level on later turns.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "444",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L444"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "173-203",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L173-L203"
     }
    ]
   },
   {
    "mode": "presets",
    "gesture": "turn",
    "short_label": "CATEGORY",
    "action": "Chooses the preset category used by the browser.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "313-329",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L313-L329"
     }
    ]
   },
   {
    "mode": "user",
    "gesture": "turn",
    "short_label": "LOAD SOUND",
    "action": "Arms on one clockwise turn and loads the chosen user sound on a second within about 1.5 seconds, replacing the current synth sound without panel undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "331-348",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L331-L348"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/upreset.c",
      "lines": "475-501",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/upreset.c#L475-L501"
     }
    ]
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "ANALOG DTN",
    "action": "With ANALOG selected, adjusts its oscillator detune.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_analog.c",
      "lines": "385",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_analog.c#L385"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "ANALOG engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "ANALOG RES",
    "action": "With ANALOG selected, adjusts its resonance.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_analog.c",
      "lines": "389",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_analog.c#L389"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "ANALOG engine selected"
   },
   {
    "mode": "edit_3",
    "gesture": "turn",
    "short_label": "ANALOG SDTN",
    "action": "With ANALOG selected, adjusts its superwave detune.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_analog.c",
      "lines": "393",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_analog.c#L393"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "ANALOG engine selected"
   },
   {
    "mode": "edit_4",
    "gesture": "turn",
    "short_label": "ANALOG SAT",
    "action": "With ANALOG selected, adjusts its voice saturation type.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_analog.c",
      "lines": "397",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_analog.c#L397"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "ANALOG engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "ANALOG RES",
    "action": "With ANALOG selected, adjusts its resonance.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_analog.c",
      "lines": "389",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_analog.c#L389"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     }
    ],
    "when": "ANALOG engine selected"
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "DIGITAL R2",
    "action": "With DIGITAL selected, adjusts its operator 2 ratio.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_digital.c",
      "lines": "141",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_digital.c#L141"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "DIGITAL engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "DIGITAL MDEC",
    "action": "With DIGITAL selected, adjusts its modulation decay.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_digital.c",
      "lines": "145",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_digital.c#L145"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "DIGITAL engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "DIGITAL MDEC",
    "action": "With DIGITAL selected, adjusts its modulation decay.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_digital.c",
      "lines": "145",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_digital.c#L145"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     }
    ],
    "when": "DIGITAL engine selected"
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "WHEEL SUB",
    "action": "With WHEEL selected, adjusts its lower drawbars.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_drawbar.c",
      "lines": "294",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_drawbar.c#L294"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "WHEEL engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "WHEEL CLICK",
    "action": "With WHEEL selected, adjusts its organ key click.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_drawbar.c",
      "lines": "298",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_drawbar.c#L298"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "WHEEL engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "WHEEL PERC",
    "action": "With WHEEL selected, adjusts its organ percussion.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_drawbar.c",
      "lines": "297",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_drawbar.c#L297"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     }
    ],
    "when": "WHEEL engine selected"
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "FM6 FB",
    "action": "With FM6 selected, adjusts its feedback offset from the patch.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_fm6.c",
      "lines": "399",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_fm6.c#L399"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "FM6 engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "FM6 VMOD",
    "action": "With FM6 selected, adjusts its velocity response offset.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_fm6.c",
      "lines": "403",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_fm6.c#L403"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "FM6 engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "FM6 MRAT",
    "action": "With FM6 selected, adjusts its modulator ratio offset.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_fm6.c",
      "lines": "401",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_fm6.c#L401"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     }
    ],
    "when": "FM6 engine selected"
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "VOICE VOWL2",
    "action": "With VOICE selected, adjusts its second vowel.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_formant.c",
      "lines": "232",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_formant.c#L232"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "VOICE engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "VOICE BRTH",
    "action": "With VOICE selected, adjusts its breath level.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_formant.c",
      "lines": "236",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_formant.c#L236"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "VOICE engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "VOICE BUZZ",
    "action": "With VOICE selected, adjusts its buzz level.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_formant.c",
      "lines": "235",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_formant.c#L235"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     }
    ],
    "when": "VOICE engine selected"
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "GRAIN POS",
    "action": "With GRAIN selected, adjusts its position.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_grain.c",
      "lines": "446",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_grain.c#L446"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "GRAIN engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "GRAIN SPRD",
    "action": "With GRAIN selected, adjusts its grain spread.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_grain.c",
      "lines": "450",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_grain.c#L450"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "GRAIN engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "GRAIN SIZE",
    "action": "With GRAIN selected, adjusts its grain size.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_grain.c",
      "lines": "447",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_grain.c#L447"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     }
    ],
    "when": "GRAIN engine selected"
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "LOFI WAVE",
    "action": "With LOFI selected, adjusts its waveform.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_lofi.c",
      "lines": "222",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_lofi.c#L222"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_lofi.c",
      "lines": "49-61",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_lofi.c#L49-L61"
     }
    ],
    "when": "LOFI engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "LOFI VIB",
    "action": "With LOFI selected, adjusts its vibrato.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_lofi.c",
      "lines": "226",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_lofi.c#L226"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_lofi.c",
      "lines": "49-61",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_lofi.c#L49-L61"
     }
    ],
    "when": "LOFI engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "LOFI DUTY",
    "action": "With LOFI selected, adjusts pulse duty or chooses a wave table when WAVE is WRAM.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_lofi.c",
      "lines": "223",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_lofi.c#L223"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_lofi.c",
      "lines": "49-61",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_lofi.c#L49-L61"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     }
    ],
    "when": "LOFI engine selected"
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "NOISE COLR",
    "action": "With NOISE selected, adjusts its noise colour.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_noise.c",
      "lines": "381",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_noise.c#L381"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_noise.c",
      "lines": "66-74",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_noise.c#L66-L74"
     }
    ],
    "when": "NOISE engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "NOISE DENS",
    "action": "With NOISE selected, adjusts impulse density for ANLG/DUST, register length for LFSR/META, scrape length for MOTR, or feedback for COMB.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_noise.c",
      "lines": "385",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_noise.c#L385"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_noise.c",
      "lines": "66-74",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_noise.c#L66-L74"
     }
    ],
    "when": "NOISE engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "NOISE RES",
    "action": "With NOISE selected, adjusts its resonance.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_noise.c",
      "lines": "383",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_noise.c#L383"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_noise.c",
      "lines": "66-74",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_noise.c#L66-L74"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     }
    ],
    "when": "NOISE engine selected"
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "PHASE WAVE2",
    "action": "With PHASE selected, adjusts its second waveform.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_phase.c",
      "lines": "188",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_phase.c#L188"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "PHASE engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "PHASE LINE",
    "action": "With PHASE selected, adjusts its line mode.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_phase.c",
      "lines": "192",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_phase.c#L192"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "PHASE engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "PHASE ENV",
    "action": "With PHASE selected, adjusts its distortion envelope amount.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_phase.c",
      "lines": "190",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_phase.c#L190"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     }
    ],
    "when": "PHASE engine selected"
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "PHYS STRC",
    "action": "With PHYS selected, adjusts structure, membrane harmonics for MEMB, or the sympathetic chord for SYMP.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_phys.c",
      "lines": "295",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_phys.c#L295"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_phys.c",
      "lines": "61-74",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_phys.c#L61-L74"
     }
    ],
    "when": "PHYS engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "PHYS ACC",
    "action": "With PHYS selected, adjusts its excitation strength.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_phys.c",
      "lines": "299",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_phys.c#L299"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_phys.c",
      "lines": "61-74",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_phys.c#L61-L74"
     }
    ],
    "when": "PHYS engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "PHYS BRIT",
    "action": "With PHYS selected, adjusts its brightness.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_phys.c",
      "lines": "296",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_phys.c#L296"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_phys.c",
      "lines": "61-74",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_phys.c#L61-L74"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     }
    ],
    "when": "PHYS engine selected"
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "ROBO FORM",
    "action": "With ROBO selected, adjusts VOSIM formant, GENDY level walk, WALSH sequence centre, or SCAN stiffness.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_robo.c",
      "lines": "495",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_robo.c#L495"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_robo.c",
      "lines": "37-67",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_robo.c#L37-L67"
     }
    ],
    "when": "ROBO engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "ROBO DRFT",
    "action": "With ROBO selected, adjusts its drift.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_robo.c",
      "lines": "499",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_robo.c#L499"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_robo.c",
      "lines": "37-67",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_robo.c#L37-L67"
     }
    ],
    "when": "ROBO engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "ROBO DCAY",
    "action": "With ROBO selected, adjusts VOSIM decay, GENDY time walk, WALSH blend, or SCAN centring.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_robo.c",
      "lines": "497",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_robo.c#L497"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_robo.c",
      "lines": "37-67",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_robo.c#L37-L67"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     }
    ],
    "when": "ROBO engine selected"
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "SAMPLE TUNE",
    "action": "With SAMPLE selected, adjusts its sample transposition.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_sample.c",
      "lines": "211",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_sample.c#L211"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "SAMPLE engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing in this unused column.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_sample.c",
      "lines": "215",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_sample.c#L215"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "SAMPLE engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "SAMPLE CUT",
    "action": "With SAMPLE selected, adjusts its sample low-pass cutoff.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_sample.c",
      "lines": "214",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_sample.c#L214"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     }
    ],
    "when": "SAMPLE engine selected"
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "TRIO INT2",
    "action": "With TRIO selected, adjusts its oscillator 2 interval.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_trio.c",
      "lines": "379",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_trio.c#L379"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "TRIO engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "TRIO CUT",
    "action": "With TRIO selected, adjusts its filter cutoff.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_trio.c",
      "lines": "383",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_trio.c#L383"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "TRIO engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "TRIO RES",
    "action": "With TRIO selected, adjusts its resonance.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_trio.c",
      "lines": "384",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_trio.c#L384"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     }
    ],
    "when": "TRIO engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "DRUM REVERB",
    "action": "Adjusts the drum reverb send.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     }
    ],
    "when": "Track 4 is selected as DRUM"
   },
   {
    "mode": "punch_layer",
    "gesture": "turn",
    "short_label": "DUST",
    "action": "Adjusts the master dust amount.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "595-603",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L595-L603"
     }
    ],
    "when": "Layer held or locked"
   },
   {
    "mode": "punch_layer",
    "gesture": "turn_while_holding:button_fx",
    "short_label": "DUST",
    "action": "Adjusts the master dust amount.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "595-603",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L595-L603"
     }
    ],
    "when": "Layer held or locked"
   },
   {
    "mode": "mix_layer",
    "gesture": "turn",
    "short_label": "TRACK 2 MIX",
    "action": "Adjusts track 2’s level without clearing its mute flag.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "604-606",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L604-L606"
     }
    ],
    "when": "Layer held or locked"
   },
   {
    "mode": "mix_layer",
    "gesture": "turn_while_holding:button_glo",
    "short_label": "TRACK 2 MIX",
    "action": "Adjusts track 2’s level without clearing its mute flag.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "604-606",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L604-L606"
     }
    ],
    "when": "Layer held or locked"
   },
   {
    "mode": "engine_layer",
    "gesture": "turn",
    "short_label": "VOICE MODE",
    "action": "Chooses POLY, MONO, LEG or UNI for the selected synth.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "607-625",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L607-L625"
     }
    ],
    "when": "Layer held or locked"
   },
   {
    "mode": "engine_layer",
    "gesture": "turn_while_holding:button_edit",
    "short_label": "VOICE MODE",
    "action": "Chooses POLY, MONO, LEG or UNI for the selected synth.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "607-625",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L607-L625"
     }
    ],
    "when": "Layer held or locked"
   },
   {
    "mode": "key_layer",
    "gesture": "turn",
    "short_label": "ALL SCALES",
    "action": "Sets the scale on every synth track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "626-639",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L626-L639"
     }
    ],
    "when": "Layer held or locked"
   },
   {
    "mode": "key_layer",
    "gesture": "turn_while_holding:button_sel",
    "short_label": "ALL SCALES",
    "action": "Sets the scale on every synth track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "626-639",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L626-L639"
     }
    ],
    "when": "Layer held or locked"
   },
   {
    "mode": "steps_layer",
    "gesture": "turn",
    "short_label": "STEP RATE",
    "action": "Chooses the selected track’s step division.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "640-655",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L640-L655"
     }
    ],
    "when": "No step key held"
   },
   {
    "mode": "steps_layer",
    "gesture": "turn_while_holding:button_seq",
    "short_label": "STEP RATE",
    "action": "Chooses the selected track’s step division.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "640-655",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L640-L655"
     }
    ],
    "when": "No step key held"
   },
   {
    "mode": "steps_layer",
    "gesture": "turn",
    "short_label": "RATCHET",
    "action": "Sets every populated held step’s ratchet count from one to four and keeps the steps when released.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "253-275",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L253-L275"
     }
    ],
    "when": "At least one step key is held"
   },
   {
    "mode": "engine_layer",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing for the drum track in this column.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "607-613",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L607-L613"
     }
    ],
    "when": "Selected track 4 is DRUM"
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_lfo",
    "short_label": "TEMPORARY",
    "action": "Captures up to sixteen ordinary page or HOME values until LFO is released, while PROJECT LOAD/SAVE, TOOLS CLEAR/INIT, USER actions, KIT/BEAT changes, browsing, steps, TRACKS and performance-layer knobs keep their normal lasting effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "264-294",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L264-L294"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "374-376",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L374-L376"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "730-736",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L730-L736"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "266-282",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L266-L282"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "331-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L331-L420"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing while the menu is open.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "155-235",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L155-L235"
     }
    ]
   },
   {
    "mode": "about",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing on ABOUT.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "155-235",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L155-L235"
     }
    ]
   },
   {
    "mode": "clear_confirm",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing while the clear question is open.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "590-612",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L590-L612"
     }
    ]
   },
   {
    "mode": "drum_unavailable",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing on this unavailable drum page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "451-494",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L451-L494"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "303-304",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L303-L304"
     }
    ]
   },
   {
    "mode": "env",
    "gesture": "turn",
    "short_label": "-",
    "action": "Has no audible effect on FM6, whose patch envelopes control the sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_fm6.c",
      "lines": "15-27",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_fm6.c#L15-L27"
     }
    ],
    "when": "FM6 engine selected"
   },
   {
    "mode": "env_dest",
    "gesture": "turn",
    "short_label": "-",
    "action": "Has no audible effect on FM6, whose patch envelopes control the sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_fm6.c",
      "lines": "15-27",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_fm6.c#L15-L27"
     }
    ],
    "when": "FM6 engine selected"
   },
   {
    "mode": "calibration",
    "gesture": "turn",
    "short_label": "TEACH TURN",
    "action": "When prompted for this encoder, teaches its clockwise direction and position, with settings checked for saving after calibration finishes or times out.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "775-807",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L775-L807"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/main.c",
      "lines": "233-239",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/main.c#L233-L239"
     }
    ]
   },
   {
    "mode": "midi_learn",
    "gesture": "turn",
    "short_label": "LEARN TARGET",
    "action": "Edits and selects this track or engine parameter for the next eligible MIDI CC, replacing that CC’s or parameter’s old assignment and saving preferences immediately if stopped or once playback stops without another question.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "374-383",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L374-L383"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/midi_learn.c",
      "lines": "51-73",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/midi_learn.c#L51-L73"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/midi_learn.c",
      "lines": "114-159",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/midi_learn.c#L114-L159"
     }
    ],
    "when": "A track or engine parameter page is open; HOME, globals and performance-layer knobs do not select a Learn target"
   }
  ],
  "encoder_knob3": [
   {
    "mode": "env",
    "gesture": "turn",
    "short_label": "SUSTAIN",
    "action": "Adjusts the selected synth track’s sustain level.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "394",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L394"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "79",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L79"
     }
    ],
    "when": "Selected synth is not FM6"
   },
   {
    "mode": "env_dest",
    "gesture": "turn",
    "short_label": "ENV SHAPE",
    "action": "Adjusts the envelope’s shape amount.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "395",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L395"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "83",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L83"
     }
    ],
    "when": "Selected synth is not FM6"
   },
   {
    "mode": "lfo",
    "gesture": "turn",
    "short_label": "PHS",
    "action": "Adjusts the LFO starting phase.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "397",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L397"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "87",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L87"
     }
    ]
   },
   {
    "mode": "lfo_2",
    "gesture": "turn",
    "short_label": "POL",
    "action": "Adjusts bipolar or unipolar LFO motion.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "398",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L398"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "160",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L160"
     }
    ]
   },
   {
    "mode": "lfo_dest",
    "gesture": "turn",
    "short_label": "LFO SHAPE",
    "action": "Adjusts the LFO’s shape amount.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "399",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L399"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "91",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L91"
     }
    ]
   },
   {
    "mode": "mod_1",
    "gesture": "turn",
    "short_label": "MOD 1 DEPTH",
    "action": "Adjusts modulation slot 1’s signed depth.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "400",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L400"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "126",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L126"
     }
    ]
   },
   {
    "mode": "mod_2",
    "gesture": "turn",
    "short_label": "MOD 2 DEPTH",
    "action": "Adjusts modulation slot 2’s signed depth.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "401",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L401"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "127",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L127"
     }
    ]
   },
   {
    "mode": "mod_3",
    "gesture": "turn",
    "short_label": "MOD 3 DEPTH",
    "action": "Adjusts modulation slot 3’s signed depth.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "402",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L402"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "128",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L128"
     }
    ]
   },
   {
    "mode": "mod_4",
    "gesture": "turn",
    "short_label": "MOD 4 DEPTH",
    "action": "Adjusts modulation slot 4’s signed depth.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "403",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L403"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "129",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L129"
     }
    ]
   },
   {
    "mode": "macro",
    "gesture": "turn",
    "short_label": "MAC3",
    "action": "Adjusts macro 3, shared across the tracks’ modulation matrices.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "404",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L404"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "202",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L202"
     }
    ]
   },
   {
    "mode": "fx",
    "gesture": "turn",
    "short_label": "DELAY SEND",
    "action": "Adjusts the selected synth track’s delay send.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "405",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L405"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "111",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L111"
     }
    ]
   },
   {
    "mode": "dist",
    "gesture": "turn",
    "short_label": "RING PITCH",
    "action": "Adjusts the ring modulator’s carrier frequency.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "406",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L406"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "133",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L133"
     }
    ]
   },
   {
    "mode": "slicer",
    "gesture": "turn",
    "short_label": "SLICER RATE",
    "action": "Adjusts the slicer’s tempo division.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "408",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L408"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "123",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L123"
     }
    ]
   },
   {
    "mode": "insert",
    "gesture": "turn",
    "short_label": "INSERT B",
    "action": "Adjusts insert B: tone for SOFT/HARD/FOLD/FUZZ, sample rate for CRUSH, depth for PHASR/FLANG/CHOR, or stretch for DISP.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "409",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L409"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "145",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L145"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "207-222",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L207-L222"
     }
    ]
   },
   {
    "mode": "insert_2",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing in this empty column.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "410",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L410"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     }
    ]
   },
   {
    "mode": "dly",
    "gesture": "turn",
    "short_label": "DELAY TONE",
    "action": "Adjusts the shared delay’s tone.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "411",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L411"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "170",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L170"
     }
    ]
   },
   {
    "mode": "rev_cho",
    "gesture": "turn",
    "short_label": "CHORUS RATE",
    "action": "Adjusts the shared chorus rate.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "412",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L412"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "174",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L174"
     }
    ]
   },
   {
    "mode": "reverb",
    "gesture": "turn",
    "short_label": "REVERB DAMP",
    "action": "Adjusts the shared reverb damping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "413",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L413"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "173",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L173"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "turn",
    "short_label": "KEY MAPPING",
    "action": "Adjusts OFF, SNAP to the scale, or WHITE to lay the scale on white keys.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "414",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L414"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "103",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L103"
     }
    ]
   },
   {
    "mode": "chord",
    "gesture": "turn",
    "short_label": "VOICE LEAD",
    "action": "Adjusts chord voice leading on or off.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "415",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L415"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "140",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L140"
     }
    ]
   },
   {
    "mode": "voice",
    "gesture": "turn",
    "short_label": "GLIDE MODE",
    "action": "Adjusts glide by RATE or fixed TIME.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "421",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L421"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "115",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L115"
     }
    ]
   },
   {
    "mode": "voice_2",
    "gesture": "turn",
    "short_label": "PAN",
    "action": "Adjusts the selected track’s stereo position.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "422",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L422"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "119",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L119"
     }
    ]
   },
   {
    "mode": "global",
    "gesture": "turn",
    "short_label": "CLOCK SOURCE",
    "action": "Adjusts the clock source: INT, USB or TRS.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "423",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L423"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "166",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L166"
     }
    ]
   },
   {
    "mode": "click",
    "gesture": "turn",
    "short_label": "COUNT IN",
    "action": "Adjusts no count-in, one bar or two bars before recording, scheduling a preference save once stopped for nonzero choices while zero waits for another settings save.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "424",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L424"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "203",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L203"
     }
    ]
   },
   {
    "mode": "system",
    "gesture": "turn",
    "short_label": "MIDI ROUTE",
    "action": "Adjusts incoming MIDI channels: CH1-4, SEL, CH5-8, CH9-12 or CH13-16.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "426",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L426"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "178",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L178"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "turn",
    "short_label": "DRUM REVERB",
    "action": "Adjusts the drum reverb send.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "427",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L427"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "190",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L190"
     }
    ]
   },
   {
    "mode": "master",
    "gesture": "turn",
    "short_label": "MAIN FILTER",
    "action": "Adjusts the master filter, with low-pass left and high-pass right.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "428",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L428"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "194",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L194"
     }
    ]
   },
   {
    "mode": "master_2",
    "gesture": "turn",
    "short_label": "DUST",
    "action": "Adjusts the master’s dust effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "429",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L429"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "192",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L192"
     }
    ]
   },
   {
    "mode": "kit",
    "gesture": "turn",
    "short_label": "DRUM REVERB",
    "action": "Adjusts the drum reverb send.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "430",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L430"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "190",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L190"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "turn",
    "short_label": "LOAD PROJECT",
    "action": "Arms on one clockwise turn and loads the selected saved project on a second within about 1.5 seconds, replacing the working project in memory without panel undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "433",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L433"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "182",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L182"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "385-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L385-L420"
     }
    ]
   },
   {
    "mode": "tools",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing in this empty column.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "434",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L434"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "turn",
    "short_label": "ARP OCTAVES",
    "action": "Adjusts the arpeggiator range from one to four octaves.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "435",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L435"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "95",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L95"
     }
    ]
   },
   {
    "mode": "arp_2",
    "gesture": "turn",
    "short_label": "CHORD HOLD",
    "action": "Adjusts held-chord latching on or off.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "436",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L436"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "99",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L99"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "turn",
    "short_label": "TENSION",
    "action": "Adjusts the drone’s tension target.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "437",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L437"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "136",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L136"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn",
    "short_label": "STEP KIND",
    "action": "Chooses NOTE, TIE or REST for this step.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "438",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L438"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "215-261",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L215-L261"
     }
    ]
   },
   {
    "mode": "step_2",
    "gesture": "turn",
    "short_label": "CHANCE",
    "action": "Sets this step’s chance to 100, 75, 50 or 25 percent.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "439",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L439"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "215-261",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L215-L261"
     }
    ]
   },
   {
    "mode": "pattern",
    "gesture": "turn",
    "short_label": "STEP SWING",
    "action": "Adjusts the selected track’s step swing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "440",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L440"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "107",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L107"
     }
    ]
   },
   {
    "mode": "vivo",
    "gesture": "turn",
    "short_label": "VIVO DENSITY",
    "action": "Adjusts the VIVO density.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "441",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L441"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "151",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L151"
     }
    ]
   },
   {
    "mode": "vivo_2",
    "gesture": "turn",
    "short_label": "VIVO RULE",
    "action": "Adjusts the VIVO cellular rule, or OFF.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "442",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L442"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "155",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L155"
     }
    ]
   },
   {
    "mode": "vivo_3",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing in this empty column.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "443",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L443"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     }
    ]
   },
   {
    "mode": "tracks",
    "gesture": "turn",
    "short_label": "LENGTH",
    "action": "Sets the selected track’s pattern length from 1 to 64 steps.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "444",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L444"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "173-203",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L173-L203"
     }
    ]
   },
   {
    "mode": "presets",
    "gesture": "turn",
    "short_label": "PRESET GROUP",
    "action": "Jumps between engine presets, FM6 banks and user sounds within the category.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "313-329",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L313-L329"
     }
    ]
   },
   {
    "mode": "user",
    "gesture": "turn",
    "short_label": "ERASE SOUND",
    "action": "Arms on one clockwise turn and erases the chosen sound on a second within about 1.5 seconds, immediately rewriting its whole bank of sixteen without panel undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "331-348",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L331-L348"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/upreset.c",
      "lines": "475-501",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/upreset.c#L475-L501"
     }
    ]
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "ANALOG MIX",
    "action": "With ANALOG selected, adjusts its oscillator blend.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_analog.c",
      "lines": "386",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_analog.c#L386"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "ANALOG engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "ANALOG DRV",
    "action": "With ANALOG selected, adjusts its drive.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_analog.c",
      "lines": "390",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_analog.c#L390"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "ANALOG engine selected"
   },
   {
    "mode": "edit_3",
    "gesture": "turn",
    "short_label": "ANALOG SUB",
    "action": "With ANALOG selected, adjusts its sub level.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_analog.c",
      "lines": "394",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_analog.c#L394"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "ANALOG engine selected"
   },
   {
    "mode": "edit_4",
    "gesture": "turn",
    "short_label": "ANALOG SDRV",
    "action": "With ANALOG selected, adjusts its voice saturation drive.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_analog.c",
      "lines": "398",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_analog.c#L398"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "ANALOG engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "ATK",
    "action": "With ANALOG selected, adjusts the selected synth track’s attack time.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_analog.c",
      "lines": "381-403",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_analog.c#L381-L403"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "77",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L77"
     }
    ],
    "when": "ANALOG engine selected"
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "DIGITAL R3",
    "action": "With DIGITAL selected, adjusts its operator 3 ratio.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_digital.c",
      "lines": "142",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_digital.c#L142"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "DIGITAL engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "DIGITAL FB",
    "action": "With DIGITAL selected, adjusts its feedback.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_digital.c",
      "lines": "146",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_digital.c#L146"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "DIGITAL engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "DIGITAL FB",
    "action": "With DIGITAL selected, adjusts its feedback.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_digital.c",
      "lines": "146",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_digital.c#L146"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     }
    ],
    "when": "DIGITAL engine selected"
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "WHEEL BODY",
    "action": "With WHEEL selected, adjusts its middle drawbars.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_drawbar.c",
      "lines": "295",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_drawbar.c#L295"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "WHEEL engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "WHEEL DRV",
    "action": "With WHEEL selected, adjusts its drive.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_drawbar.c",
      "lines": "299",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_drawbar.c#L299"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "WHEEL engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "WHEEL DRV",
    "action": "With WHEEL selected, adjusts its drive.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_drawbar.c",
      "lines": "299",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_drawbar.c#L299"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     }
    ],
    "when": "WHEEL engine selected"
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "FM6 MLVL",
    "action": "With FM6 selected, adjusts its modulator level offset.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_fm6.c",
      "lines": "400",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_fm6.c#L400"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "FM6 engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "FM6 DTUN",
    "action": "With FM6 selected, adjusts its voice detune.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_fm6.c",
      "lines": "404",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_fm6.c#L404"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "FM6 engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "FM6 MEG",
    "action": "With FM6 selected, adjusts its modulator envelope offset.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_fm6.c",
      "lines": "402",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_fm6.c#L402"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     }
    ],
    "when": "FM6 engine selected"
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "VOICE TALK",
    "action": "With VOICE selected, adjusts its vowel movement time.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_formant.c",
      "lines": "233",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_formant.c#L233"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "VOICE engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "VOICE Q",
    "action": "With VOICE selected, adjusts its formant resonance.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_formant.c",
      "lines": "237",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_formant.c#L237"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "VOICE engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "VOICE BRTH",
    "action": "With VOICE selected, adjusts its breath level.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_formant.c",
      "lines": "236",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_formant.c#L236"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     }
    ],
    "when": "VOICE engine selected"
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "GRAIN SIZE",
    "action": "With GRAIN selected, adjusts its grain size.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_grain.c",
      "lines": "447",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_grain.c#L447"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "GRAIN engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "GRAIN RAND",
    "action": "With GRAIN selected, adjusts its randomness.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_grain.c",
      "lines": "451",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_grain.c#L451"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "GRAIN engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "GRAIN DENS",
    "action": "With GRAIN selected, adjusts its density.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_grain.c",
      "lines": "448",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_grain.c#L448"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     }
    ],
    "when": "GRAIN engine selected"
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "LOFI DUTY",
    "action": "With LOFI selected, adjusts pulse duty or chooses a wave table when WAVE is WRAM.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_lofi.c",
      "lines": "223",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_lofi.c#L223"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_lofi.c",
      "lines": "49-61",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_lofi.c#L49-L61"
     }
    ],
    "when": "LOFI engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "LOFI ARP",
    "action": "With LOFI selected, adjusts its chip arpeggio.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_lofi.c",
      "lines": "227",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_lofi.c#L227"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_lofi.c",
      "lines": "49-61",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_lofi.c#L49-L61"
     }
    ],
    "when": "LOFI engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "LOFI CRSH",
    "action": "With LOFI selected, adjusts crush or chooses the stepped envelope when CHIP is STEP.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_lofi.c",
      "lines": "224",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_lofi.c#L224"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_lofi.c",
      "lines": "49-61",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_lofi.c#L49-L61"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     }
    ],
    "when": "LOFI engine selected"
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "NOISE FREQ",
    "action": "With NOISE selected, adjusts its filter frequency.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_noise.c",
      "lines": "382",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_noise.c#L382"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_noise.c",
      "lines": "66-74",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_noise.c#L66-L74"
     }
    ],
    "when": "NOISE engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "NOISE DRFT",
    "action": "With NOISE selected, adjusts its drift.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_noise.c",
      "lines": "386",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_noise.c#L386"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_noise.c",
      "lines": "66-74",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_noise.c#L66-L74"
     }
    ],
    "when": "NOISE engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "NOISE COLR",
    "action": "With NOISE selected, adjusts its noise colour.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_noise.c",
      "lines": "381",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_noise.c#L381"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_noise.c",
      "lines": "66-74",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_noise.c#L66-L74"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     }
    ],
    "when": "NOISE engine selected"
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "PHASE DCW",
    "action": "With PHASE selected, adjusts its phase distortion depth.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_phase.c",
      "lines": "189",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_phase.c#L189"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "PHASE engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "PHASE SUB",
    "action": "With PHASE selected, adjusts its sub level.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_phase.c",
      "lines": "193",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_phase.c#L193"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "PHASE engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "PHASE DTN",
    "action": "With PHASE selected, adjusts its oscillator detune.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_phase.c",
      "lines": "191",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_phase.c#L191"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     }
    ],
    "when": "PHASE engine selected"
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "PHYS BRIT",
    "action": "With PHYS selected, adjusts its brightness.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_phys.c",
      "lines": "296",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_phys.c#L296"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_phys.c",
      "lines": "61-74",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_phys.c#L61-L74"
     }
    ],
    "when": "PHYS engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "PHYS BOW",
    "action": "With PHYS selected, adjusts bowing, membrane bend for MEMB, or buzz for SYMP.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_phys.c",
      "lines": "300",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_phys.c#L300"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_phys.c",
      "lines": "61-74",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_phys.c#L61-L74"
     }
    ],
    "when": "PHYS engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "PHYS DAMP",
    "action": "With PHYS selected, adjusts its damping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_phys.c",
      "lines": "297",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_phys.c#L297"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_phys.c",
      "lines": "61-74",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_phys.c#L61-L74"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     }
    ],
    "when": "PHYS engine selected"
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "ROBO PULS",
    "action": "With ROBO selected, adjusts VOSIM pulse count, GENDY point count, WALSH width, or SCAN damping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_robo.c",
      "lines": "496",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_robo.c#L496"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_robo.c",
      "lines": "37-67",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_robo.c#L37-L67"
     }
    ],
    "when": "ROBO engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "ROBO CRSH",
    "action": "With ROBO selected, adjusts its crush amount.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_robo.c",
      "lines": "500",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_robo.c#L500"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_robo.c",
      "lines": "37-67",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_robo.c#L37-L67"
     }
    ],
    "when": "ROBO engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "ROBO DRFT",
    "action": "With ROBO selected, adjusts its drift.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_robo.c",
      "lines": "499",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_robo.c#L499"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_robo.c",
      "lines": "37-67",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_robo.c#L37-L67"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     }
    ],
    "when": "ROBO engine selected"
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "SAMPLE BITS",
    "action": "With SAMPLE selected, adjusts its sample bit reduction.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_sample.c",
      "lines": "212",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_sample.c#L212"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "SAMPLE engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "SAMPLE DRV",
    "action": "With SAMPLE selected, adjusts its drive.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_sample.c",
      "lines": "216",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_sample.c#L216"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "SAMPLE engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "ATK",
    "action": "With SAMPLE selected, adjusts the selected synth track’s attack time.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_sample.c",
      "lines": "207-221",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_sample.c#L207-L221"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "77",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L77"
     }
    ],
    "when": "SAMPLE engine selected"
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "TRIO INT3",
    "action": "With TRIO selected, adjusts its oscillator 3 interval.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_trio.c",
      "lines": "380",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_trio.c#L380"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "TRIO engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "TRIO RES",
    "action": "With TRIO selected, adjusts its resonance.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_trio.c",
      "lines": "384",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_trio.c#L384"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "TRIO engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "TRIO PW",
    "action": "With TRIO selected, adjusts its pulse width.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_trio.c",
      "lines": "385",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_trio.c#L385"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     }
    ],
    "when": "TRIO engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "PAN",
    "action": "Adjusts the drum track’s stereo position.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     }
    ],
    "when": "Track 4 is selected as DRUM"
   },
   {
    "mode": "punch_layer",
    "gesture": "turn",
    "short_label": "DUCK",
    "action": "Adjusts kick-driven synth ducking.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "595-603",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L595-L603"
     }
    ],
    "when": "Layer held or locked"
   },
   {
    "mode": "punch_layer",
    "gesture": "turn_while_holding:button_fx",
    "short_label": "DUCK",
    "action": "Adjusts kick-driven synth ducking.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "595-603",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L595-L603"
     }
    ],
    "when": "Layer held or locked"
   },
   {
    "mode": "mix_layer",
    "gesture": "turn",
    "short_label": "TRACK 3 MIX",
    "action": "Adjusts track 3’s level without clearing its mute flag.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "604-606",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L604-L606"
     }
    ],
    "when": "Layer held or locked"
   },
   {
    "mode": "mix_layer",
    "gesture": "turn_while_holding:button_glo",
    "short_label": "TRACK 3 MIX",
    "action": "Adjusts track 3’s level without clearing its mute flag.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "604-606",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L604-L606"
     }
    ],
    "when": "Layer held or locked"
   },
   {
    "mode": "engine_layer",
    "gesture": "turn",
    "short_label": "GLIDE",
    "action": "Adjusts the selected synth’s glide.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "607-625",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L607-L625"
     }
    ],
    "when": "Layer held or locked"
   },
   {
    "mode": "engine_layer",
    "gesture": "turn_while_holding:button_edit",
    "short_label": "GLIDE",
    "action": "Adjusts the selected synth’s glide.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "607-625",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L607-L625"
     }
    ],
    "when": "Layer held or locked"
   },
   {
    "mode": "key_layer",
    "gesture": "turn",
    "short_label": "KEY MAPPING",
    "action": "Chooses OFF, SNAP or WHITE keyboard mapping for the selected synth.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "626-639",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L626-L639"
     }
    ],
    "when": "Layer held or locked"
   },
   {
    "mode": "key_layer",
    "gesture": "turn_while_holding:button_sel",
    "short_label": "KEY MAPPING",
    "action": "Chooses OFF, SNAP or WHITE keyboard mapping for the selected synth.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "626-639",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L626-L639"
     }
    ],
    "when": "Layer held or locked"
   },
   {
    "mode": "steps_layer",
    "gesture": "turn",
    "short_label": "STEP SWING",
    "action": "Adjusts the selected track’s step swing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "640-655",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L640-L655"
     }
    ],
    "when": "No step key held"
   },
   {
    "mode": "steps_layer",
    "gesture": "turn_while_holding:button_seq",
    "short_label": "STEP SWING",
    "action": "Adjusts the selected track’s step swing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "640-655",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L640-L655"
     }
    ],
    "when": "No step key held"
   },
   {
    "mode": "steps_layer",
    "gesture": "turn",
    "short_label": "CHANCE",
    "action": "Sets every populated held step’s chance to 100, 75, 50 or 25 percent and keeps the steps when released.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "253-275",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L253-L275"
     }
    ],
    "when": "At least one step key is held"
   },
   {
    "mode": "engine_layer",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing for the drum track in this column.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "607-613",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L607-L613"
     }
    ],
    "when": "Selected track 4 is DRUM"
   },
   {
    "mode": "key_layer",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing for the drum track in this column.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "626-639",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L626-L639"
     }
    ],
    "when": "Selected track 4 is DRUM"
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_lfo",
    "short_label": "TEMPORARY",
    "action": "Captures up to sixteen ordinary page or HOME values until LFO is released, while PROJECT LOAD/SAVE, TOOLS CLEAR/INIT, USER actions, KIT/BEAT changes, browsing, steps, TRACKS and performance-layer knobs keep their normal lasting effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "264-294",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L264-L294"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "374-376",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L374-L376"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "730-736",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L730-L736"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "266-282",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L266-L282"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "331-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L331-L420"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing while the menu is open.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "155-235",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L155-L235"
     }
    ]
   },
   {
    "mode": "about",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing on ABOUT.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "155-235",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L155-L235"
     }
    ]
   },
   {
    "mode": "clear_confirm",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing while the clear question is open.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "590-612",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L590-L612"
     }
    ]
   },
   {
    "mode": "drum_unavailable",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing on this unavailable drum page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "451-494",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L451-L494"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "303-304",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L303-L304"
     }
    ]
   },
   {
    "mode": "env",
    "gesture": "turn",
    "short_label": "-",
    "action": "Has no audible effect on FM6, whose patch envelopes control the sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_fm6.c",
      "lines": "15-27",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_fm6.c#L15-L27"
     }
    ],
    "when": "FM6 engine selected"
   },
   {
    "mode": "env_dest",
    "gesture": "turn",
    "short_label": "-",
    "action": "Has no audible effect on FM6, whose patch envelopes control the sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_fm6.c",
      "lines": "15-27",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_fm6.c#L15-L27"
     }
    ],
    "when": "FM6 engine selected"
   },
   {
    "mode": "calibration",
    "gesture": "turn",
    "short_label": "TEACH TURN",
    "action": "When prompted for this encoder, teaches its clockwise direction and position, with settings checked for saving after calibration finishes or times out.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "775-807",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L775-L807"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/main.c",
      "lines": "233-239",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/main.c#L233-L239"
     }
    ]
   },
   {
    "mode": "midi_learn",
    "gesture": "turn",
    "short_label": "LEARN TARGET",
    "action": "Edits and selects this track or engine parameter for the next eligible MIDI CC, replacing that CC’s or parameter’s old assignment and saving preferences immediately if stopped or once playback stops without another question.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "374-383",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L374-L383"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/midi_learn.c",
      "lines": "51-73",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/midi_learn.c#L51-L73"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/midi_learn.c",
      "lines": "114-159",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/midi_learn.c#L114-L159"
     }
    ],
    "when": "A track or engine parameter page is open; HOME, globals and performance-layer knobs do not select a Learn target"
   }
  ],
  "encoder_knob4": [
   {
    "mode": "env",
    "gesture": "turn",
    "short_label": "RELEASE",
    "action": "Adjusts the selected synth track’s release time, using note lengths when ESYNC is on.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "394",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L394"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "80",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L80"
     }
    ],
    "when": "Selected synth is not FM6"
   },
   {
    "mode": "env_dest",
    "gesture": "turn",
    "short_label": "ENV SYNC",
    "action": "Adjusts tempo-based envelope times on or off.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "395",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L395"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "159",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L159"
     }
    ],
    "when": "Selected synth is not FM6"
   },
   {
    "mode": "lfo",
    "gesture": "turn",
    "short_label": "FADE",
    "action": "Adjusts the LFO fade-in time.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "397",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L397"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "88",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L88"
     }
    ]
   },
   {
    "mode": "lfo_2",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing in this empty column.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "398",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L398"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     }
    ]
   },
   {
    "mode": "lfo_dest",
    "gesture": "turn",
    "short_label": "LFO AMP",
    "action": "Adjusts the LFO’s amplitude amount.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "399",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L399"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "92",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L92"
     }
    ]
   },
   {
    "mode": "mod_1",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing in this empty column.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "400",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L400"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     }
    ]
   },
   {
    "mode": "mod_2",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing in this empty column.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "401",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L401"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     }
    ]
   },
   {
    "mode": "mod_3",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing in this empty column.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "402",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L402"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     }
    ]
   },
   {
    "mode": "mod_4",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing in this empty column.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "403",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L403"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     }
    ]
   },
   {
    "mode": "macro",
    "gesture": "turn",
    "short_label": "MAC4",
    "action": "Adjusts macro 4, shared across the tracks’ modulation matrices.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "404",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L404"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "202",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L202"
     }
    ]
   },
   {
    "mode": "fx",
    "gesture": "turn",
    "short_label": "REVERB SEND",
    "action": "Adjusts the selected synth track’s reverb send.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "405",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L405"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "112",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L112"
     }
    ]
   },
   {
    "mode": "dist",
    "gesture": "turn",
    "short_label": "TRACK FILTER",
    "action": "Adjusts the track filter, with low-pass left and high-pass right.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "406",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L406"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "138",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L138"
     }
    ]
   },
   {
    "mode": "slicer",
    "gesture": "turn",
    "short_label": "SLICER DEPTH",
    "action": "Adjusts the slicer depth.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "408",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L408"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "124",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L124"
     }
    ]
   },
   {
    "mode": "insert",
    "gesture": "turn",
    "short_label": "INSERT C",
    "action": "Adjusts insert C: output level for SOFT/HARD/FOLD/FUZZ, low-pass for CRUSH, or feedback for PHASR/FLANG/CHOR/DISP.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "409",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L409"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "146",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L146"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "207-222",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L207-L222"
     }
    ]
   },
   {
    "mode": "insert_2",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing in this empty column.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "410",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L410"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     }
    ]
   },
   {
    "mode": "dly",
    "gesture": "turn",
    "short_label": "DELAY RETURN",
    "action": "Adjusts the shared delay’s return level.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "411",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L411"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "171",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L171"
     }
    ]
   },
   {
    "mode": "rev_cho",
    "gesture": "turn",
    "short_label": "CHORUS DEPTH",
    "action": "Adjusts the shared chorus depth.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "412",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L412"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "175",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L175"
     }
    ]
   },
   {
    "mode": "reverb",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing in this empty column.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "413",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L413"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "turn",
    "short_label": "TRANSPOSE",
    "action": "Adjusts the selected synth track’s transposition from −24 to +24 semitones.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "414",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L414"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "104",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L104"
     }
    ]
   },
   {
    "mode": "chord",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing in this empty column.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "415",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L415"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     }
    ]
   },
   {
    "mode": "voice",
    "gesture": "turn",
    "short_label": "PRIORITY",
    "action": "Adjusts LAST, LOW or HIGH note priority.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "421",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L421"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "116",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L116"
     }
    ]
   },
   {
    "mode": "voice_2",
    "gesture": "turn",
    "short_label": "MUTE",
    "action": "Adjusts the selected synth track’s mute flag.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "422",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L422"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "120",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L120"
     }
    ]
   },
   {
    "mode": "global",
    "gesture": "turn",
    "short_label": "TUNE",
    "action": "Adjusts the tuning offset from −50 to +50 cents.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "423",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L423"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "167",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L167"
     }
    ]
   },
   {
    "mode": "click",
    "gesture": "turn",
    "short_label": "STEP PREVIEW",
    "action": "Adjusts stopped-step preview on or off, scheduling a preference save once stopped for nonzero choices while zero waits for another settings save.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "424",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L424"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "204",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L204"
     }
    ]
   },
   {
    "mode": "system",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing because this column is display-only.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "426",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L426"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "179",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L179"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "turn",
    "short_label": "TRACK TYPE",
    "action": "Adjusts track 4 as DRUM or SYNTH.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "427",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L427"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "191",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L191"
     }
    ]
   },
   {
    "mode": "master",
    "gesture": "turn",
    "short_label": "TAPE",
    "action": "Adjusts the master’s worn-tape amount.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "428",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L428"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "198",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L198"
     }
    ]
   },
   {
    "mode": "master_2",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing in this empty column.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "429",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L429"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     }
    ]
   },
   {
    "mode": "kit",
    "gesture": "turn",
    "short_label": "FACTORY BEAT",
    "action": "Loads a factory beat into the drum track, asking for a second turn within about 1.5 seconds before replacing a pattern of yours, with no panel undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "430",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L430"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "357-372",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L357-L372"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "turn",
    "short_label": "SAVE PROJECT",
    "action": "Arms on one clockwise turn and immediately writes the working project over slot 1–4 on a second within about 1.5 seconds, with no further question or panel undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "433",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L433"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "183",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L183"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "385-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L385-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "180",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L180"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "621-635",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L621-L635"
     }
    ]
   },
   {
    "mode": "tools",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing in this empty column.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "434",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L434"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "turn",
    "short_label": "ARP GATE",
    "action": "Adjusts the arpeggiator note length.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "435",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L435"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "96",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L96"
     }
    ]
   },
   {
    "mode": "arp_2",
    "gesture": "turn",
    "short_label": "ARP ORDER",
    "action": "Adjusts arpeggiator ordering by pitch or by playing order.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "436",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L436"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "100",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L100"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "turn",
    "short_label": "TENSION RISE",
    "action": "Adjusts the tension rise time: OFF, 1, 2, 4, 8, 16 or 32 bars.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "437",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L437"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "137",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L137"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn",
    "short_label": "STEP FLAGS",
    "action": "Chooses no flags, accent, slide, or accent with slide for this step.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "438",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L438"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "215-261",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L215-L261"
     }
    ]
   },
   {
    "mode": "step_2",
    "gesture": "turn",
    "short_label": "VELOCITY",
    "action": "Sets this populated step’s velocity from 1 to 127.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "439",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L439"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "215-261",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L215-L261"
     }
    ]
   },
   {
    "mode": "pattern",
    "gesture": "turn",
    "short_label": "STEP GATE",
    "action": "Adjusts the selected track’s step gate length.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "440",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L440"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "108",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L108"
     }
    ]
   },
   {
    "mode": "vivo",
    "gesture": "turn",
    "short_label": "MEM",
    "action": "Adjusts the VIVO probability memory.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "441",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L441"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "152",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L152"
     }
    ]
   },
   {
    "mode": "vivo_2",
    "gesture": "turn",
    "short_label": "VIVO SEED",
    "action": "Adjusts the VIVO random seed.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "442",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L442"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "156",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L156"
     }
    ]
   },
   {
    "mode": "vivo_3",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing in this empty column.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "443",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L443"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "296-312",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L312"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "720-737",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L720-L737"
     }
    ]
   },
   {
    "mode": "tracks",
    "gesture": "turn",
    "short_label": "PAN",
    "action": "Adjusts the selected track’s stereo position.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "444",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L444"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "173-203",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L173-L203"
     }
    ]
   },
   {
    "mode": "presets",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing on PRESETS.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "313-329",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L313-L329"
     }
    ]
   },
   {
    "mode": "user",
    "gesture": "turn",
    "short_label": "SAVE SOUND",
    "action": "Arms on one clockwise turn and saves the selected synth sound on a second within about 1.5 seconds, immediately rewriting its whole bank of sixteen without panel undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "331-348",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L331-L348"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/upreset.c",
      "lines": "475-501",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/upreset.c#L475-L501"
     }
    ]
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "ANALOG NOIS",
    "action": "With ANALOG selected, adjusts its noise level.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_analog.c",
      "lines": "387",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_analog.c#L387"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "ANALOG engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "ANALOG KTR",
    "action": "With ANALOG selected, adjusts its filter key tracking.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_analog.c",
      "lines": "391",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_analog.c#L391"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "ANALOG engine selected"
   },
   {
    "mode": "edit_3",
    "gesture": "turn",
    "short_label": "ANALOG DRFT",
    "action": "With ANALOG selected, adjusts its drift.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_analog.c",
      "lines": "395",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_analog.c#L395"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "ANALOG engine selected"
   },
   {
    "mode": "edit_4",
    "gesture": "turn",
    "short_label": "ANALOG SPOS",
    "action": "With ANALOG selected, adjusts its saturation before or after the filter.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_analog.c",
      "lines": "399",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_analog.c#L399"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "ANALOG engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "REL",
    "action": "With ANALOG selected, adjusts the selected synth track’s release time.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_analog.c",
      "lines": "381-403",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_analog.c#L381-L403"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "80",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L80"
     }
    ],
    "when": "ANALOG engine selected"
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "DIGITAL R4",
    "action": "With DIGITAL selected, adjusts its operator 4 ratio.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_digital.c",
      "lines": "143",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_digital.c#L143"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "DIGITAL engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing in this unused column.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_digital.c",
      "lines": "147",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_digital.c#L147"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "DIGITAL engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "REL",
    "action": "With DIGITAL selected, adjusts the selected synth track’s release time.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_digital.c",
      "lines": "137-151",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_digital.c#L137-L151"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "80",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L80"
     }
    ],
    "when": "DIGITAL engine selected"
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "WHEEL TOP",
    "action": "With WHEEL selected, adjusts its upper drawbars.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_drawbar.c",
      "lines": "296",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_drawbar.c#L296"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "WHEEL engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "WHEEL ROTR",
    "action": "With WHEEL selected, adjusts its rotary effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_drawbar.c",
      "lines": "300",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_drawbar.c#L300"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "WHEEL engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "WHEEL ROTR",
    "action": "With WHEEL selected, adjusts its rotary effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_drawbar.c",
      "lines": "300",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_drawbar.c#L300"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     }
    ],
    "when": "WHEEL engine selected"
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "FM6 MRAT",
    "action": "With FM6 selected, adjusts its modulator ratio offset.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_fm6.c",
      "lines": "401",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_fm6.c#L401"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "FM6 engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "FM6 PTCH",
    "action": "With FM6 selected, adjusts its FM6 patch, from factory F1–F8 and the two imported banks.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_fm6.c",
      "lines": "405",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_fm6.c#L405"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "FM6 engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "FM6 PTCH",
    "action": "With FM6 selected, adjusts its FM6 patch, from factory F1–F8 and the two imported banks.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_fm6.c",
      "lines": "405",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_fm6.c#L405"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     }
    ],
    "when": "FM6 engine selected"
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "VOICE SHIFT",
    "action": "With VOICE selected, adjusts its formant shift.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_formant.c",
      "lines": "234",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_formant.c#L234"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "VOICE engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "VOICE RAND",
    "action": "With VOICE selected, adjusts its randomness.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_formant.c",
      "lines": "238",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_formant.c#L238"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "VOICE engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "VOICE TALK",
    "action": "With VOICE selected, adjusts its vowel movement time.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_formant.c",
      "lines": "233",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_formant.c#L233"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     }
    ],
    "when": "VOICE engine selected"
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "GRAIN DENS",
    "action": "With GRAIN selected, adjusts its density.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_grain.c",
      "lines": "448",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_grain.c#L448"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "GRAIN engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "GRAIN TONE",
    "action": "With GRAIN selected, adjusts its tone.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_grain.c",
      "lines": "452",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_grain.c#L452"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "GRAIN engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "GRAIN SPRD",
    "action": "With GRAIN selected, adjusts its grain spread.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_grain.c",
      "lines": "450",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_grain.c#L450"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     }
    ],
    "when": "GRAIN engine selected"
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "LOFI CRSH",
    "action": "With LOFI selected, adjusts crush or chooses the stepped envelope when CHIP is STEP.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_lofi.c",
      "lines": "224",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_lofi.c#L224"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_lofi.c",
      "lines": "49-61",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_lofi.c#L49-L61"
     }
    ],
    "when": "LOFI engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "LOFI TONE",
    "action": "With LOFI selected, adjusts its tone.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_lofi.c",
      "lines": "228",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_lofi.c#L228"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_lofi.c",
      "lines": "49-61",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_lofi.c#L49-L61"
     }
    ],
    "when": "LOFI engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "REL",
    "action": "With LOFI selected, adjusts the selected synth track’s release time.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_lofi.c",
      "lines": "218-232",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_lofi.c#L218-L232"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "80",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L80"
     }
    ],
    "when": "LOFI engine selected"
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "NOISE RES",
    "action": "With NOISE selected, adjusts its resonance.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_noise.c",
      "lines": "383",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_noise.c#L383"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_noise.c",
      "lines": "66-74",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_noise.c#L66-L74"
     }
    ],
    "when": "NOISE engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "NOISE CRSH",
    "action": "With NOISE selected, adjusts crushing for ANLG/DUST/COMB, clock pitch for LFSR/META, or the division for MOTR.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_noise.c",
      "lines": "387",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_noise.c#L387"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_noise.c",
      "lines": "66-74",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_noise.c#L66-L74"
     }
    ],
    "when": "NOISE engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "REL",
    "action": "With NOISE selected, adjusts the selected synth track’s release time.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_noise.c",
      "lines": "376-397",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_noise.c#L376-L397"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "80",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L80"
     }
    ],
    "when": "NOISE engine selected"
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "PHASE ENV",
    "action": "With PHASE selected, adjusts its distortion envelope amount.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_phase.c",
      "lines": "190",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_phase.c#L190"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "PHASE engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing in this unused column.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_phase.c",
      "lines": "194",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_phase.c#L194"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "PHASE engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "REL",
    "action": "With PHASE selected, adjusts the selected synth track’s release time.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_phase.c",
      "lines": "184-198",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_phase.c#L184-L198"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "80",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L80"
     }
    ],
    "when": "PHASE engine selected"
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "PHYS DAMP",
    "action": "With PHYS selected, adjusts its damping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_phys.c",
      "lines": "297",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_phys.c#L297"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_phys.c",
      "lines": "61-74",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_phys.c#L61-L74"
     }
    ],
    "when": "PHYS engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "PHYS EXC",
    "action": "With PHYS selected, adjusts its exciter output blend.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_phys.c",
      "lines": "301",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_phys.c#L301"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_phys.c",
      "lines": "61-74",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_phys.c#L61-L74"
     }
    ],
    "when": "PHYS engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "PHYS POS",
    "action": "With PHYS selected, adjusts excitation position or sympathetic-string level for SYMP.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_phys.c",
      "lines": "298",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_phys.c#L298"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_phys.c",
      "lines": "61-74",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_phys.c#L61-L74"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     }
    ],
    "when": "PHYS engine selected"
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "ROBO DCAY",
    "action": "With ROBO selected, adjusts VOSIM decay, GENDY time walk, WALSH blend, or SCAN centring.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_robo.c",
      "lines": "497",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_robo.c#L497"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_robo.c",
      "lines": "37-67",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_robo.c#L37-L67"
     }
    ],
    "when": "ROBO engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "ROBO TONE",
    "action": "With ROBO selected, adjusts its tone.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_robo.c",
      "lines": "501",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_robo.c#L501"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_robo.c",
      "lines": "37-67",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_robo.c#L37-L67"
     }
    ],
    "when": "ROBO engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "ROBO TONE",
    "action": "With ROBO selected, adjusts its tone.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_robo.c",
      "lines": "501",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_robo.c#L501"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_robo.c",
      "lines": "37-67",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_robo.c#L37-L67"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     }
    ],
    "when": "ROBO engine selected"
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "SAMPLE LOOP",
    "action": "With SAMPLE selected, adjusts its sample looping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_sample.c",
      "lines": "213",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_sample.c#L213"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "SAMPLE engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing in this unused column.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_sample.c",
      "lines": "217",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_sample.c#L217"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "SAMPLE engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "REL",
    "action": "With SAMPLE selected, adjusts the selected synth track’s release time.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_sample.c",
      "lines": "207-221",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_sample.c#L207-L221"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "80",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L80"
     }
    ],
    "when": "SAMPLE engine selected"
   },
   {
    "mode": "edit_1",
    "gesture": "turn",
    "short_label": "TRIO DTN",
    "action": "With TRIO selected, adjusts its oscillator detune.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_trio.c",
      "lines": "381",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_trio.c#L381"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "TRIO engine selected"
   },
   {
    "mode": "edit_2",
    "gesture": "turn",
    "short_label": "TRIO PW",
    "action": "With TRIO selected, adjusts its pulse width.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_trio.c",
      "lines": "385",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_trio.c#L385"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     }
    ],
    "when": "TRIO engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "TRIO INT2",
    "action": "With TRIO selected, adjusts its oscillator 2 interval.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_trio.c",
      "lines": "379",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_trio.c#L379"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "225-246",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L225-L246"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "350-377",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L350-L377"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     }
    ],
    "when": "TRIO engine selected"
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "LENGTH",
    "action": "Sets the drum pattern length from 1 to 64 steps.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "720-738",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L720-L738"
     }
    ],
    "when": "Track 4 is selected as DRUM"
   },
   {
    "mode": "punch_layer",
    "gesture": "turn",
    "short_label": "TAPE",
    "action": "Adjusts the master worn-tape amount.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "595-603",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L595-L603"
     }
    ],
    "when": "Layer held or locked"
   },
   {
    "mode": "punch_layer",
    "gesture": "turn_while_holding:button_fx",
    "short_label": "TAPE",
    "action": "Adjusts the master worn-tape amount.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "595-603",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L595-L603"
     }
    ],
    "when": "Layer held or locked"
   },
   {
    "mode": "mix_layer",
    "gesture": "turn",
    "short_label": "TRACK 4 MIX",
    "action": "Adjusts track 4’s level without clearing its mute flag.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "604-606",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L604-L606"
     }
    ],
    "when": "Layer held or locked"
   },
   {
    "mode": "mix_layer",
    "gesture": "turn_while_holding:button_glo",
    "short_label": "TRACK 4 MIX",
    "action": "Adjusts track 4’s level without clearing its mute flag.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "604-606",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L604-L606"
     }
    ],
    "when": "Layer held or locked"
   },
   {
    "mode": "engine_layer",
    "gesture": "turn",
    "short_label": "LEVEL",
    "action": "Adjusts the selected synth’s level or the drum level on track 4.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "607-625",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L607-L625"
     }
    ],
    "when": "Layer held or locked"
   },
   {
    "mode": "engine_layer",
    "gesture": "turn_while_holding:button_edit",
    "short_label": "LEVEL",
    "action": "Adjusts the selected synth’s level or the drum level on track 4.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "607-625",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L607-L625"
     }
    ],
    "when": "Layer held or locked"
   },
   {
    "mode": "key_layer",
    "gesture": "turn",
    "short_label": "TRANSPOSE",
    "action": "Transposes the selected synth track from −24 to +24 semitones.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "626-639",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L626-L639"
     }
    ],
    "when": "Layer held or locked"
   },
   {
    "mode": "key_layer",
    "gesture": "turn_while_holding:button_sel",
    "short_label": "TRANSPOSE",
    "action": "Transposes the selected synth track from −24 to +24 semitones.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "626-639",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L626-L639"
     }
    ],
    "when": "Layer held or locked"
   },
   {
    "mode": "steps_layer",
    "gesture": "turn",
    "short_label": "LENGTH",
    "action": "Sets the selected pattern length from 1 to 64 steps.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "640-655",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L640-L655"
     }
    ],
    "when": "No step key held"
   },
   {
    "mode": "steps_layer",
    "gesture": "turn_while_holding:button_seq",
    "short_label": "LENGTH",
    "action": "Sets the selected pattern length from 1 to 64 steps.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "640-655",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L640-L655"
     }
    ],
    "when": "No step key held"
   },
   {
    "mode": "steps_layer",
    "gesture": "turn",
    "short_label": "STEP FLAGS",
    "action": "Chooses accent and slide flags for every populated held step and keeps the steps when released.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "253-275",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L253-L275"
     }
    ],
    "when": "At least one step key is held"
   },
   {
    "mode": "key_layer",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing for the drum track in this column.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "626-639",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L626-L639"
     }
    ],
    "when": "Selected track 4 is DRUM"
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_lfo",
    "short_label": "TEMPORARY",
    "action": "Captures up to sixteen ordinary page or HOME values until LFO is released, while PROJECT LOAD/SAVE, TOOLS CLEAR/INIT, USER actions, KIT/BEAT changes, browsing, steps, TRACKS and performance-layer knobs keep their normal lasting effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "264-294",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L264-L294"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "374-376",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L374-L376"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "730-736",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L730-L736"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "266-282",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L266-L282"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "331-420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L331-L420"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing while the menu is open.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "155-235",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L155-L235"
     }
    ]
   },
   {
    "mode": "about",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing on ABOUT.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "155-235",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L155-L235"
     }
    ]
   },
   {
    "mode": "clear_confirm",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing while the clear question is open.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "590-612",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L590-L612"
     }
    ]
   },
   {
    "mode": "drum_unavailable",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing on this unavailable drum page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "451-494",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L451-L494"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "303-304",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L303-L304"
     }
    ]
   },
   {
    "mode": "env",
    "gesture": "turn",
    "short_label": "-",
    "action": "Has no audible effect on FM6, whose patch envelopes control the sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_fm6.c",
      "lines": "15-27",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_fm6.c#L15-L27"
     }
    ],
    "when": "FM6 engine selected"
   },
   {
    "mode": "env_dest",
    "gesture": "turn",
    "short_label": "-",
    "action": "Has no audible effect on FM6, whose patch envelopes control the sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/eng_fm6.c",
      "lines": "15-27",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_fm6.c#L15-L27"
     }
    ],
    "when": "FM6 engine selected"
   },
   {
    "mode": "calibration",
    "gesture": "turn",
    "short_label": "TEACH TURN",
    "action": "When prompted for this encoder, teaches its clockwise direction and position, with settings checked for saving after calibration finishes or times out.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "775-807",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L775-L807"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/main.c",
      "lines": "233-239",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/main.c#L233-L239"
     }
    ]
   },
   {
    "mode": "midi_learn",
    "gesture": "turn",
    "short_label": "LEARN TARGET",
    "action": "Edits and selects this track or engine parameter for the next eligible MIDI CC, replacing that CC’s or parameter’s old assignment and saving preferences immediately if stopped or once playback stops without another question.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "374-383",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L374-L383"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/midi_learn.c",
      "lines": "51-73",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/midi_learn.c#L51-L73"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/midi_learn.c",
      "lines": "114-159",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/midi_learn.c#L114-L159"
     }
    ],
    "when": "A track or engine parameter page is open; HOME, globals and performance-layer knobs do not select a Learn target"
   }
  ],
  "encoder_algorithm": [
   {
    "mode": "any",
    "gesture": "turn",
    "short_label": "TRACK",
    "action": "Selects track 1–4, except in the menu, a clear question, or the SEQ layer with step keys held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "590-612",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L590-L612"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "678-703",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L678-L703"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "turn",
    "short_label": "LOCK TARGET",
    "action": "Chooses which sound parameter the held steps will lock.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "314-351",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L314-L351"
     }
    ],
    "when": "At least one step key is held"
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing while the menu is open.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "155-235",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L155-L235"
     }
    ]
   },
   {
    "mode": "about",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing on ABOUT.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "155-235",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L155-L235"
     }
    ]
   },
   {
    "mode": "clear_confirm",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing while the clear question is open.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "590-612",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L590-L612"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "turn",
    "short_label": "TEACH TURN",
    "action": "When prompted for this encoder, teaches its clockwise direction and position, with settings checked for saving after calibration finishes or times out.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "775-807",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L775-L807"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/main.c",
      "lines": "233-239",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/main.c#L233-L239"
     }
    ]
   }
  ],
  "encoder_presets": [
   {
    "mode": "any",
    "gesture": "turn",
    "short_label": "BROWSE",
    "action": "On HOME, PRESETS or TRACKS, browses synth sounds or drum kits, with a kit’s beat replacing an empty or untouched factory drum pattern without a question.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "680-701",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L680-L701"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui.c",
      "lines": "269-302",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui.c#L269-L302"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_home",
    "short_label": "GROUP JUMP",
    "action": "With a synth selected on HOME, PRESETS or TRACKS, jumps between preset groups within the category and consumes the HOME tap.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "680-700",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L680-L700"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing on other parameter pages so a turn cannot replace the sound being edited.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "680-701",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L680-L701"
     }
    ],
    "when": "Outside HOME, PRESETS, TRACKS, menu and held-step editing"
   },
   {
    "mode": "steps_layer",
    "gesture": "turn",
    "short_label": "LOCK VALUE",
    "action": "Changes that parameter’s lock on every held step and reports NO LOCK LEFT if the lock pool cannot hold all the changes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "314-351",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L314-L351"
     }
    ],
    "when": "At least one step key is held"
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "short_label": "MENU ROW",
    "action": "Moves through the twelve menu rows and cancels an armed NEW PROJECT action.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "166-169",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L166-L169"
     }
    ]
   },
   {
    "mode": "about",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing on ABOUT.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "155-235",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L155-L235"
     }
    ]
   },
   {
    "mode": "clear_confirm",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing while the clear question is open.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "590-612",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L590-L612"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "turn",
    "short_label": "TEACH TURN",
    "action": "When prompted for this encoder, teaches its clockwise direction and position, with settings checked for saving after calibration finishes or times out.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "775-807",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L775-L807"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/main.c",
      "lines": "233-239",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/main.c#L233-L239"
     }
    ]
   }
  ],
  "encoder_select": [
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "TEMPO",
    "action": "Sets the project tempo from 40 to 240 BPM while no performance layer is active.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "706-714",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L706-L714"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "164",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L164"
     }
    ]
   },
   {
    "mode": "mix_layer",
    "gesture": "turn",
    "short_label": "TEMPO",
    "action": "Sets the project tempo from 40 to 240 BPM while the GLO layer is held or locked.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "706-714",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L706-L714"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "164",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L164"
     }
    ]
   },
   {
    "mode": "visualiser",
    "gesture": "turn",
    "short_label": "STYLE",
    "action": "Chooses a visualiser style, scheduling its preference save once stopped.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "704-705",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L704-L705"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_vis.c",
      "lines": "35-40",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_vis.c#L35-L40"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn",
    "short_label": "-",
    "action": "Leaves the tempo unchanged outside HOME and the GLO layer, apart from visualiser style and held-step nudges.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "704-714",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L704-L714"
     }
    ],
    "when": "Outside the menu and clear questions"
   },
   {
    "mode": "steps_layer",
    "gesture": "turn",
    "short_label": "STEP NUDGE",
    "action": "Moves every held step by one sixty-fourth of a step per detent.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "314-351",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L314-L351"
     }
    ],
    "when": "At least one step key is held"
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing while the menu is open.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "155-235",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L155-L235"
     }
    ]
   },
   {
    "mode": "about",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing on ABOUT.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "155-235",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L155-L235"
     }
    ]
   },
   {
    "mode": "clear_confirm",
    "gesture": "turn",
    "short_label": "-",
    "action": "Does nothing while the clear question is open.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "590-612",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L590-L612"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "turn",
    "short_label": "TEACH TURN",
    "action": "When prompted for this encoder, teaches its clockwise direction and position, with settings checked for saving after calibration finishes or times out.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "775-807",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L775-L807"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/main.c",
      "lines": "233-239",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/main.c#L233-L239"
     }
    ]
   }
  ],
  "knob_master": [
   {
    "mode": "any",
    "gesture": "turn",
    "short_label": "VOLUME",
    "action": "Sets the output volume, while USB recording follows it only with USB AUDIO set to MASTER.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/main.c",
      "lines": "267-273",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/main.c#L267-L273"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/audio.c",
      "lines": "23-34",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/audio.c#L23-L34"
     }
    ]
   }
  ],
  "screen": [
   {
    "mode": "env",
    "gesture": "shows",
    "action": "Shows the amplitude envelope with attack, decay, sustain and release controls.",
    "short_label": "ENV",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "394",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L394"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "1029-1113",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L1029-L1113"
     }
    ]
   },
   {
    "mode": "env_dest",
    "gesture": "shows",
    "action": "Shows envelope amounts for filter, pitch and shape, plus envelope tempo sync.",
    "short_label": "ENV DEST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "395",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L395"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "1029-1113",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L1029-L1113"
     }
    ]
   },
   {
    "mode": "lfo",
    "gesture": "shows",
    "action": "Shows the LFO waveform and phase with rate, wave, phase and fade controls.",
    "short_label": "LFO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "397",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L397"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "1029-1113",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L1029-L1113"
     }
    ]
   },
   {
    "mode": "lfo_2",
    "gesture": "shows",
    "action": "Shows LFO tempo sync, retrigger mode and polarity.",
    "short_label": "LFO 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "398",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L398"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "1029-1113",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L1029-L1113"
     }
    ]
   },
   {
    "mode": "lfo_dest",
    "gesture": "shows",
    "action": "Shows LFO amounts for pitch, filter, shape and amplitude.",
    "short_label": "LFO DEST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "399",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L399"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "1029-1113",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L1029-L1113"
     }
    ]
   },
   {
    "mode": "mod_1",
    "gesture": "shows",
    "action": "Shows this matrix slot’s source, destination and amount with a drawing of the routing.",
    "short_label": "MOD 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "400",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L400"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "1029-1113",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L1029-L1113"
     }
    ]
   },
   {
    "mode": "mod_2",
    "gesture": "shows",
    "action": "Shows this matrix slot’s source, destination and amount with a drawing of the routing.",
    "short_label": "MOD 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "401",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L401"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "1029-1113",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L1029-L1113"
     }
    ]
   },
   {
    "mode": "mod_3",
    "gesture": "shows",
    "action": "Shows this matrix slot’s source, destination and amount with a drawing of the routing.",
    "short_label": "MOD 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "402",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L402"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "1029-1113",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L1029-L1113"
     }
    ]
   },
   {
    "mode": "mod_4",
    "gesture": "shows",
    "action": "Shows this matrix slot’s source, destination and amount with a drawing of the routing.",
    "short_label": "MOD 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "403",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L403"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "1029-1113",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L1029-L1113"
     }
    ]
   },
   {
    "mode": "macro",
    "gesture": "shows",
    "action": "Shows four performance macros shared by all tracks.",
    "short_label": "MACRO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "404",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L404"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "1029-1113",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L1029-L1113"
     }
    ]
   },
   {
    "mode": "fx",
    "gesture": "shows",
    "action": "Shows the selected track’s distortion, chorus, delay and reverb amounts.",
    "short_label": "FX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "405",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L405"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "1029-1113",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L1029-L1113"
     }
    ]
   },
   {
    "mode": "dist",
    "gesture": "shows",
    "action": "Shows the selected synth track’s distortion type, amount, ring frequency and track filter.",
    "short_label": "DIST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "406",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L406"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "1029-1113",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L1029-L1113"
     }
    ]
   },
   {
    "mode": "slicer",
    "gesture": "shows",
    "action": "Shows the slicer pattern and position with mode, pattern, rate and depth controls.",
    "short_label": "SLICER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "408",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L408"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "1029-1113",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L1029-L1113"
     }
    ]
   },
   {
    "mode": "insert",
    "gesture": "shows",
    "action": "Shows the selected synth track’s insert type and three controls that follow that type.",
    "short_label": "INSERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "409",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L409"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "1029-1113",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L1029-L1113"
     }
    ]
   },
   {
    "mode": "insert_2",
    "gesture": "shows",
    "action": "Shows the selected synth track’s insert wet level.",
    "short_label": "INSERT 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "410",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L410"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "1029-1113",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L1029-L1113"
     }
    ]
   },
   {
    "mode": "dly",
    "gesture": "shows",
    "action": "Shows shared delay time, feedback, tone and wet level.",
    "short_label": "DLY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "411",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L411"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "1029-1113",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L1029-L1113"
     }
    ]
   },
   {
    "mode": "rev_cho",
    "gesture": "shows",
    "action": "Shows shared reverb size and damping with chorus rate and depth.",
    "short_label": "REV/CHO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "412",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L412"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "1029-1113",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L1029-L1113"
     }
    ]
   },
   {
    "mode": "reverb",
    "gesture": "shows",
    "action": "Shows shared reverb type, size and damping.",
    "short_label": "REVERB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "413",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L413"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "1029-1113",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L1029-L1113"
     }
    ]
   },
   {
    "mode": "scl",
    "gesture": "shows",
    "action": "Shows root, scale, keyboard quantization and transposition with a keyboard drawing.",
    "short_label": "SCL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "414",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L414"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "1029-1113",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L1029-L1113"
     }
    ]
   },
   {
    "mode": "chord",
    "gesture": "shows",
    "action": "Shows chord type, strum time and voice leading.",
    "short_label": "CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "415",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L415"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "1029-1113",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L1029-L1113"
     }
    ]
   },
   {
    "mode": "edit_1",
    "gesture": "shows",
    "action": "Shows up to four parameters from the selected engine with its animated sound picture.",
    "short_label": "EDIT 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "417",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L417"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "1029-1113",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L1029-L1113"
     }
    ]
   },
   {
    "mode": "edit_2",
    "gesture": "shows",
    "action": "Shows up to four parameters from the selected engine with its animated sound picture.",
    "short_label": "EDIT 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "418",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L418"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "1029-1113",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L1029-L1113"
     }
    ]
   },
   {
    "mode": "edit_3",
    "gesture": "shows",
    "action": "Shows up to four parameters from the selected engine with its animated sound picture.",
    "short_label": "EDIT 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "419",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L419"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "1029-1113",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L1029-L1113"
     }
    ]
   },
   {
    "mode": "edit_4",
    "gesture": "shows",
    "action": "Shows up to four parameters from the selected engine with its animated sound picture.",
    "short_label": "EDIT 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "420",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L420"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "1029-1113",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L1029-L1113"
     }
    ]
   },
   {
    "mode": "voice",
    "gesture": "shows",
    "action": "Shows voice mode, glide time, glide mode and note priority.",
    "short_label": "VOICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "421",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L421"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "1029-1113",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L1029-L1113"
     }
    ]
   },
   {
    "mode": "voice_2",
    "gesture": "shows",
    "action": "Shows voice allocation, unison detuning, pan and mute.",
    "short_label": "VOICE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "422",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L422"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "1029-1113",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L1029-L1113"
     }
    ]
   },
   {
    "mode": "global",
    "gesture": "shows",
    "action": "Shows tempo, global swing, clock source and master tuning.",
    "short_label": "GLOBAL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "423",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L423"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "1029-1113",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L1029-L1113"
     }
    ]
   },
   {
    "mode": "click",
    "gesture": "shows",
    "action": "Shows metronome mode and level, count-in length and stopped-step preview.",
    "short_label": "CLICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "424",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L424"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "1029-1113",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L1029-L1113"
     }
    ]
   },
   {
    "mode": "system",
    "gesture": "shows",
    "action": "Shows USB status, outgoing clock, incoming MIDI routing and CPU load.",
    "short_label": "SYSTEM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "426",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L426"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "1029-1113",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L1029-L1113"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "shows",
    "action": "Shows drum MIDI channel, drum level, drum reverb and track 4 type.",
    "short_label": "DRUMS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "427",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L427"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "1029-1113",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L1029-L1113"
     }
    ]
   },
   {
    "mode": "master",
    "gesture": "shows",
    "action": "Shows the shared dust, ducking, DJ filter and tape controls.",
    "short_label": "MASTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "428",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L428"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "1029-1113",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L1029-L1113"
     }
    ]
   },
   {
    "mode": "master_2",
    "gesture": "shows",
    "action": "Shows the shared hum, tape and dust controls.",
    "short_label": "MASTER 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "429",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L429"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "1029-1113",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L1029-L1113"
     }
    ]
   },
   {
    "mode": "kit",
    "gesture": "shows",
    "action": "Shows KIT, LVL, REV and BEAT for drum kit, drum level, drum reverb send and factory beat.",
    "short_label": "KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "430",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L430"
     }
    ]
   },
   {
    "mode": "presets",
    "gesture": "shows",
    "action": "Shows the preset list with its selected sound, category, group and list size.",
    "short_label": "PRESETS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "431",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L431"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "570-597",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L570-L597"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "1255-1267",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L1255-L1267"
     }
    ]
   },
   {
    "mode": "user",
    "gesture": "shows",
    "action": "Shows user sound slots with load, erase and save actions.",
    "short_label": "USER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "432",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L432"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "599-618",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L599-L618"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "1269-1276",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L1269-L1276"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "shows",
    "action": "Shows which of the four project slots contain data and the selected slot’s load and save actions.",
    "short_label": "PROJECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "433",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L433"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "620-636",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L620-L636"
     }
    ]
   },
   {
    "mode": "tools",
    "gesture": "shows",
    "action": "Shows clear-pattern and reset-sound actions.",
    "short_label": "TOOLS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "434",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L434"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "1029-1113",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L1029-L1113"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "shows",
    "action": "Shows arpeggiator mode, division, octave range and gate.",
    "short_label": "ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "435",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L435"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "1029-1113",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L1029-L1113"
     }
    ]
   },
   {
    "mode": "arp_2",
    "gesture": "shows",
    "action": "Shows arp swing, chance, hold and key ordering.",
    "short_label": "ARP 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "436",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L436"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "1029-1113",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L1029-L1113"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "shows",
    "action": "Shows hold, evolution, target tension and ramp length with the four moving walks and present tension.",
    "short_label": "DRONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "437",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L437"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "443-467",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L443-L467"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "shows",
    "action": "Shows the cursor’s step, note, note/tie/rest choice and accent/slide flags above a piano roll.",
    "short_label": "STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "438",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L438"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "1278-1315",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L1278-L1315"
     }
    ]
   },
   {
    "mode": "step_2",
    "gesture": "shows",
    "action": "Shows the cursor’s step, ratchet, chance and velocity above a piano roll.",
    "short_label": "STEP 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "439",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L439"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "1278-1315",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L1278-L1315"
     }
    ]
   },
   {
    "mode": "pattern",
    "gesture": "shows",
    "action": "Shows pattern length, division, swing and gate with the pattern steps.",
    "short_label": "PATTERN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "440",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L440"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "1029-1113",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L1029-L1113"
     }
    ]
   },
   {
    "mode": "vivo",
    "gesture": "shows",
    "action": "Shows pulse count, rotation, density and memory with a ring of the rhythm and recent played steps.",
    "short_label": "VIVO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "441",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L441"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "468-497",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L468-L497"
     }
    ]
   },
   {
    "mode": "vivo_2",
    "gesture": "shows",
    "action": "Shows chance-cycle length, accent cycle, evolution rule and random seed with the rhythm ring.",
    "short_label": "VIVO 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "442",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L442"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "468-497",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L468-L497"
     }
    ]
   },
   {
    "mode": "vivo_3",
    "gesture": "shows",
    "action": "Shows freeze and evolution-loop interval with the rhythm ring.",
    "short_label": "VIVO 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "443",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L443"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "468-497",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L468-L497"
     }
    ]
   },
   {
    "mode": "tracks",
    "gesture": "shows",
    "action": "Shows tempo, bar and beat, the four tracks and their playheads, plus type, level, length and pan for the selected track.",
    "short_label": "TRACKS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "444",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L444"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "1107-1110",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L1107-L1110"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "1210-1236",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L1210-L1236"
     }
    ]
   },
   {
    "mode": "home",
    "gesture": "shows",
    "action": "Shows the output waveform, four home controls and transport, track, octave, USB and battery status.",
    "short_label": "HOME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "45-109",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L45-L109"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "1052-1053",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L1052-L1053"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "1219-1226",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L1219-L1226"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "shows",
    "action": "Shows COLOR, SPEAKER, LIGHTS, KEYS, NOTES, USB AUDIO, MIDI OUT, MIDI IN, MIDI LEARN, 2ND CORE, NEW PROJECT and ABOUT.",
    "short_label": "MENU",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "11-17",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L11-L17"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "85-129",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L85-L129"
     }
    ]
   },
   {
    "mode": "about",
    "gesture": "shows",
    "action": "Shows Jangada’s version, build date, project address, upstream credits and licence notices.",
    "short_label": "ABOUT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "64-83",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L64-L83"
     }
    ]
   },
   {
    "mode": "visualiser",
    "gesture": "shows",
    "action": "Shows the chosen OSC, SONAR, VU, ESTEIRA or MAR animation across the screen.",
    "short_label": "VISUALISER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_vis.c",
      "lines": "2-15",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_vis.c#L2-L15"
     }
    ]
   },
   {
    "mode": "clear_confirm",
    "gesture": "shows",
    "action": "Asks whether to clear the selected pattern or track and names OCT− to cancel and OCT+ to proceed.",
    "short_label": "CLEAR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "1355-1368",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L1355-L1368"
     }
    ]
   },
   {
    "mode": "fm6_import",
    "gesture": "shows",
    "action": "Shows the chosen FM6 bank number while a received cartridge is waiting for SAVE, cancellation or its 15-second timeout.",
    "short_label": "FM6 BANK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/fm6_sysex.c",
      "lines": "113-119",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/fm6_sysex.c#L113-L119"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/fm6_sysex.c",
      "lines": "143-165",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/fm6_sysex.c#L143-L165"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "shows",
    "action": "Shows sixteen punch effects, the active effect or throw, and filter, dust, duck and tape dials.",
    "short_label": "PUNCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "836-864",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L836-L864"
     }
    ]
   },
   {
    "mode": "mix_layer",
    "gesture": "shows",
    "action": "Shows track mute and solo tiles, fill controls, MIDI learn and tap tempo above four track-level dials.",
    "short_label": "MIX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "865-904",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L865-L904"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "shows",
    "action": "Shows sixteen steps with note, ratchet, chance, lock, nudge and fill markings, plus pattern or held-step dials.",
    "short_label": "STEPS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "905-1004",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L905-L1004"
     }
    ]
   },
   {
    "mode": "engine_layer",
    "gesture": "shows",
    "action": "Shows the engine choices and track 4 type, plus the selected synth’s preset, voice, glide and level dials.",
    "short_label": "ENGINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "1006-1051",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L1006-L1051"
     }
    ]
   },
   {
    "mode": "key_layer",
    "gesture": "shows",
    "action": "Shows the white keys’ notes or chords and the root, plus chord, scale, quantization and transpose dials.",
    "short_label": "KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "1053-1097",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L1053-L1097"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "shows",
    "action": "Asks for each named panel button and then a clockwise turn of each named encoder.",
    "short_label": "CALIBRATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "744-779",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L744-L779"
     }
    ]
   },
   {
    "mode": "update_mode",
    "gesture": "shows",
    "action": "Shows a countdown after OCT− and OCT+ have been held for two seconds, then UBOOT after five seconds.",
    "short_label": "UPDATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/main.c",
      "lines": "275-299",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/main.c#L275-L299"
     }
    ]
   },
   {
    "mode": "startup",
    "gesture": "shows",
    "action": "Shows JANGADA while the instrument starts.",
    "short_label": "STARTUP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/main.c",
      "lines": "189-191",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/main.c#L189-L191"
     }
    ]
   },
   {
    "mode": "crash",
    "gesture": "shows",
    "action": "Shows JANGADA CRASH with diagnostic details after a caught fault.",
    "short_label": "CRASH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/main.c",
      "lines": "109-125",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/main.c#L109-L125"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "shows",
    "action": "On the drum track, unavailable synth pages show DRUM TRACK instead of editable sound controls.",
    "short_label": "DRUM TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/params.c",
      "lines": "448-455",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L448-L455"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "1054-1057",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L1054-L1057"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_draw.c",
      "lines": "1228-1231",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_draw.c#L1228-L1231"
     }
    ]
   },
   {
    "mode": "midi_learn",
    "gesture": "shows",
    "short_label": "LEARN STATUS",
    "action": "Shows the parameter waiting for a MIDI CC or its existing assignment in the footer, with LEARN FULL when all sixteen assignments are occupied.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/midi_learn.c",
      "lines": "135-159",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/midi_learn.c#L135-L159"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/midi_learn.c",
      "lines": "177-193",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/midi_learn.c#L177-L193"
     }
    ]
   },
   {
    "mode": "usb_rescue",
    "gesture": "shows",
    "short_label": "USB RESCUE",
    "action": "Shows JANGADA USB RESCUE with USB-install instructions and audio off, or UNKNOWN FLASH when the chip is unrecognized.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/recovery.c",
      "lines": "63-72",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/recovery.c#L63-L72"
     }
    ]
   }
  ]
 },
 "lights": {
  "button_fx": [
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Glows at the chosen LIGHTS level when panel backlighting is on.",
    "short_label": "BACKLIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "146-155",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L146-L155"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights while a FX page is the underlying page.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "28-31",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L28-L31"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "119-121",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L119-L121"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "lit",
    "action": "Lights while this layer is held open by its button.",
    "short_label": "HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "695-699",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L695-L699"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "breathing",
    "action": "Breathes when the layer is locked open unless its page family already holds this light fully on.",
    "short_label": "LOCKED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "695-699",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L695-L699"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "119",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L119"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "149-154",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L149-L154"
     }
    ]
   }
  ],
  "button_sel": [
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Glows at the chosen LIGHTS level when panel backlighting is on.",
    "short_label": "BACKLIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "146-155",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L146-L155"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights while a SCL page is the underlying page.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "28-31",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L28-L31"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "119-121",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L119-L121"
     }
    ]
   },
   {
    "mode": "key_layer",
    "gesture": "lit",
    "action": "Lights while this layer is held open by its button.",
    "short_label": "HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "695-699",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L695-L699"
     }
    ]
   },
   {
    "mode": "key_layer",
    "gesture": "breathing",
    "action": "Breathes when the layer is locked open unless its page family already holds this light fully on.",
    "short_label": "LOCKED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "695-699",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L695-L699"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "119",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L119"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "149-154",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L149-L154"
     }
    ]
   }
  ],
  "button_env": [
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Glows at the chosen LIGHTS level when panel backlighting is on.",
    "short_label": "BACKLIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "146-155",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L146-L155"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights while a ENV page is the underlying page.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "28-31",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L28-L31"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "119-121",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L119-L121"
     }
    ]
   }
  ],
  "button_lfo": [
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Glows at the chosen LIGHTS level when panel backlighting is on.",
    "short_label": "BACKLIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "146-155",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L146-L155"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights while a LFO page is the underlying page.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "28-31",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L28-L31"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "119-121",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L119-L121"
     }
    ]
   }
  ],
  "button_edit": [
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Glows at the chosen LIGHTS level when panel backlighting is on.",
    "short_label": "BACKLIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "146-155",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L146-L155"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights while a EDIT page is the underlying page.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "28-31",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L28-L31"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "119-121",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L119-L121"
     }
    ]
   },
   {
    "mode": "engine_layer",
    "gesture": "lit",
    "action": "Lights while this layer is held open by its button.",
    "short_label": "HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "695-699",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L695-L699"
     }
    ]
   },
   {
    "mode": "engine_layer",
    "gesture": "breathing",
    "action": "Breathes when the layer is locked open unless its page family already holds this light fully on.",
    "short_label": "LOCKED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "695-699",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L695-L699"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "119",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L119"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "149-154",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L149-L154"
     }
    ]
   }
  ],
  "button_glo": [
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Glows at the chosen LIGHTS level when panel backlighting is on.",
    "short_label": "BACKLIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "146-155",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L146-L155"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights while a GLO page is the underlying page.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "28-31",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L28-L31"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "119-121",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L119-L121"
     }
    ]
   },
   {
    "mode": "mix_layer",
    "gesture": "lit",
    "action": "Lights while this layer is held open by its button.",
    "short_label": "HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "695-699",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L695-L699"
     }
    ]
   },
   {
    "mode": "mix_layer",
    "gesture": "breathing",
    "action": "Breathes when the layer is locked open unless its page family already holds this light fully on.",
    "short_label": "LOCKED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "695-699",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L695-L699"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "119",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L119"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "149-154",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L149-L154"
     }
    ]
   }
  ],
  "button_home": [
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Glows at the chosen LIGHTS level when panel backlighting is on.",
    "short_label": "BACKLIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "146-155",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L146-L155"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights while a HOME page is the underlying page.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "28-31",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L28-L31"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "119-121",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L119-L121"
     }
    ]
   }
  ],
  "button_save": [
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Glows at the chosen LIGHTS level when panel backlighting is on.",
    "short_label": "BACKLIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "146-155",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L146-L155"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights while a SAVE page is the underlying page.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "28-31",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L28-L31"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "119-121",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L119-L121"
     }
    ]
   }
  ],
  "button_arp": [
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Glows at the chosen LIGHTS level when panel backlighting is on.",
    "short_label": "BACKLIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "146-155",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L146-L155"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights while a ARP page is the underlying page.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "28-31",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L28-L31"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "119-121",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L119-L121"
     }
    ]
   }
  ],
  "button_seq": [
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Glows at the chosen LIGHTS level when panel backlighting is on.",
    "short_label": "BACKLIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "146-155",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L146-L155"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights while a SEQ page is the underlying page.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "28-31",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L28-L31"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "119-121",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L119-L121"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "lit",
    "action": "Lights while this layer is held open by its button.",
    "short_label": "HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "695-699",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L695-L699"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "breathing",
    "action": "Breathes when the layer is locked open unless its page family already holds this light fully on.",
    "short_label": "LOCKED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "695-699",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L695-L699"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "119",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L119"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "149-154",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L149-L154"
     }
    ]
   }
  ],
  "button_play_stop": [
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Glows at the chosen LIGHTS level when panel backlighting is on.",
    "short_label": "BACKLIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "146-155",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L146-L155"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "blinking",
    "action": "Blinks while the sequencer is playing.",
    "short_label": "PLAYING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "120",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L120"
     }
    ]
   }
  ],
  "button_rec": [
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Glows at the chosen LIGHTS level when panel backlighting is on.",
    "short_label": "BACKLIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "146-155",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L146-L155"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights while a TRACKS page is the underlying page.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "28-31",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L28-L31"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "119-121",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L119-L121"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights while at least one track is armed to record.",
    "short_label": "ARMED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "121",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L121"
     }
    ]
   }
  ],
  "button_oct_down": [
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Glows at the chosen LIGHTS level when panel backlighting is on.",
    "short_label": "BACKLIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "146-155",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L146-L155"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights when the keyboard octave is below zero, except while a clear confirmation is open.",
    "short_label": "OCTAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "122-128",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L122-L128"
     }
    ]
   },
   {
    "mode": "clear_confirm",
    "gesture": "lit",
    "action": "Lights beside the button that cancels the pending clear.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "122-124",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L122-L124"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "lit",
    "action": "Lights while NEW PROJECT is waiting for its second OCT+ press.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "122-124",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L122-L124"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "211-219",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L211-L219"
     }
    ]
   }
  ],
  "button_oct_up": [
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Glows at the chosen LIGHTS level when panel backlighting is on.",
    "short_label": "BACKLIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "146-155",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L146-L155"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights when the keyboard octave is above zero, except while a clear confirmation is open.",
    "short_label": "OCTAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "122-128",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L122-L128"
     }
    ]
   },
   {
    "mode": "clear_confirm",
    "gesture": "breathing",
    "action": "Breathes beside the button that carries out the pending clear.",
    "short_label": "CONFIRM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "122-124",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L122-L124"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "breathing",
    "action": "Breathes while NEW PROJECT is waiting for its second OCT+ press.",
    "short_label": "CONFIRM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "122-124",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L122-L124"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_menu.c",
      "lines": "211-219",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L211-L219"
     }
    ]
   }
  ],
  "key_lights": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Keys light while physically held.",
    "short_label": "PRESSED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "129-144",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L129-L144"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "695-699",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L695-L699"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "lit",
    "action": "With NOTES on and no layer showing, held synth notes or drum hits from the last 100 ms light their matching keys.",
    "short_label": "SOUNDING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "46-74",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L46-L74"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "109-134",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L109-L134"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "With NOTES on under a layer display, held synth notes and recent drum hits glow beneath the brighter layer indications.",
    "short_label": "NOTE GLOW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "109-144",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L109-L144"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "With LIGHTS on, KEYS adds a background glow to the C keys, white keys or selected synth scale, with its root brighter.",
    "short_label": "KEY GUIDE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "77-105",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L77-L105"
     },
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_input.c",
      "lines": "135-144",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L135-L144"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "lit",
    "action": "The white key for the current punch effect is lit.",
    "short_label": "EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "662-668",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L662-L668"
     }
    ]
   },
   {
    "mode": "punch_layer",
    "gesture": "dim",
    "action": "F3, C4, G4 and D5 glow as landmarks for the four screen rows.",
    "short_label": "LANDMARKS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "688-693",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L688-L693"
     }
    ]
   },
   {
    "mode": "mix_layer",
    "gesture": "lit",
    "action": "The first four white keys show tracks whose MUTE switch is off, the next four show solos, G4 shows a current fill, A4 a queued or active fill bar, and G5 stays lit.",
    "short_label": "MIX STATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "669-671",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L669-L671"
     }
    ]
   },
   {
    "mode": "engine_layer",
    "gesture": "lit",
    "action": "The selected engine lights its white key on synth tracks, and G5 lights when track 4 is a synth.",
    "short_label": "ENGINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "672-673",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L672-L673"
     }
    ]
   },
   {
    "mode": "key_layer",
    "gesture": "lit",
    "action": "White keys matching the selected root light up, so a black-key root has no white root marker.",
    "short_label": "ROOT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "674-675",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L674-L675"
     }
    ]
   },
   {
    "mode": "steps_layer",
    "gesture": "lit",
    "action": "White keys show note steps on this page, with the current playhead key inverted during playback.",
    "short_label": "STEPS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zednaked/jangada",
      "ref": "v1.0.1",
      "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
      "path": "firmware/src/ui_layers.c",
      "lines": "676-683",
      "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L676-L683"
     }
    ]
   }
  ]
 },
 "groups": {
  "key_lights": [
   "led_f3",
   "led_fs3",
   "led_g3",
   "led_gs3",
   "led_a3",
   "led_as3",
   "led_b3",
   "led_c4",
   "led_cs4",
   "led_d4",
   "led_ds4",
   "led_e4",
   "led_f4",
   "led_fs4",
   "led_g4",
   "led_gs4",
   "led_a4",
   "led_as4",
   "led_b4",
   "led_c5",
   "led_cs5",
   "led_d5",
   "led_ds5",
   "led_e5",
   "led_f5",
   "led_fs5",
   "led_g5"
  ]
 },
 "switching_note": {
  "kept_on_unit": "Jangada keeps four saved projects, 32 user sounds, 64 FM6 bank voices, three uploaded sample sets, one working autosave and unit preferences; installing it leaves data outside the program and updater areas for its own loaders to accept or reject. From the flash atlas: install (supplied update loader program pass): Compare each program sector; erase/write/verify only when different. Never writes flash head below 4000. Package may extend beyond 93000 but extra bytes are CRC-read only, not written by this pass (Accepted UFW with flash image at least 93000 bytes, valid chip-key app header and expected 1 MiB flash; final package CRC and host acknowledgement finish installation). install (supplied loader update-record cleanup): Scans sector tails from 0xFBF00 down through 0x93F00 and erases only a sector passing the valid update-record test. Jangada’s FM6 halves end at byte 2320 within their sectors, before the final 256 bytes; ordinary saved music is not a cleanup target (After an install, erase only a 4 KiB sector whose last 256 bytes hold a valid update record (marker 0x5441 at +6 and a matching nonzero CRC16 over bytes 2..79): in practice the family’s staging-record sector 0xE4000 and, on a first install from stock, stock’s record sector 0xE8000. Saved music does not hold that record and is not at risk from this cleanup. Jangada’s loader does not skip 0x97000-0xDFFFF). normal application start, before synth startup: At normal start, if any byte of E0000..E0003 or E4F00..E4F07 is not FF, erase all five sectors E0000..E4FFF without checking ownership, header or CRC. Other occupied bytes alone do not trigger cleanup. Requires recognized JEDEC chip. USB Rescue skips this cleanup (either update-area probe is not blank). first ordinary idle after normal start: Default or changed working project may be autosaved even without a music edit; each save writes one alternate sector. Waits at least 20 s from boot/last save, 2.5 s without input, stopped transport, closed menu and silent voices. An early failed boot skips working-music restoration only on a normal warm restart retaining that failure record, which can leave defaults eligible for this autosave; true power-on clears the record and attempts normal restoration, and USB rescue itself does not run autosave (working project checksum differs from remembered autosave checksum and idle conditions pass). normal boot loading only / USB Rescue entry: persist_boot, sample scan, user-bank conversion and FM6 scans do not save or initialize owner data by themselves. USB Rescue does not load settings or clean staging. Later idle autosave and second-core-failure settings writes are separate conditions (no calibration or updater request). What Jangada writes over the previous firmware's data is in overwrites_previous; what the next firmware writes over Jangada's is in when_you_leave.",
  "lost": "Jangada’s saved work uses its own formats, so another firmware need not read it and an older Jangada release need not understand newer projects or user sounds; macro positions and pattern undo history are not saved in projects. From the flash atlas: Other firmwares reading Jangada's data: Felucca reads and uses Jangada's user samples USR1; user samples USR2; user samples USR3 (Only data in this sample slot is read. Other saved work is separate); Rainbow Mode reads and uses Jangada's user samples USR1; user samples USR2; user samples USR3 (Only data in this sample slot is read. Other saved work is separate); Felucca [Salt] reads and uses Jangada's user samples USR1; user samples USR2; user samples USR3 (Slice positions you set in SLICE stay hidden. This firmware has no storage for slice positions); WaveLoop FM-1 reads and uses Jangada's user samples USR1; user samples USR2 (Only data in this sample slot is read. Other saved work is separate; Saved samples may have no slice positions set by you); SLOOP reads and uses Jangada's user samples USR1; user samples USR2; user samples USR3 (Audio loads only if it fits this slot. Sending to or erasing this slot replaces it); SLOOP DX7 Banks reads and uses Jangada's user samples USR1; user samples USR2; user samples USR3 (Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops); SLOOP Floyd FM reads and uses Jangada's user samples USR1; user samples USR2; user samples USR3 (Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops); FM1 Quest reads and uses Jangada's user samples USR1 (USR1 plays only if its audio and zones fit Quest’s 64 KiB slot. Sending into or erasing USR1 replaces it, including holding REC on a readable USR1 in IMPORTER. Sending into or erasing USR2 can damage the end of the old USR1. Extra slice markers are not used here); GHOULBOX reads and uses Jangada's user samples USR1; user samples USR2; user samples USR3; fm1-chord reads and uses Jangada's user samples USR1; user samples USR2; user samples USR3 (Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored); MAKU reads and uses Jangada's user samples USR1; user samples USR2; user samples USR3 (MAKU leaves these sample bytes in place, but its controls use built-in material; these uploaded samples are not available to play here); Skiff reads and uses Jangada's user samples USR1; user samples USR2; user samples USR3 (Skiff uses its own sound engines, so saved loops or slices can play differently); Hortator lists Jangada's user samples USR1; user samples USR2; user samples USR3, but plays them differently (Hortator uses its own one-shot sound engines, so saved loops and slices play differently); ORBIT reads and uses Jangada's user samples USR1; user samples USR2; user samples USR3 (Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules); PIGEON reads and uses Jangada's user samples USR1; user samples USR2; user samples USR3 (Sample audio can be read. Loops and slices may play differently; we have not tested whether they sound the same); winampFM Synth reads and uses Jangada's user samples USR1; user samples USR2; user samples USR3 (Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules); FM1 Move takes over Jangada's preferences, calibration and MIDI LEARN map, converting them (Only some settings are changed to the new format. Your songs are not stored in these settings. Switching back may lose settings); FM1 Move reads and uses Jangada's user samples USR1; user samples USR2; user samples USR3 (Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules); X0X lists Jangada's user samples USR1; user samples USR2; user samples USR3, but plays them differently (Each zone plays as a separate repeating break loop (up to 16 per sample). Key ranges, root notes, loop points and slice markers are not used). What Jangada reads of other firmwares' data: Jangada takes over Hortator's settings and panel calibration, converting them; Jangada reads and uses Felucca's user sample slot USR1; user sample slot USR2; user sample slot USR3; Jangada lists SLOOP's user sample slot USR1; user sample slot USR2; user sample slot USR3, but plays them differently; Jangada reads and uses X0X's break loops slot 1; break loops slot 2; break loops slot 3; Jangada reads and uses GHOULBOX's user sample slot USR1; user sample slot USR2; user sample slot USR3; Jangada reads and uses Hortator's user samples USR1; user samples USR2; user samples USR3; Jangada reads and uses Skiff's user sample USR1; user sample USR2; user sample USR3; Jangada reads and uses Rainbow Mode's User sample USR1 and any slice positions you set in SLICE; User sample USR2 and any slice positions you set in SLICE; User sample USR3 and any slice positions you set in SLICE; Jangada reads and uses MAKU's inherited user sample 1; inherited user sample 2; inherited user sample 3; Jangada takes over Felucca [Salt]'s project 1; project 2; project 3; project 4, converting them (Imported projects use Jangada’s sound engines and defaults, so they can sound different); Jangada reads and uses Felucca [Salt]'s user sample USR1; user sample USR2; user sample USR3; Jangada reads and uses WaveLoop FM-1's user sample USR1; user sample USR2; Jangada reads and uses SLOOP DX7 Banks's user sample USR1; user sample USR2; user sample USR3; Jangada reads and uses SLOOP Floyd FM's user sample slot USR1; user sample slot USR2; user sample slot USR3; Jangada reads and uses FM1 Quest's sample USR1; Jangada reads and uses fm1-chord's uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers; uploaded sample USR3 and optional SLICE markers; Jangada reads and uses ORBIT's sample slot USR1; sample slot USR2; sample slot USR3; Jangada reads and uses PIGEON's user sample USR1 in the older format; user sample USR2 in the older format; user sample USR3 in the older format (This applies only to older sample slots still stored on the FM-1. Pigeon’s current combined sample bank cannot be imported); Jangada reads and uses winampFM Synth's sample USR1; sample USR2; sample USR3; Jangada reads and uses FM1 Move's sample slot USR1; sample slot USR2; sample slot USR3; Jangada converts only older version 1 sounds in this group. Newer sound versions look empty, and saving anywhere in the group drops them from the rewritten group.; Jangada imports only some FM1 Move preferences, and interprets some saved choices differently. Its next preference save removes FM1 Move’s synth kits and MIDI settings.. Everything else of another firmware's looks empty or foreign to the reader.",
  "back_up_first": "Jangada keeps four saved projects, 32 user sounds, 64 FM6 bank voices, three sample sets, your working autosave and unit preferences. Before leaving, stop playback and download Projects > Backup from its editor. The file omits MIDI LEARN assignments, and restoring that file clears them; record those separately. Restore replaces the represented destinations, including clearing empty slots. Older supported backups that omit an FM6 bank leave that bank alone. An interrupted restore can leave a mixture of old and new data; sample uploads destroy the old header before finishing. Current working music is restored in RAM first and written later by autosave.",
  "installer_and_first_start": "Back up in the firmware that made the work before installing or switching. See the switching advice in this section. The installer also erases only sectors holding valid update records; saved music does not hold those records. At ordinary startup, occupied update-area probes cause the entire update area to be cleared without an ownership check or question; a restore journal elsewhere in that area alone does not trigger the cleanup. Starting or failing a firmware-update session can also clear this area. USB rescue entry alone does not write or run startup cleanup. Stock V15 and Baud Girl locations are partly inferred, so their listed risks are possible rather than proven losses.",
  "automatic_working_save": "The first eligible autosave can write default music without an edit, with no question or undo: it waits at least 20 seconds from startup or the last save, 2.5 seconds without input, a stopped transport, a closed menu and silent voices, and writes only when the working music differs from the last successful autosave. Later qualifying autosaves write the other saved copy; idle time alone does not force an unchanged second save. See the switching advice in this section for the affected saved work. Stock V15 and Baud Girl locations are partly inferred, so their listed risks are possible rather than proven losses. After an early failed start, an automatic restart that retains the remembered failure skips loading the old working music and can save defaults over it under those same conditions; USB rescue does not perform that save. Switching the power off and on clears that failure record and attempts to load valid saved working music, but cannot recover an autosave already replaced. Running for 30 seconds also clears the failure record, without reloading music skipped at startup.",
  "settings_overwrites": "A first menu close can save preferences even with no edit when the old preferences were rejected. A style or nonzero CLICK-page preference change, MIDI learning or clearing, backup-preference restore, or returning from calibration can also write them; even cancelled calibration runs the save check. With no accepted preferences, second-core AUTO is the default: a detected second-core misread or job timeout can schedule this write without opening the menu or touching a control. Queued writes run as soon as playback stops; the console colour command writes immediately. There is no ownership question, and no panel undo. See the switching advice in this section for the affected saved work. Replacing an essential X0X settings copy can make X0X reset its whole project when you return; other rejected replacement preferences can make the previous firmware use defaults. Do not count on an older copy surviving.",
  "project_and_user_overwrites": "Saving a numbered project writes that complete slot at once; the panel requires a second clockwise turn within about 1.5 seconds, while direct editor commands ask no device question. There is no saved-project undo. See the switching advice in this section for the affected saved work. A user-sound save or erase rewrites its complete group of sixteen, including records in the other slots: unreadable older records can disappear even when the target slot looked empty. The panel’s second clockwise turn confirms the target action, without a separate question covering the other fifteen. Normal writes refuse a bank recognized as incompatible, but a bad or foreign header can look empty, and explicit backup restore can replace a protected bank. A replacement can make the former firmware reject its project or sound group as empty or unreadable when you return, even if Jangada converted its contents. If X0X needs a replaced sound or pattern-stream part, its return load can reset the whole project, including all patterns, song and motion; that part holds data only when the saved project grew into it. An older usable copy may survive some writes, but is not a backup. Jangada’s project saves, backup restores from the editor or a computer tool, user-sound bank writes and sample writes can also replace ChoralRoot’s legacy sounds and patches, kept for returning to ChoralRoot 0.21 or older.",
  "bank_and_sample_overwrites": "Sending or erasing an FM6 voice writes its group of sixteen, and sending a full bank writes its two groups separately while stopped; a failed second group can leave the first replaced. The editor asks before bank send, while a DX7 bank can write without asking when the chosen FM6 track already points into its destination bank. These writes have no undo. See the switching advice in this section for the affected saved work. Sample uploads or erases are separate: uploading destroys the chosen sample set’s old header at the start and writes the audio it reaches, while erasing clears the whole selected set. The browser asks; commands sent directly do not, and interrupted uploads have no undo. Stock V15 and Baud Girl locations are partly inferred, so their listed risks are possible rather than proven losses.",
  "going_back": "Keep a version-matched backup before returning to an earlier Jangada release; newer project and user-sound records are not a promise that the older release can open them. Another firmware can overwrite Jangada during startup or automatic use, before its first explicit save. Back up in the firmware that made the work before installing or switching. See the switching advice in this section.",
  "evidence": "inferred",
  "evidence_note": "Jangada write locations and timing are read in its own source; overlap consequences are inferred from the supplied atlas and twelve checked storage fragments, without a hardware survival test.",
  "source": [
   {
    "kind": "source",
    "repo": "zednaked/jangada",
    "ref": "v1.0.1",
    "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
    "path": "firmware/src/storage.c",
    "lines": "59-71",
    "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/storage.c#L59-L71"
   },
   {
    "kind": "source",
    "repo": "zednaked/jangada",
    "ref": "v1.0.1",
    "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
    "path": "firmware/src/project.c",
    "lines": "581-736",
    "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L581-L736"
   },
   {
    "kind": "source",
    "repo": "zednaked/jangada",
    "ref": "v1.0.1",
    "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
    "path": "firmware/src/editor_backup.c",
    "lines": "67-184",
    "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/editor_backup.c#L67-L184"
   },
   {
    "kind": "source",
    "repo": "zednaked/jangada",
    "ref": "v1.0.1",
    "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
    "path": "firmware/src/upreset.c",
    "lines": "113-225",
    "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/upreset.c#L113-L225"
   },
   {
    "kind": "source",
    "repo": "zednaked/jangada",
    "ref": "v1.0.1",
    "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
    "path": "firmware/src/upreset.c",
    "lines": "347-369",
    "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/upreset.c#L347-L369"
   },
   {
    "kind": "source",
    "repo": "zednaked/jangada",
    "ref": "v1.0.1",
    "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
    "path": "firmware/src/fm6_sysex.c",
    "lines": "122-165",
    "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/fm6_sysex.c#L122-L165"
   },
   {
    "kind": "source",
    "repo": "zednaked/jangada",
    "ref": "v1.0.1",
    "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
    "path": "firmware/src/ota.c",
    "lines": "399-413",
    "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ota.c#L399-L413"
   },
   {
    "kind": "source",
    "repo": "zednaked/jangada",
    "ref": "v1.0.1",
    "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
    "path": "firmware/loader/ldr_core.c",
    "lines": "91-175",
    "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/loader/ldr_core.c#L91-L175"
   },
   {
    "kind": "source",
    "repo": "zednaked/jangada",
    "ref": "v1.0.1",
    "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
    "path": "firmware/src/recovery.c",
    "lines": "54-62",
    "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/recovery.c#L54-L62"
   },
   {
    "kind": "source",
    "repo": "zednaked/jangada",
    "ref": "v1.0.1",
    "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
    "path": "firmware/src/main.c",
    "lines": "255-259",
    "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/main.c#L255-L259"
   },
   {
    "kind": "source",
    "repo": "zednaked/jangada",
    "ref": "v1.0.1",
    "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
    "path": "firmware/hal/fm1_cpu1.h",
    "lines": "136-141",
    "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/hal/fm1_cpu1.h#L136-L141"
   },
   {
    "kind": "source",
    "repo": "zednaked/jangada",
    "ref": "v1.0.1",
    "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
    "path": "firmware/hal/fm1_cpu1.h",
    "lines": "162-168",
    "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/hal/fm1_cpu1.h#L162-L168"
   },
   {
    "kind": "source",
    "repo": "zednaked/jangada",
    "ref": "v1.0.1",
    "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
    "path": "firmware/src/project.c",
    "lines": "610-612",
    "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L610-L612"
   },
   {
    "kind": "source",
    "repo": "zednaked/jangada",
    "ref": "v1.0.1",
    "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
    "path": "firmware/src/main.c",
    "lines": "364-366",
    "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/main.c#L364-L366"
   },
   {
    "kind": "source",
    "repo": "zednaked/jangada",
    "ref": "v1.0.1",
    "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
    "path": "firmware/src/main.c",
    "lines": "251-254",
    "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/main.c#L251-L254"
   },
   {
    "kind": "source",
    "repo": "zednaked/jangada",
    "ref": "v1.0.1",
    "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
    "path": "firmware/src/project.c",
    "lines": "630-642",
    "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L630-L642"
   }
  ],
  "foreign_layout_sources": "Foreign names and contents come from flash-atlas/atlas.json and the twelve supplied checked storage fragments; owner_risk_coverage in jangada.storage.json ties every directional row to the trigger warning.",
  "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": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 patches of the FM6 user presets",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank) [uses its preset bank]",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. Felucca cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its preset bank]",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking) [uses its preset bank]",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank) [uses its preset bank]",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. Felucca cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank) [uses its preset bank]",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. Felucca cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank) [uses its preset bank]",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. Felucca cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you store a user sound from the editor (does not ask if that slot is empty; writes the whole bank) [uses its preset bank]",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. Felucca cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       }
      ]
     },
     {
      "object": "settings, button calibration, favourites, MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically during use (if the second core fails and playback stops, with AUTO selected by default)",
        "effect": "lost"
       },
       {
        "way": "when you enter power-on hardware calibration (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you learn or clear MIDI CC mappings (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you set screen colours from the USB console (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 1 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 2 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 3 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 4 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user presets 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. Felucca cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. Felucca cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. Felucca cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. Felucca cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you store a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. Felucca cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       }
      ]
     },
     {
      "object": "user presets 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. Felucca cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. Felucca cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. Felucca cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. Felucca cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you store a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. Felucca cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       }
      ]
     },
     {
      "object": "the autosave (the music as you left it)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voice bank B1-B32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Jangada reads user sample slot USR1 until you write over the saved data.",
     "Jangada reads user sample slot USR2 until you write over the saved data.",
     "Jangada reads user sample slot USR3 until you write over the saved data."
    ],
    "owner_text": "At risk by itself: FM6 patches of the FM6 user presets; settings, button calibration, favourites, MIDI LEARN map. At risk when you act: project slot A; project slot B; project slot C; project slot D; user presets 1-16; user presets 17-32; the autosave (the music as you left it); FM6 voice bank B1-B32; user sample slot USR1; user sample slot USR2; user sample slot USR3. Jangada reads user sample slot USR1 until you write over the saved data. Jangada reads user sample slot USR2 until you write over the saved data. Jangada reads user sample slot USR3 until you write over the saved data.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "sloop",
    "name": "SLOOP",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "the music in progress (autosave)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration, song order, SYN1-4 kits, MIDI LEARN, theme and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically during use (if the second core fails and playback stops, with AUTO selected by default)",
        "effect": "lost"
       },
       {
        "way": "when you enter power-on hardware calibration (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you learn or clear MIDI CC mappings (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you set screen colours from the USB console (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section A (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 1 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section B (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 2 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section C (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 3 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section D (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 4 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. SLOOP cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. SLOOP cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. SLOOP cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. SLOOP cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you store a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. SLOOP cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. SLOOP cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. SLOOP cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. SLOOP cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. SLOOP cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you store a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. SLOOP cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       }
      ]
     },
     {
      "object": "FM6 patch bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Jangada reads user sample slot USR1 until you write over the saved data.",
     "Jangada reads user sample slot USR2 until you write over the saved data.",
     "Jangada reads user sample slot USR3 until you write over the saved data."
    ],
    "owner_text": "At risk by itself: the music in progress (autosave); settings, calibration, song order, SYN1-4 kits, MIDI LEARN, theme and favourites. 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); user sounds U01-U16; user sounds U17-U32; FM6 patch bank B1-B27; user sample slot USR4; user sample slot USR1; user sample slot USR2; user sample slot USR3. Jangada reads user sample slot USR1 until you write over the saved data. Jangada reads user sample slot USR2 until you write over the saved data. Jangada reads user sample slot USR3 until you write over the saved data.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "x0x",
    "name": "X0X",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "the whole X0X project (settings, sound, all 32 patterns, song, knob motion)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically during use (if the second core fails and playback stops, with AUTO selected by default)",
        "effect": "lost"
       },
       {
        "way": "when you confirm SAVE for project 1 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you confirm SAVE for project 2 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you confirm SAVE for project 3 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you confirm SAVE for project 4 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you enter power-on hardware calibration (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you learn or clear MIDI CC mappings (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you set screen colours from the USB console (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you store a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "X0X button calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "break loops slot 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "break loops slot 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "break loops slot 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Jangada reads break loops slot 1 until you write over the saved data.",
     "Jangada reads break loops slot 2 until you write over the saved data.",
     "Jangada reads break loops slot 3 until you write over the saved data."
    ],
    "owner_text": "At risk by itself: the whole X0X project (settings, sound, all 32 patterns, song, knob motion). At risk when you act: X0X button calibration; break loops slot 1; break loops slot 2; break loops slot 3. Jangada reads break loops slot 1 until you write over the saved data. Jangada reads break loops slot 2 until you write over the saved data. Jangada reads break loops slot 3 until you write over the saved data.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "jiant",
    "name": "JIANT",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 patches for the FM6 user sounds",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank) [uses its preset bank]",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. JIANT cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its preset bank]",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking) [uses its preset bank]",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank) [uses its preset bank]",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. JIANT cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank) [uses its preset bank]",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. JIANT cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank) [uses its preset bank]",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. JIANT cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you store a user sound from the editor (does not ask if that slot is empty; writes the whole bank) [uses its preset bank]",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. JIANT cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       }
      ]
     },
     {
      "object": "settings, calibration, favourites, MENU options",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically during use (if the second core fails and playback stops, with AUTO selected by default)",
        "effect": "lost"
       },
       {
        "way": "when you enter power-on hardware calibration (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you learn or clear MIDI CC mappings (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you set screen colours from the USB console (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 1 section A (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 1 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 1 section B (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 2 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 1 section C (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 3 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 1 section D (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 4 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 2: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 3: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 4: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "partly lost"
       }
      ]
     },
     {
      "object": "song 5: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 6: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 7: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 8: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "which song is current, every song's rows and scenes",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. JIANT cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. JIANT cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. JIANT cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. JIANT cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you store a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. JIANT cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. JIANT cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. JIANT cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. JIANT cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. JIANT cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you store a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. JIANT cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       }
      ]
     },
     {
      "object": "music in progress (RESTORE LAST)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voice bank B1-B32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: FM6 patches for 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); 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; 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)"
   },
   {
    "from": "melodee",
    "name": "Melodee",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "shared user presets U109-U126",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, factory favourites, calibration, saved template",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically during use (if the second core fails and playback stops, with AUTO selected by default)",
        "effect": "lost"
       },
       {
        "way": "when you enter power-on hardware calibration (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you learn or clear MIDI CC mappings (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you set screen colours from the USB console (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U289-U378",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 1 (asks first or waits for you to turn again)",
        "effect": "partly lost"
       },
       {
        "way": "when you confirm SAVE for project 2 (asks first or waits for you to turn again)",
        "effect": "partly lost"
       },
       {
        "way": "when you confirm SAVE for project 3 (asks first or waits for you to turn again)",
        "effect": "partly lost"
       },
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace)",
        "effect": "partly lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "partly lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "partly lost"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost"
       }
      ]
     },
     {
      "object": "shared user presets U379-U384",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 4 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project A: patterns, song, sounds, motion, recordings",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project B: patterns, song, sounds, motion, recordings",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project C: patterns, song, sounds, motion, recordings",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project D: patterns, song, sounds, motion, recordings",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U145-U288",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U073-U090",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U091-U108",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U001-U018",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U019-U036",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U037-U054",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U055-U072",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: shared user presets U109-U126; settings, factory favourites, calibration, saved template. At risk when you act: shared user presets U289-U378; shared user presets U379-U384; 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; shared user presets U073-U090; shared user presets U091-U108; shared user presets U001-U018; shared user presets U019-U036; shared user presets U037-U054; shared user presets U055-U072.",
    "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": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically during use (if the second core fails and playback stops, with AUTO selected by default)",
        "effect": "lost"
       },
       {
        "way": "when you enter power-on hardware calibration (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you learn or clear MIDI CC mappings (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you set screen colours from the USB console (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FoMni button calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a user sound from the editor (without asking; writes 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": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically during use (if the second core fails and playback stops, with AUTO selected by default)",
        "effect": "lost"
       },
       {
        "way": "when you enter power-on hardware calibration (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you learn or clear MIDI CC mappings (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you set screen colours from the USB console (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "AMB-1 panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a user sound from the editor (without asking; writes 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": "32 imported DX7 voices",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "options, playing setup and panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically during use (if the second core fails and playback stops, with AUTO selected by default)",
        "effect": "lost"
       },
       {
        "way": "when you enter power-on hardware calibration (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you learn or clear MIDI CC mappings (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you set screen colours from the USB console (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank A (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank B (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank C (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank D (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank E (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank F (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank G (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank H (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "last session saved with a global save",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "favourite marks, chord/bass type and filter",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "128 saved sounds with their complete engine patches",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: 32 imported DX7 voices; options, playing setup and panel calibration. At risk when you act: CZ-1 bank A (16 tones); CZ-1 bank B (16 tones); CZ-1 bank C (16 tones); CZ-1 bank D (16 tones); CZ-1 bank E (16 tones); CZ-1 bank F (16 tones); CZ-1 bank G (16 tones); CZ-1 bank H (16 tones); last session saved with a global save; favourite marks, chord/bass type and filter; 128 saved sounds with their complete engine patches; recorded loop 1; recorded loop 2; recorded loop 3; recorded loop 4; recorded loop 5; recorded loop 6; recorded loop 7; recorded loop 8; recorded loop 9; recorded loop 10.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "ghoulbox",
    "name": "GHOULBOX",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 patches for user sounds",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank) [uses its preset bank]",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. GHOULBOX cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its preset bank]",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking) [uses its preset bank]",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank) [uses its preset bank]",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. GHOULBOX cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank) [uses its preset bank]",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. GHOULBOX cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank) [uses its preset bank]",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. GHOULBOX cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you store a user sound from the editor (does not ask if that slot is empty; writes the whole bank) [uses its preset bank]",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. GHOULBOX cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       }
      ]
     },
     {
      "object": "settings and panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically during use (if the second core fails and playback stops, with AUTO selected by default)",
        "effect": "lost"
       },
       {
        "way": "when you enter power-on hardware calibration (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you learn or clear MIDI CC mappings (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you set screen colours from the USB console (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 1 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 2 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 3 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 4 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. GHOULBOX cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. GHOULBOX cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. GHOULBOX cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. GHOULBOX cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you store a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. GHOULBOX cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       }
      ]
     },
     {
      "object": "user sounds 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. GHOULBOX cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. GHOULBOX cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. GHOULBOX cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. GHOULBOX cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you store a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. GHOULBOX cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       }
      ]
     },
     {
      "object": "music in progress (RESTORE LAST)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voice bank B1–B32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Jangada reads user sample slot USR1 until you write over the saved data.",
     "Jangada reads user sample slot USR2 until you write over the saved data.",
     "Jangada reads user sample slot USR3 until you write over the saved data."
    ],
    "owner_text": "At risk by itself: FM6 patches for user sounds; settings and panel calibration. At risk when you act: project A; project B; project C; project D; user sounds 1–16; user sounds 17–32; music in progress (RESTORE LAST); FM6 voice bank B1–B32; user sample slot USR1; user sample slot USR2; user sample slot USR3. Jangada reads user sample slot USR1 until you write over the saved data. Jangada reads user sample slot USR2 until you write over the saved data. Jangada reads user sample slot USR3 until you write over the saved data.",
    "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": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically during use (if the second core fails and playback stops, with AUTO selected by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only if anything is stored where it checks for update data",
        "effect": "lost"
       },
       {
        "way": "when you confirm SAVE for project 1 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you confirm SAVE for project 2 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you confirm SAVE for project 3 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you confirm SAVE for project 4 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace)",
        "effect": "lost"
       },
       {
        "way": "when you enter power-on hardware calibration (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you install Jangada",
        "effect": "lost"
       },
       {
        "way": "when you learn or clear MIDI CC mappings (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you set screen colours from the USB console (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start a firmware install while Jangada is running",
        "effect": "lost"
       },
       {
        "way": "when you store a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Jangada",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Jangada",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Jangada",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Jangada",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Jangada",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Jangada",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Jangada",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Jangada",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Jangada",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Jangada",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 11",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Jangada",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Jangada",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 13",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Jangada",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 14",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Jangada",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 15",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Jangada",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Jangada",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open device preferences",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Jangada",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Program installation overwrites Open USER projects, preferences, the information it needs to read its sample bank and the start of its sample storage. Export each project and read back/export samples with Open before leaving."
    ],
    "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. Program installation overwrites Open USER projects, preferences, the information it needs to read its sample bank and the start of its sample storage. Export each project and read back/export samples with Open before leaving.",
    "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": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically during use (if the second core fails and playback stops, with AUTO selected by default)",
        "effect": "lost"
       },
       {
        "way": "when you enter power-on hardware calibration (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you learn or clear MIDI CC mappings (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you set screen colours from the USB console (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "older stored user bank, if present (Beta4 does not store new edits)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 1 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you confirm SAVE for project 2 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "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).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "hortator",
    "name": "Hortator",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings and panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "changed to the new format: After Jangada saves preferences, Hortator cannot read that new saved copy when you return. It uses its defaults"
       },
       {
        "way": "automatically during use (if the second core fails and playback stops, with AUTO selected by default)",
        "effect": "changed to the new format: After Jangada saves preferences, Hortator cannot read that new saved copy when you return. It uses its defaults"
       },
       {
        "way": "when you enter power-on hardware calibration (without asking)",
        "effect": "changed to the new format: After Jangada saves preferences, Hortator cannot read that new saved copy when you return. It uses its defaults"
       },
       {
        "way": "when you learn or clear MIDI CC mappings (without asking)",
        "effect": "changed to the new format: After Jangada saves preferences, Hortator cannot read that new saved copy when you return. It uses its defaults"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you set screen colours from the USB console (without asking)",
        "effect": "changed to the new format: After Jangada saves preferences, Hortator cannot read that new saved copy when you return. It uses its defaults"
       }
      ]
     },
     {
      "object": "project A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 1 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 2 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 3 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 4 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Jangada reads user samples USR1 until you write over the saved data.",
     "Jangada reads user samples USR2 until you write over the saved data.",
     "Jangada reads user samples USR3 until you write over the saved data."
    ],
    "owner_text": "At risk by itself: settings and panel calibration. At risk when you act: project A; project B; project C; project D; user samples USR1; user samples USR2; user samples USR3. Jangada reads user samples USR1 until you write over the saved data. Jangada reads user samples USR2 until you write over the saved data. Jangada reads user samples USR3 until you write over the saved data.",
    "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": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically during use (if the second core fails and playback stops, with AUTO selected by default)",
        "effect": "lost"
       },
       {
        "way": "when you enter power-on hardware calibration (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you learn or clear MIDI CC mappings (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you set screen colours from the USB console (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "pattern 1",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "ways": [
       {
        "way": "automatically during use (if the second core fails and playback stops, with AUTO selected by default) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "automatically during use [uses 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 enter power-on hardware calibration (without asking) [uses 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 learn or clear MIDI CC mappings (without asking) [uses 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 editor (the computer asks once before restoring the whole backup) [uses 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 to Jangada with a computer tool, without the web editor (without asking) [uses 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 set screen colours from the USB console (without asking) [uses 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": "automatically during use (if the second core fails and playback stops, with AUTO selected by default) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "automatically during use [uses 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 enter power-on hardware calibration (without asking) [uses 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 learn or clear MIDI CC mappings (without asking) [uses 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 editor (the computer asks once before restoring the whole backup) [uses 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 to Jangada with a computer tool, without the web editor (without asking) [uses 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 set screen colours from the USB console (without asking) [uses 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": "automatically during use (if the second core fails and playback stops, with AUTO selected by default) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "automatically during use [uses 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 enter power-on hardware calibration (without asking) [uses 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 learn or clear MIDI CC mappings (without asking) [uses 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 editor (the computer asks once before restoring the whole backup) [uses 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 to Jangada with a computer tool, without the web editor (without asking) [uses 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 set screen colours from the USB console (without asking) [uses 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": "automatically during use (if the second core fails and playback stops, with AUTO selected by default) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "automatically during use [uses 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 enter power-on hardware calibration (without asking) [uses 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 learn or clear MIDI CC mappings (without asking) [uses 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 editor (the computer asks once before restoring the whole backup) [uses 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 to Jangada with a computer tool, without the web editor (without asking) [uses 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 set screen colours from the USB console (without asking) [uses 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": "automatically during use (if the second core fails and playback stops, with AUTO selected by default) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "automatically during use [uses 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 enter power-on hardware calibration (without asking) [uses 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 learn or clear MIDI CC mappings (without asking) [uses 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 editor (the computer asks once before restoring the whole backup) [uses 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 to Jangada with a computer tool, without the web editor (without asking) [uses 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 set screen colours from the USB console (without asking) [uses 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": "automatically during use (if the second core fails and playback stops, with AUTO selected by default) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "automatically during use [uses 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 enter power-on hardware calibration (without asking) [uses 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 learn or clear MIDI CC mappings (without asking) [uses 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 editor (the computer asks once before restoring the whole backup) [uses 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 to Jangada with a computer tool, without the web editor (without asking) [uses 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 set screen colours from the USB console (without asking) [uses 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": "automatically during use (if the second core fails and playback stops, with AUTO selected by default) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "automatically during use [uses 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 enter power-on hardware calibration (without asking) [uses 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 learn or clear MIDI CC mappings (without asking) [uses 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 editor (the computer asks once before restoring the whole backup) [uses 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 to Jangada with a computer tool, without the web editor (without asking) [uses 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 set screen colours from the USB console (without asking) [uses 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": "automatically during use (if the second core fails and playback stops, with AUTO selected by default) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "automatically during use [uses 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 enter power-on hardware calibration (without asking) [uses 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 learn or clear MIDI CC mappings (without asking) [uses 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 editor (the computer asks once before restoring the whole backup) [uses 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 to Jangada with a computer tool, without the web editor (without asking) [uses 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 set screen colours from the USB console (without asking) [uses 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": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "Polly shared memory 4",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly setup and channel sounds",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically during use (if the second core fails and playback stops, with AUTO selected by default)",
        "effect": "lost"
       },
       {
        "way": "when you enter power-on hardware calibration (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you learn or clear MIDI CC mappings (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you set screen colours from the USB console (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Optional QY70 style bank",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "All four Polly songs",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 1 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 2 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 3 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 4 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 11",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 13",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 14",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 15",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly button and encoder calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: Polly shared memory 4; Polly setup and channel sounds. At risk when you act: Optional QY70 style bank; All four Polly songs; Polly shared memory 1; Polly shared memory 2; Polly shared memory 3; Polly shared memory 5; Polly shared memory 6; Polly shared memory 7; Polly shared memory 8; Polly shared memory 9; Polly shared memory 10; Polly shared memory 11; Polly shared memory 12; Polly shared memory 13; Polly shared memory 14; Polly shared memory 15; Polly shared memory 16; Polly button and encoder calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "skiff",
    "name": "Skiff",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "user sounds’ own FM6 patches",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sound bank 1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use [uses its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. Skiff cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. Skiff cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. Skiff cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. Skiff cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you store a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. Skiff cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       }
      ],
      "first_way_effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
     },
     {
      "object": "user sound bank 2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use [uses its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. Skiff cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. Skiff cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. Skiff cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. Skiff cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you store a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. Skiff cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       }
      ],
      "first_way_effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
     },
     {
      "object": "settings, calibration and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically during use (if the second core fails and playback stops, with AUTO selected by default)",
        "effect": "lost"
       },
       {
        "way": "when you enter power-on hardware calibration (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you learn or clear MIDI CC mappings (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you set screen colours from the USB console (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 1 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank) [uses its shared pattern pool]",
        "effect": "some or all lost"
       }
      ]
     },
     {
      "object": "project B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 2 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank) [uses its shared pattern pool]",
        "effect": "some or all lost"
       }
      ]
     },
     {
      "object": "project C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 3 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank) [uses its shared pattern pool]",
        "effect": "some or all lost"
       }
      ]
     },
     {
      "object": "project D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 4 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank) [uses its shared pattern pool]",
        "effect": "some or all lost"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank) [uses its shared pattern pool]",
        "effect": "some or all lost"
       }
      ]
     },
     {
      "object": "last session",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared 64-pattern pool",
      "effect": "some or all lost",
      "ways": [
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace)",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank)",
        "effect": "some or all lost"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Jangada reads user sample USR1 until you write over the saved data.",
     "Jangada reads user sample USR2 until you write over the saved data.",
     "Jangada reads user sample USR3 until you write over the saved data."
    ],
    "owner_text": "At risk by itself: user sounds’ own FM6 patches; user sound bank 1 (only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain; other writes can also erase it); user sound bank 2 (only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain; other writes can also erase it); settings, calibration and favourites. At risk when you act: project A; project B; project C; project D; last session; shared 64-pattern pool (some or all lost); user sample USR1; user sample USR2; user sample USR3. Jangada reads user sample USR1 until you write over the saved data. Jangada reads user sample USR2 until you write over the saved data. Jangada reads user sample USR3 until you write over the saved data.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "sloopdx",
    "name": "sloopDX",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "working loop",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       }
      ]
     },
     {
      "object": "settings, calibration, song order, MIDI, theme and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically during use (if the second core fails and playback stops, with AUTO selected by default)",
        "effect": "lost"
       },
       {
        "way": "when you enter power-on hardware calibration (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you learn or clear MIDI CC mappings (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you set screen colours from the USB console (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 1 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       }
      ]
     },
     {
      "object": "section B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 2 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       }
      ]
     },
     {
      "object": "section C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 3 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       }
      ]
     },
     {
      "object": "section D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 4 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       }
      ]
     },
     {
      "object": "DX7 bank 1 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 1 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 2 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 2 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 3 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 3 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 4 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 4 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 5 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 5 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 6 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 6 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 7 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 7 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 8 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 8 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "selected DX7 bank",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "MY KIT",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user presets 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. sloopDX cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking) [uses its saved DX7 voices]",
        "effect": "sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. sloopDX cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. sloopDX cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking) [uses its saved DX7 voices]",
        "effect": "sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first) [uses its saved DX7 voices]",
        "effect": "sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. sloopDX cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you store a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. sloopDX cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       }
      ],
      "first_way_effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. sloopDX cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
     },
     {
      "object": "user presets 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. sloopDX cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking) [uses its saved DX7 voices]",
        "effect": "sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. sloopDX cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. sloopDX cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking) [uses its saved DX7 voices]",
        "effect": "sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first) [uses its saved DX7 voices]",
        "effect": "sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. sloopDX cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you store a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. sloopDX cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       }
      ],
      "first_way_effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. sloopDX cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: working loop; settings, calibration, song order, MIDI, theme and favourites. At risk when you act: section A; section B; section C; section D; DX7 bank 1 voices 1–16; DX7 bank 1 voices 17–32; DX7 bank 2 voices 1–16; DX7 bank 2 voices 17–32; DX7 bank 3 voices 1–16; DX7 bank 3 voices 17–32; DX7 bank 4 voices 1–16; DX7 bank 4 voices 17–32; DX7 bank 5 voices 1–16; DX7 bank 5 voices 17–32; DX7 bank 6 voices 1–16; DX7 bank 6 voices 17–32; DX7 bank 7 voices 1–16; DX7 bank 7 voices 17–32; DX7 bank 8 voices 1–16; DX7 bank 8 voices 17–32; selected DX7 bank; MY KIT; user presets 1–16 (changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. sloopDX cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again; other writes can also erase it); user presets 17–32 (changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. sloopDX cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again; other writes can also erase it).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "rainbow",
    "name": "Rainbow Mode",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "the FM6 patches used by the thirty-two user sounds",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "your old FM6 bank (B1–B27)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16, names and sixteen-step patterns without automation",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use [uses its FM6 patches]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. Rainbow Mode cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. Rainbow Mode cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. Rainbow Mode cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. Rainbow Mode cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you store a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. Rainbow Mode cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       }
      ],
      "first_way_effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
     },
     {
      "object": "user sounds U17–U32, names and sixteen-step patterns without automation",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use [uses its FM6 patches]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. Rainbow Mode cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. Rainbow Mode cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. Rainbow Mode cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. Rainbow Mode cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you store a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. Rainbow Mode cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       }
      ],
      "first_way_effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
     },
     {
      "object": "Felucca preferences, calibration and favourites; Rainbow WRITE song, greeting name, hat, volume limit and look-alikes",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically during use (if the second core fails and playback stops, with AUTO selected by default)",
        "effect": "lost"
       },
       {
        "way": "when you enter power-on hardware calibration (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you learn or clear MIDI CC mappings (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you set screen colours from the USB console (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Project A: four tracks and their sounds, notes, automation, song chain and name",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 1 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Project B: four tracks and their sounds, notes, automation, song chain and name",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 2 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Project C: four tracks and their sounds, notes, automation, song chain and name",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 3 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Project D: four tracks and their sounds, notes, automation, song chain and name",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 4 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "the last session in the full version of Felucca",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "User sample USR1 and any slice positions you set in SLICE",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "User sample USR2 and any slice positions you set in SLICE",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "User sample USR3 and any slice positions you set in SLICE",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Jangada reads user sample USR1 and any slice positions you set in SLICE until you write over the saved data.",
     "Jangada reads user sample USR2 and any slice positions you set in SLICE until you write over the saved data.",
     "Jangada reads user sample USR3 and any slice positions you set in SLICE until you write over the saved data."
    ],
    "owner_text": "At risk by itself: the FM6 patches used by the thirty-two user sounds; your old FM6 bank (B1–B27); user sounds U01–U16, names and sixteen-step patterns without automation (only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain; other writes can also erase it); user sounds U17–U32, names and sixteen-step patterns without automation (only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain; other writes can also erase it); Felucca preferences, calibration and favourites; Rainbow WRITE song, greeting name, hat, volume limit and look-alikes. At risk when you act: Project A: four tracks and their sounds, notes, automation, song chain and name; Project B: four tracks and their sounds, notes, automation, song chain and name; Project C: four tracks and their sounds, notes, automation, song chain and name; Project D: four tracks and their sounds, notes, automation, song chain and name; the last session in the full version of Felucca; User sample USR1 and any slice positions you set in SLICE; User sample USR2 and any slice positions you set in SLICE; User sample USR3 and any slice positions you set in SLICE. Jangada reads user sample USR1 and any slice positions you set in SLICE until you write over the saved data. Jangada reads user sample USR2 and any slice positions you set in SLICE until you write over the saved data. Jangada reads user sample USR3 and any slice positions you set in SLICE until you write over the saved data.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "duell",
    "name": "DUELL beta",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "saved patches",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings and panel setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically during use (if the second core fails and playback stops, with AUTO selected by default)",
        "effect": "lost"
       },
       {
        "way": "when you enter power-on hardware calibration (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you learn or clear MIDI CC mappings (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you set screen colours from the USB console (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "multis M01–M02",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 1 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "multis M03–M04",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 2 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "multis M05–M06",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 3 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "multis M07–M08",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 4 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user wavetable USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user wavetable USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user wavetable USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "multis M09–M10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "multis M11–M12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "multis M13–M14",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "multis M15–M16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "patterns P01–P06",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "patterns P07–P12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "patterns P13–P16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "last working music",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 bank B01–B32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: saved patches; settings and panel setup. At risk when you act: multis M01–M02; multis M03–M04; multis M05–M06; multis M07–M08; user wavetable USR1; user wavetable USR2; user wavetable USR3; multis M09–M10; multis M11–M12; multis M13–M14; multis M15–M16; patterns P01–P06; patterns P07–P12; patterns P13–P16; last working music; FM6 bank B01–B32.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fimba",
    "name": "FiMba-1 beta",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FiMba-1 beta sound and playing setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically during use (if the second core fails and playback stops, with AUTO selected by default)",
        "effect": "lost"
       },
       {
        "way": "when you enter power-on hardware calibration (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you learn or clear MIDI CC mappings (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you set screen colours from the USB console (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FiMba-1 beta panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: FiMba-1 beta sound and playing setup. At risk when you act: FiMba-1 beta panel calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "maku",
    "name": "MAKU",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "inherited FM6 patches for user presets",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings and calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically during use (if the second core fails and playback stops, with AUTO selected by default)",
        "effect": "lost"
       },
       {
        "way": "when you enter power-on hardware calibration (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you learn or clear MIDI CC mappings (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you set screen colours from the USB console (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "inherited project A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 1 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "inherited project B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 2 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "inherited project C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 3 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "inherited project D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 4 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "inherited user preset bank 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. MAKU cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. MAKU cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. MAKU cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. MAKU cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you store a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. MAKU cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       }
      ]
     },
     {
      "object": "inherited user preset bank 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. MAKU cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. MAKU cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. MAKU cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. MAKU cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you store a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. MAKU cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       }
      ]
     },
     {
      "object": "up to sixteen liked worlds",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "inherited user sample 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "inherited user sample 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "inherited user sample 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Jangada reads inherited user sample 1 until you write over the saved data.",
     "Jangada reads inherited user sample 2 until you write over the saved data.",
     "Jangada reads inherited user sample 3 until you write over the saved data."
    ],
    "owner_text": "At risk by itself: inherited FM6 patches for user presets; settings and calibration. At risk when you act: inherited project A; inherited project B; inherited project C; inherited project D; inherited user preset bank 1; inherited user preset bank 2; up to sixteen liked worlds; inherited user sample 1; inherited user sample 2; inherited user sample 3. Jangada reads inherited user sample 1 until you write over the saved data. Jangada reads inherited user sample 2 until you write over the saved data. Jangada reads inherited user sample 3 until you write over the saved data.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fart",
    "name": "Fart Machine One",
    "flags": "S",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "learned button and encoder calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk when you act: learned button and encoder calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "chord",
    "name": "fm1-chord",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel calibration, four chord preset setups and the current chord setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically during use (if the second core fails and playback stops, with AUTO selected by default)",
        "effect": "lost"
       },
       {
        "way": "when you enter power-on hardware calibration (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you learn or clear MIDI CC mappings (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you set screen colours from the USB console (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P1: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 1 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P2: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 2 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P3: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 3 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P4: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 4 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. fm1-chord cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. fm1-chord cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. fm1-chord cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. fm1-chord cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you store a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. fm1-chord cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. fm1-chord cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. fm1-chord cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. fm1-chord cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. fm1-chord cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you store a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. fm1-chord cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       }
      ]
     },
     {
      "object": "uploaded sample USR1 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR2 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR3 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Jangada reads uploaded sample USR1 and optional SLICE markers until you write over the saved data.",
     "Jangada reads uploaded sample USR2 and optional SLICE markers until you write over the saved data.",
     "Jangada reads uploaded sample USR3 and optional SLICE markers until you write over the saved data."
    ],
    "owner_text": "At risk by itself: FM6 bank B1-B27; settings, panel calibration, four chord preset setups and the current chord setup. At risk when you act: chord preset P1: full synth project; chord preset P2: full synth project; chord preset P3: full synth project; chord preset P4: full synth project; user sounds 1-16; user sounds 17-32; uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers; uploaded sample USR3 and optional SLICE markers. Jangada reads uploaded sample USR1 and optional SLICE markers until you write over the saved data. Jangada reads uploaded sample USR2 and optional SLICE markers until you write over the saved data. Jangada reads uploaded sample USR3 and optional SLICE markers until you write over the saved data.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "sloopbanks",
    "name": "SLOOP DX7 Banks",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "working loop",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration, song order, synthesized drum kits and DX-bank setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically during use (if the second core fails and playback stops, with AUTO selected by default)",
        "effect": "lost"
       },
       {
        "way": "when you enter power-on hardware calibration (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you learn or clear MIDI CC mappings (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you set screen colours from the USB console (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 1 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 2 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 3 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 4 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. SLOOP DX7 Banks cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. SLOOP DX7 Banks cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. SLOOP DX7 Banks cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. SLOOP DX7 Banks cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you store a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. SLOOP DX7 Banks cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       }
      ]
     },
     {
      "object": "user sounds 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. SLOOP DX7 Banks cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. SLOOP DX7 Banks cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. SLOOP DX7 Banks cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. SLOOP DX7 Banks cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you store a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. SLOOP DX7 Banks cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       }
      ]
     },
     {
      "object": "FM6 patches B1–B27",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "After Jangada replaces DX7 Banks’ saved settings, returning to DX7 Banks erases DX banks 1–8 at its first start without asking, including your own banks 5–8. Back up your DX banks before switching.",
     "Jangada reads user sample USR1 until you write over the saved data.",
     "Jangada reads user sample USR2 until you write over the saved data.",
     "Jangada reads user sample USR3 until you write over the saved data."
    ],
    "owner_text": "At risk by itself: working loop; settings, calibration, song order, synthesized drum kits and DX-bank setup. At risk when you act: section A; section B; section C; section D; user sounds 1–16; user sounds 17–32; FM6 patches B1–B27; user sample USR4; user sample USR1; user sample USR2; user sample USR3. After Jangada replaces DX7 Banks’ saved settings, returning to DX7 Banks erases DX banks 1–8 at its first start without asking, including your own banks 5–8. Back up your DX banks before switching. Jangada reads user sample USR1 until you write over the saved data. Jangada reads user sample USR2 until you write over the saved data. Jangada reads user sample USR3 until you write over the saved data.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fumi",
    "name": "FuMi-1",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FuMi-1 sound and playing setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically during use (if the second core fails and playback stops, with AUTO selected by default)",
        "effect": "lost"
       },
       {
        "way": "when you enter power-on hardware calibration (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you learn or clear MIDI CC mappings (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you set screen colours from the USB console (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FuMi-1 button and encoder calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: FuMi-1 sound and playing setup. At risk when you act: FuMi-1 button and encoder calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "waveloop",
    "name": "WaveLoop FM-1",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 patches and controls for each drum in user sounds",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically during use (if the second core fails and playback stops, with AUTO selected by default)",
        "effect": "lost"
       },
       {
        "way": "when you enter power-on hardware calibration (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you learn or clear MIDI CC mappings (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you set screen colours from the USB console (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 1 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 2 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 3 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "last session saved for the next start",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 4 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "slice positions you set for USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "slice positions you set for USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 11",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song order and selection",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. WaveLoop FM-1 cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. WaveLoop FM-1 cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. WaveLoop FM-1 cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. WaveLoop FM-1 cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you store a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. WaveLoop FM-1 cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       }
      ]
     },
     {
      "object": "user sounds 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. WaveLoop FM-1 cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. WaveLoop FM-1 cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. WaveLoop FM-1 cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. WaveLoop FM-1 cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you store a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. WaveLoop FM-1 cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Jangada reads user sample USR1 until you write over the saved data.",
     "Jangada reads user sample USR2 until you write over the saved data."
    ],
    "owner_text": "At risk by itself: FM6 patches and controls for each drum in user sounds; settings, calibration and favourites. At risk when you act: song 1; song 2; song 3; last session saved for the next start; slice positions you set for USR1; slice positions you set for USR2; song 4; song 5; song 6; song 7; song 8; song 9; song 10; song 11; song 12; song order and selection; user sounds 1–16; user sounds 17–32; user sample USR1; user sample USR2. Jangada reads user sample USR1 until you write over the saved data. Jangada reads user sample USR2 until you write over the saved data.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "orbit",
    "name": "ORBIT",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "saved section A",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (if the second core fails and playback stops, with AUTO selected by default) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you confirm SAVE for project 1 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you enter power-on hardware calibration (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you learn or clear MIDI CC mappings (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you set screen colours from the USB console (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "saved section B",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (if the second core fails and playback stops, with AUTO selected by default) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you confirm SAVE for project 2 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you enter power-on hardware calibration (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you learn or clear MIDI CC mappings (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you set screen colours from the USB console (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "saved section C",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (if the second core fails and playback stops, with AUTO selected by default) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you confirm SAVE for project 3 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you enter power-on hardware calibration (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you learn or clear MIDI CC mappings (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you set screen colours from the USB console (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "saved section D",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (if the second core fails and playback stops, with AUTO selected by default) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you confirm SAVE for project 4 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you enter power-on hardware calibration (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you learn or clear MIDI CC mappings (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you set screen colours from the USB console (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "working music kept by autosave",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically during use (if the second core fails and playback stops, with AUTO selected by default) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you enter power-on hardware calibration (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you learn or clear MIDI CC mappings (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you set screen colours from the USB console (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "settings, calibration, song order, SYN1-SYN4 kits and MIDI preferences",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically during use (if the second core fails and playback stops, with AUTO selected by default)",
        "effect": "lost"
       },
       {
        "way": "when you enter power-on hardware calibration (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you learn or clear MIDI CC mappings (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you set screen colours from the USB console (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "USER sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "USER sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Jangada cannot use user sounds last saved by Orbit 0.7.0 or later. Normal sound saves refuse to write over those banks; restoring a backup can replace them. If the sounds were last saved before Orbit 0.7.0, or still use an older format from another firmware, Jangada imports only version 1 sounds. Saving, erasing or sending a user sound writes all sixteen sounds in that group in a format Orbit cannot read when you return. Sounds Jangada could not import are lost. For that older format, the web editor asks before replacing a sound Jangada shows.",
     "Jangada reads sample slot USR1 until you write over the saved data.",
     "Jangada reads sample slot USR2 until you write over the saved data.",
     "Jangada reads sample slot USR3 until you write over the saved data."
    ],
    "owner_text": "At risk by itself: saved section A (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); saved section B (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); saved section C (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); saved section D (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); working music kept by autosave; settings, calibration, song order, SYN1-SYN4 kits and MIDI preferences. At risk when you act: USER sounds U01-U16 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); USER sounds U17-U32 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); FM6 bank B1-B27; sample slot USR4; sample slot USR1; sample slot USR2; sample slot USR3. Jangada cannot use user sounds last saved by Orbit 0.7.0 or later. Normal sound saves refuse to write over those banks; restoring a backup can replace them. If the sounds were last saved before Orbit 0.7.0, or still use an older format from another firmware, Jangada imports only version 1 sounds. Saving, erasing or sending a user sound writes all sixteen sounds in that group in a format Orbit cannot read when you return. Sounds Jangada could not import are lost. For that older format, the web editor asks before replacing a sound Jangada shows. Jangada reads sample slot USR1 until you write over the saved data. Jangada reads sample slot USR2 until you write over the saved data. Jangada reads sample slot USR3 until you write over the saved data.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "floyd",
    "name": "SLOOP Floyd FM",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "the working loop kept by autosave",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel calibration and song order",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically during use (if the second core fails and playback stops, with AUTO selected by default)",
        "effect": "lost"
       },
       {
        "way": "when you enter power-on hardware calibration (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you learn or clear MIDI CC mappings (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you set screen colours from the USB console (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 1 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 2 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 3 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 4 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. SLOOP Floyd FM cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. SLOOP Floyd FM cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. SLOOP Floyd FM cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. SLOOP Floyd FM cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you store a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. SLOOP Floyd FM cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. SLOOP Floyd FM cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. SLOOP Floyd FM cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. SLOOP Floyd FM cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. SLOOP Floyd FM cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you store a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. SLOOP Floyd FM cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       }
      ]
     },
     {
      "object": "user sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Jangada reads user sample slot USR1 until you write over the saved data.",
     "Jangada reads user sample slot USR2 until you write over the saved data.",
     "Jangada reads user sample slot USR3 until you write over the saved data."
    ],
    "owner_text": "At risk by itself: the working loop kept by autosave; settings, panel calibration and song order. At risk when you act: song section A; song section B; song section C; song section D; user sounds U01–U16; user sounds U17–U32; user sample slot USR1; user sample slot USR2; user sample slot USR3. Jangada reads user sample slot USR1 until you write over the saved data. Jangada reads user sample slot USR2 until you write over the saved data. Jangada reads user sample slot USR3 until you write over the saved data.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "winampfm",
    "name": "winampFM Synth",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "working music kept by autosave",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel calibration, song order, SYN kits and MIDI",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically during use (if the second core fails and playback stops, with AUTO selected by default)",
        "effect": "lost"
       },
       {
        "way": "when you enter power-on hardware calibration (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you learn or clear MIDI CC mappings (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you set screen colours from the USB console (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section A (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 1 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 2 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 3 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 4 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. winampFM Synth cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. winampFM Synth cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. winampFM Synth cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. winampFM Synth cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you store a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. winampFM Synth cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. winampFM Synth cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. winampFM Synth cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. winampFM Synth cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. winampFM Synth cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you store a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. winampFM Synth cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       }
      ]
     },
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Jangada reads sample USR1 until you write over the saved data.",
     "Jangada reads sample USR2 until you write over the saved data.",
     "Jangada reads sample USR3 until you write over the saved data."
    ],
    "owner_text": "At risk by itself: working music kept by autosave; settings, panel calibration, song order, SYN kits and MIDI. At risk when you act: section A (whole project); section B (whole project); section C (whole project); section D (whole project); user sounds 1-16; user sounds 17-32; FM6 bank B1-B27; sample USR4; sample USR1; sample USR2; sample USR3. Jangada reads sample USR1 until you write over the saved data. Jangada reads sample USR2 until you write over the saved data. Jangada reads sample USR3 until you write over the saved data.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "bubba",
    "name": "Bubba Machine (beta)",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "sixteen six-track patterns",
      "effect": "some or all lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "some or all lost"
       },
       {
        "way": "when you confirm SAVE for project 1 (asks first or waits for you to turn again)",
        "effect": "some or all lost"
       },
       {
        "way": "when you confirm SAVE for project 2 (asks first or waits for you to turn again)",
        "effect": "some or all lost"
       },
       {
        "way": "when you confirm SAVE for project 3 (asks first or waits for you to turn again)",
        "effect": "some or all lost"
       },
       {
        "way": "when you confirm SAVE for project 4 (asks first or waits for you to turn again)",
        "effect": "some or all lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "some or all lost"
       }
      ]
     },
     {
      "object": "song order and four scenes",
      "effect": "some or all lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "some or all lost"
       },
       {
        "way": "when you confirm SAVE for project 1 (asks first or waits for you to turn again)",
        "effect": "some or all lost"
       },
       {
        "way": "when you confirm SAVE for project 2 (asks first or waits for you to turn again)",
        "effect": "some or all lost"
       },
       {
        "way": "when you confirm SAVE for project 3 (asks first or waits for you to turn again)",
        "effect": "some or all lost"
       },
       {
        "way": "when you confirm SAVE for project 4 (asks first or waits for you to turn again)",
        "effect": "some or all lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "some or all lost"
       }
      ]
     },
     {
      "object": "eight saved sampler takes",
      "effect": "some or all lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "some or all lost"
       }
      ]
     },
     {
      "object": "twelve uploaded sounds or DX7 banks",
      "effect": "some or all lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "some or all lost"
       }
      ]
     },
     {
      "object": "screen language pack",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "system preferences and last pattern",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: sixteen six-track patterns (some or all lost); song order and four scenes (some or all lost). At risk when you act: eight saved sampler takes (some or all lost); twelve uploaded sounds or DX7 banks (some or all lost); screen language pack; system preferences and last pattern.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "salt",
    "name": "Felucca [Salt]",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "screen preferences, calibration and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically during use (if the second core fails and playback stops, with AUTO selected by default)",
        "effect": "lost"
       },
       {
        "way": "when you enter power-on hardware calibration (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you learn or clear MIDI CC mappings (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you set screen colours from the USB console (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 1 (asks first or waits for you to turn again)",
        "effect": "changed to the new format: After you save this project in Jangada, SALT cannot read the new saved project. That save leaves other named projects alone. Imported projects use Jangada’s sound engines and defaults, so they can sound different"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "changed to the new format: After you save this project in Jangada, SALT cannot read the new saved project. That save leaves other named projects alone. Imported projects use Jangada’s sound engines and defaults, so they can sound different"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "changed to the new format: After you save this project in Jangada, SALT cannot read the new saved project. That save leaves other named projects alone. Imported projects use Jangada’s sound engines and defaults, so they can sound different"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 2 (asks first or waits for you to turn again)",
        "effect": "changed to the new format: After you save this project in Jangada, SALT cannot read the new saved project. That save leaves other named projects alone. Imported projects use Jangada’s sound engines and defaults, so they can sound different"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "changed to the new format: After you save this project in Jangada, SALT cannot read the new saved project. That save leaves other named projects alone. Imported projects use Jangada’s sound engines and defaults, so they can sound different"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "changed to the new format: After you save this project in Jangada, SALT cannot read the new saved project. That save leaves other named projects alone. Imported projects use Jangada’s sound engines and defaults, so they can sound different"
       }
      ]
     },
     {
      "object": "project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 3 (asks first or waits for you to turn again)",
        "effect": "changed to the new format: After you save this project in Jangada, SALT cannot read the new saved project. That save leaves other named projects alone. Imported projects use Jangada’s sound engines and defaults, so they can sound different"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "changed to the new format: After you save this project in Jangada, SALT cannot read the new saved project. That save leaves other named projects alone. Imported projects use Jangada’s sound engines and defaults, so they can sound different"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "changed to the new format: After you save this project in Jangada, SALT cannot read the new saved project. That save leaves other named projects alone. Imported projects use Jangada’s sound engines and defaults, so they can sound different"
       }
      ]
     },
     {
      "object": "project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 4 (asks first or waits for you to turn again)",
        "effect": "changed to the new format: After you save this project in Jangada, SALT cannot read the new saved project. That save leaves other named projects alone. Imported projects use Jangada’s sound engines and defaults, so they can sound different"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "changed to the new format: After you save this project in Jangada, SALT cannot read the new saved project. That save leaves other named projects alone. Imported projects use Jangada’s sound engines and defaults, so they can sound different"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "changed to the new format: After you save this project in Jangada, SALT cannot read the new saved project. That save leaves other named projects alone. Imported projects use Jangada’s sound engines and defaults, so they can sound different"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. Felucca [Salt] cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. Felucca [Salt] cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. Felucca [Salt] cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. Felucca [Salt] cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you store a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. Felucca [Salt] cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. Felucca [Salt] cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. Felucca [Salt] cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. Felucca [Salt] cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. Felucca [Salt] cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you store a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. Felucca [Salt] cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Jangada reads user sample USR1 until you write over the saved data.",
     "Jangada reads user sample USR2 until you write over the saved data.",
     "Jangada reads user sample USR3 until you write over the saved data."
    ],
    "owner_text": "At risk by itself: screen preferences, calibration and favourites. At risk when you act: project 1; project 2; project 3; project 4; user sounds U01-U16; user sounds U17-U32; user sample USR1; user sample USR2; user sample USR3. Jangada reads user sample USR1 until you write over the saved data. Jangada reads user sample USR2 until you write over the saved data. Jangada reads user sample USR3 until you write over the saved data.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "pigeon",
    "name": "PIGEON",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "the older FM6 patch bank PIGEON no longer uses",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "older FM6 patches for user presets",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "preferences, MIDI LEARN and panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically during use (if the second core fails and playback stops, with AUTO selected by default)",
        "effect": "lost"
       },
       {
        "way": "when you enter power-on hardware calibration (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you learn or clear MIDI CC mappings (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you set screen colours from the USB console (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared song and drum sample bank",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you install Jangada",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "saved pattern A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 1 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "saved pattern B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 2 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "saved pattern C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 3 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "saved pattern D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 4 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "slice positions set by hand in the older format",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "partly lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "partly lost"
       }
      ]
     },
     {
      "object": "chops, drum-pad and performance edits",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "older user preset bank 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. PIGEON cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. PIGEON cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. PIGEON cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. PIGEON cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you store a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. PIGEON cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       }
      ]
     },
     {
      "object": "older user preset bank 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. PIGEON cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. PIGEON cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. PIGEON cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. PIGEON cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you store a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. PIGEON cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       }
      ]
     },
     {
      "object": "last working session",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR1 in the older format",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2 in the older format",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3 in the older format",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Jangada can use older sample slots still stored on the FM-1. It cannot read Pigeon’s current combined sample bank. Only version 1 sounds from older sound banks can be imported; current versions look empty.",
     "Jangada reads user sample USR1 in the older format until you write over the saved data. This applies only to older sample slots still stored on the FM-1. Pigeon’s current combined sample bank cannot be imported.",
     "Jangada reads user sample USR2 in the older format until you write over the saved data. This applies only to older sample slots still stored on the FM-1. Pigeon’s current combined sample bank cannot be imported.",
     "Jangada reads user sample USR3 in the older format until you write over the saved data. This applies only to older sample slots still stored on the FM-1. Pigeon’s current combined sample bank cannot be imported."
    ],
    "owner_text": "At risk by itself: the older FM6 patch bank PIGEON no longer uses; older FM6 patches for user presets; preferences, MIDI LEARN and panel calibration. At risk when you act: shared song and drum sample bank; saved pattern A; saved pattern B; saved pattern C; saved pattern D; slice positions set by hand in the older format; chops, drum-pad and performance edits; older user preset bank 1; older user preset bank 2; last working session; user sample USR1 in the older format; user sample USR2 in the older format; user sample USR3 in the older format. Jangada can use older sample slots still stored on the FM-1. It cannot read Pigeon’s current combined sample bank. Only version 1 sounds from older sound banks can be imported; current versions look empty. Jangada reads user sample USR1 in the older format until you write over the saved data. This applies only to older sample slots still stored on the FM-1. Pigeon’s current combined sample bank cannot be imported. Jangada reads user sample USR2 in the older format until you write over the saved data. This applies only to older sample slots still stored on the FM-1. Pigeon’s current combined sample bank cannot be imported. Jangada reads user sample USR3 in the older format until you write over the saved data. This applies only to older sample slots still stored on the FM-1. Pigeon’s current combined sample bank cannot be imported.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fm1move",
    "name": "FM1 Move",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if the second core fails and playback stops, with AUTO selected [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace)",
        "effect": "lost"
       },
       {
        "way": "when you enter power-on hardware calibration (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you learn or clear MIDI CC mappings (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you set screen colours from the USB console (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "settings, calibration, SYN kits and stored MIDI mappings",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "changed to the new format: After Jangada saves preferences, FM1 Move cannot recover its synth kits or original MIDI settings from that saved copy. Some lighting and recording choices also change because the two firmwares read those choices differently"
       },
       {
        "way": "automatically, only if the second core fails and playback stops, with AUTO selected",
        "effect": "changed to the new format: After Jangada saves preferences, FM1 Move cannot recover its synth kits or original MIDI settings from that saved copy. Some lighting and recording choices also change because the two firmwares read those choices differently"
       },
       {
        "way": "when you enter power-on hardware calibration (without asking)",
        "effect": "changed to the new format: After Jangada saves preferences, FM1 Move cannot recover its synth kits or original MIDI settings from that saved copy. Some lighting and recording choices also change because the two firmwares read those choices differently"
       },
       {
        "way": "when you learn or clear MIDI CC mappings (without asking)",
        "effect": "changed to the new format: After Jangada saves preferences, FM1 Move cannot recover its synth kits or original MIDI settings from that saved copy. Some lighting and recording choices also change because the two firmwares read those choices differently"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you set screen colours from the USB console (without asking)",
        "effect": "changed to the new format: After Jangada saves preferences, FM1 Move cannot recover its synth kits or original MIDI settings from that saved copy. Some lighting and recording choices also change because the two firmwares read those choices differently"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if the second core fails and playback stops, with AUTO selected [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you enter power-on hardware calibration (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you learn or clear MIDI CC mappings (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you set screen colours from the USB console (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "the working project kept by autosave",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if the second core fails and playback stops, with AUTO selected [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you enter power-on hardware calibration (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you learn or clear MIDI CC mappings (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you set screen colours from the USB console (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. FM1 Move cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. FM1 Move cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. FM1 Move cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. FM1 Move cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you store a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. FM1 Move cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. FM1 Move cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. FM1 Move cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. FM1 Move cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. FM1 Move cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you store a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. FM1 Move cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       }
      ]
     },
     {
      "object": "FM6 bank B1–B27",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Jangada's 2ND CORE setting follows your visualizer choice in FM1 Move: AUTO, OFF or BOOST. Only AUTO allows this automatic write. If the saved palette or low-cut value fails Jangada’s checks, it uses the default AUTO.",
     "Jangada reads sample slot USR1 until you write over the saved data.",
     "Jangada reads sample slot USR2 until you write over the saved data.",
     "Jangada reads sample slot USR3 until you write over the saved data."
    ],
    "owner_text": "At risk by itself: project 1 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); settings, calibration, SYN kits and stored MIDI mappings; project 2 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); the working project kept by autosave (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain). At risk when you act: user sounds U01–U16; user sounds U17–U32; FM6 bank B1–B27; sample slot USR1; sample slot USR2; sample slot USR3. Jangada's 2ND CORE setting follows your visualizer choice in FM1 Move: AUTO, OFF or BOOST. Only AUTO allows this automatic write. If the saved palette or low-cut value fails Jangada’s checks, it uses the default AUTO. Jangada reads sample slot USR1 until you write over the saved data. Jangada reads sample slot USR2 until you write over the saved data. Jangada reads sample slot USR3 until you write over the saved data.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fm1quest",
    "name": "FM1 Quest",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "working music (autosave)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel mapping, song order and Quest preferences/progress",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically during use (if the second core fails and playback stops, with AUTO selected by default)",
        "effect": "lost"
       },
       {
        "way": "when you enter power-on hardware calibration (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you learn or clear MIDI CC mappings (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you set screen colours from the USB console (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 1 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 2 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 3 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 4 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. FM1 Quest cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. FM1 Quest cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. FM1 Quest cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. FM1 Quest cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you store a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. FM1 Quest cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. FM1 Quest cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. FM1 Quest cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. FM1 Quest cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. FM1 Quest cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you store a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. FM1 Quest cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       }
      ]
     },
     {
      "object": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Jangada reads sample USR1 until you write over the saved data."
    ],
    "owner_text": "At risk by itself: working music (autosave); settings, panel mapping, song order and Quest preferences/progress. At risk when you act: song section A; song section B; song section C; song section D; sample USR2; sample USR3; Piano Hero P1; Piano Hero P2; Piano Hero P3; Piano Hero P4; Piano Hero P5; Piano Hero P6; FM Hero H1; FM Hero H2; FM Hero H3; FM Hero H4; FM Hero H5; FM Hero H6; user sounds U01–U16; user sounds U17–U32; sample USR1. Jangada reads sample USR1 until you write over the saved data.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "grooveos",
    "name": "Groove OS",
    "flags": "?",
    "weakest_grade": null,
    "at_risk": [],
    "possibly_at_risk": [
     "Groove project slot 1",
     "Groove project slot 2",
     "Groove project slot 3",
     "Groove resume autosave",
     "Groove sound bank A",
     "Groove sound bank B",
     "Groove sound bank C",
     "Groove sound bank D",
     "Groove custom drum sounds and kits",
     "Groove device preferences",
     "Groove crash reports"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Groove OS does not publish where it saves work or a format this firmware can read. Projects, sounds, samples and settings may be lost when you switch. Export Groove OS projects and user sounds first; we do not know if they will survive."
    ],
    "owner_text": "Possibly at risk (layout reported or inferred): Groove project slot 1; Groove project slot 2; Groove project slot 3; Groove resume autosave; Groove sound bank A; Groove sound bank B; Groove sound bank C; Groove sound bank D; Groove custom drum sounds and kits; Groove device preferences; Groove crash reports. Groove OS does not publish where it saves work or a format this firmware can read. Projects, sounds, samples and settings may be lost when you switch. Export Groove OS projects and user sounds first; we do not know if they will survive.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   }
  ],
  "when_you_leave": [
   {
    "to": "stock",
    "name": "Stock V15",
    "flags": "?",
    "weakest_grade": "reported",
    "at_risk": [],
    "possibly_at_risk": [
     "FM6 voices B33-B48",
     "FM6 voices B49-B64",
     "project 1",
     "project 2",
     "project 3",
     "project 4",
     "working music (autosave)",
     "user samples USR1",
     "user samples USR2",
     "user samples USR3",
     "user sounds U01-U16",
     "user sounds U17-U32",
     "FM6 voices B1-B16",
     "FM6 voices B17-B32"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "Possibly at risk (layout reported or inferred): FM6 voices B33-B48; FM6 voices B49-B64; project 1; project 2; project 3; project 4; working music (autosave); user samples USR1; user samples USR2; user samples USR3; user sounds U01-U16; user sounds U17-U32; FM6 voices B1-B16; FM6 voices B17-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": [
     "FM6 voices B33-B48",
     "FM6 voices B49-B64",
     "project 1",
     "project 2",
     "project 3",
     "project 4",
     "working music (autosave)",
     "user samples USR1",
     "user samples USR2",
     "user samples USR3",
     "user sounds U01-U16",
     "user sounds U17-U32",
     "FM6 voices B1-B16",
     "FM6 voices B17-B32"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "Possibly at risk (layout reported or inferred): FM6 voices B33-B48; FM6 voices B49-B64; project 1; project 2; project 3; project 4; working music (autosave); user samples USR1; user samples USR2; user samples USR3; user sounds U01-U16; user sounds U17-U32; FM6 voices B1-B16; FM6 voices B17-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": "FM6 voices B1-B16",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (its RESTORE LAST is on by default)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "preferences, calibration and MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if beta 2ND CORE is on and a sound calculation fails or takes too long",
        "effect": "lost"
       },
       {
        "way": "when you change settings from the editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a user preset (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you learn MIDI CC assignments (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you run hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voices B17-B32",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a compatible voice bank sent earlier remains and the saved voice bank is missing or older",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working music (autosave)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save an FM6 user sound (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current FM6 sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you change slice positions in SLICE (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you change slice positions in SLICE (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you change slice positions in SLICE (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Felucca may start with RESTORE LAST ON after Jangada, even if you turned it OFF before. Jangada saves its own settings at several points, replacing the earlier settings with ones Felucca cannot read; an older choice saved by another firmware can also mean the opposite here. Check MENU > SYSTEM > RESTORE LAST before you edit. ON allows automatic saving after edits and a pause with playback stopped, keys and buttons released, and no sound; OFF stops that autosave.",
     "Felucca may start with beta 2ND CORE ON or OFF after Jangada. Do not rely on your earlier choice: Jangada can replace the saved settings with ones Felucca cannot read. Check MENU > SYSTEM > 2ND CORE when you return. ON (BETA) can turn itself OFF and save settings if a sound calculation fails or takes too long; OFF prevents that second-core save.",
     "Felucca reads user samples USR1 until you write over the saved data. Only data in this sample slot is read. Other saved work is separate.",
     "Felucca reads user samples USR2 until you write over the saved data. Only data in this sample slot is read. Other saved work is separate.",
     "Felucca reads user samples USR3 until you write over the saved data. Only data in this sample slot is read. Other saved work is separate."
    ],
    "owner_text": "At risk by itself: FM6 voices B1-B16; preferences, calibration and MIDI LEARN map. At risk by itself, under a condition: FM6 voices B17-B32. At risk when you act: project 1; project 2; project 3; project 4; working music (autosave); user sounds U01-U16; user sounds U17-U32; user samples USR1; user samples USR2; user samples USR3. Felucca may start with RESTORE LAST ON after Jangada, even if you turned it OFF before. Jangada saves its own settings at several points, replacing the earlier settings with ones Felucca cannot read; an older choice saved by another firmware can also mean the opposite here. Check MENU > SYSTEM > RESTORE LAST before you edit. ON allows automatic saving after edits and a pause with playback stopped, keys and buttons released, and no sound; OFF stops that autosave. Felucca may start with beta 2ND CORE ON or OFF after Jangada. Do not rely on your earlier choice: Jangada can replace the saved settings with ones Felucca cannot read. Check MENU > SYSTEM > 2ND CORE when you return. ON (BETA) can turn itself OFF and save settings if a sound calculation fails or takes too long; OFF prevents that second-core save. Felucca reads user samples USR1 until you write over the saved data. Only data in this sample slot is read. Other saved work is separate. Felucca reads user samples USR2 until you write over the saved data. Only data in this sample slot is read. Other saved work is separate. Felucca reads user samples USR3 until you write over the saved data. Only data in this sample slot is read. Other saved work is separate.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "sloop",
    "name": "SLOOP",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "working music (autosave)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "when you load a song file from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you load a song from the editor LIVE playlist (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start an update or enter UPDATE MODE",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "preferences, calibration and MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if SLOOP can still read older SLOOP settings with default MIDI controls and older working music whose drum MIDI channel differs from those settings (Jangada’s own settings cannot trigger this update)",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you load a song file from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you load a song from the editor LIVE playlist (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save drum kits from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or remove a theme from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the song from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold SAVE and press white key 5–8 to save a section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you load a song file from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you load a song from the editor LIVE playlist (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a section from the web editor LIVE page (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold SAVE and press white key 5–8 to save a section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you load a song file from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you load a song from the editor LIVE playlist (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a section from the web editor LIVE page (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold SAVE and press white key 5–8 to save a section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you load a song file from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you load a song from the editor LIVE playlist (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a section from the web editor LIVE page (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold SAVE and press white key 5–8 to save a section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you load a song file from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you load a song from the editor LIVE playlist (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a section from the web editor LIVE page (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voices B1-B16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 bank patch from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voices B17-B32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "SLOOP reads user samples USR1 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it.",
     "SLOOP reads user samples USR2 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it.",
     "SLOOP reads user samples USR3 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it."
    ],
    "owner_text": "At risk by itself: working music (autosave); preferences, calibration and MIDI LEARN map. At risk when you act: project 1; project 2; project 3; project 4; user sounds U01-U16; user sounds U17-U32; FM6 voices B1-B16; FM6 voices B17-B32; user samples USR1; user samples USR2; user samples USR3. SLOOP reads user samples USR1 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. SLOOP reads user samples USR2 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. SLOOP reads user samples USR3 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "x0x",
    "name": "X0X",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you back up unsaved project changes over USB (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you reset to factory settings (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup over USB with the computer question skipped (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you back up unsaved project changes over USB (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you reset to factory settings (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup over USB with the computer question skipped (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you back up unsaved project changes over USB (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you reset to factory settings (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup over USB with the computer question skipped (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you back up unsaved project changes over USB (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you reset to factory settings (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup over USB with the computer question skipped (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you back up unsaved project changes over USB (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you reset to factory settings (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup over USB with the computer question skipped (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "preferences, calibration and MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if X0X crashed while 2ND CORE was on and then restarted without being switched off",
        "effect": "lost"
       },
       {
        "way": "when you back up unsaved project changes over USB (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you reset to factory settings (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup over USB with the computer question skipped (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you run hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "After you confirm a restore on the computer, X0X starts erasing before asking again on the FM-1. Saying no keeps X0X’s current project but does not bring back erased data from your previous firmware, even if the computer says nothing changed.",
     "X0X reads user samples USR1 until you write over the saved data. Each zone plays as a separate repeating break loop (up to 16 per sample). Key ranges, root notes, loop points and slice markers are not used.",
     "X0X reads user samples USR2 until you write over the saved data. Each zone plays as a separate repeating break loop (up to 16 per sample). Key ranges, root notes, loop points and slice markers are not used.",
     "X0X reads user samples USR3 until you write over the saved data. Each zone plays as a separate repeating break loop (up to 16 per sample). Key ranges, root notes, loop points and slice markers are not used."
    ],
    "owner_text": "At risk by itself: project 1; project 2; project 3; project 4; user sounds U17-U32; preferences, calibration and MIDI LEARN map. At risk when you act: user sounds U01-U16; user samples USR1; user samples USR2; user samples USR3. After you confirm a restore on the computer, X0X starts erasing before asking again on the FM-1. Saying no keeps X0X’s current project but does not bring back erased data from your previous firmware, even if the computer says nothing changed. X0X reads user samples USR1 until you write over the saved data. Each zone plays as a separate repeating break loop (up to 16 per sample). Key ranges, root notes, loop points and slice markers are not used. X0X reads user samples USR2 until you write over the saved data. Each zone plays as a separate repeating break loop (up to 16 per sample). Key ranges, root notes, loop points and slice markers are not used. X0X reads user samples USR3 until you write over the saved data. Each zone plays as a separate repeating break loop (up to 16 per sample). Key ranges, root notes, loop points and slice markers are not used.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "jiant",
    "name": "JIANT",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "user samples USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you make a song with several sections using GEN (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you select a song using MIDI PROGRAM CHANGE (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you store a section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you switch song or project (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "preferences, calibration and MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change settings from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you mark a favourite with a star (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working music (autosave)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if no readable bank of FM6 patches for your sounds survives and a compatible old FM6 bank is present",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save an FM6 user sound (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current FM6 sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voices B1-B16",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if its RESTORE LAST is on",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voices B17-B32",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if this firmware ran on your FM-1 before and the voice bank sent to it then is still stored",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you make a song with several sections using GEN (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you make a song with several sections using GEN (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you make a song with several sections using GEN (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you make a song with several sections using GEN (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you make a song with several sections using GEN (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you make a song with several sections using GEN (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "JIANT may start with RESTORE LAST ON or OFF after Jangada, even if you turned it OFF before. Jangada saves its own settings at several points, replacing the earlier settings with ones JIANT cannot read; an older choice saved by another firmware can also mean the opposite here. While ON, JIANT can save by itself about 10 seconds after start-up once stopped and idle, even without edits, and again after later edits and a pause. Check MENU > SYSTEM > RESTORE LAST straight after start-up. Hold SAVE once MENU is open to keep that idle wait reset while you check; the open menu alone does not stop it. OFF stops that autosave."
    ],
    "owner_text": "At risk by itself: user samples USR3; preferences, calibration and MIDI LEARN map. At risk by itself, under a condition: working music (autosave); FM6 voices B1-B16; FM6 voices B17-B32. At risk when you act: project 1; project 2; project 3; project 4; user samples USR1; user samples USR2; user sounds U01-U16; user sounds U17-U32. JIANT may start with RESTORE LAST ON or OFF after Jangada, even if you turned it OFF before. Jangada saves its own settings at several points, replacing the earlier settings with ones JIANT cannot read; an older choice saved by another firmware can also mean the opposite here. While ON, JIANT can save by itself about 10 seconds after start-up once stopped and idle, even without edits, and again after later edits and a pause. Check MENU > SYSTEM > RESTORE LAST straight after start-up. Hold SAVE once MENU is open to keep that idle wait reset while you check; the open menu alone does not stop it. OFF stops that autosave.",
    "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": "working music (autosave)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "preferences, calibration and MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change a setting on the panel or in the menu (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change settings from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you mark a favourite with a star (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a template (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voices B33-B48",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voices B49-B64",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voices B1-B16",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voices B17-B32",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you quick-save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you quick-save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: working music (autosave); user sounds U01-U16; user sounds U17-U32; preferences, calibration and MIDI LEARN map. At risk by itself, under a condition: FM6 voices B33-B48; FM6 voices B49-B64; project 1; project 2; project 3; project 4; user samples USR3; FM6 voices B1-B16; FM6 voices B17-B32. At risk when you act: user samples USR1; user samples USR2.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "fomni",
    "name": "FoMni",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "preferences, calibration and MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you run hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: preferences, calibration and MIDI LEARN map. 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": "preferences, calibration and MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you run hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: preferences, calibration and MIDI LEARN map. 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": "user samples USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only if an older ChoralRoot favourites save is still stored and the space for its next save still contains data",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only if an older ChoralRoot session save is still stored and the space for its next save still contains data",
        "effect": "lost"
       },
       {
        "way": "automatically, only if an older ChoralRoot sound collection is still saved and the space for its next save still contains data",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only if the space for its next save still needs clearing after a save or a failed start-up cleanup",
        "effect": "lost"
       },
       {
        "way": "automatically, only if there is no saved sound collection and at least one supported older user sound can be read",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you choose Import 0.21 sounds from the device manager (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you choose Overwrite or Save as new and press OCT+ or SAVE (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you choose Place all from the device manager (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you choose Undo from the device manager (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you choose a voice from a DX7 or CZ bank on the installer page and import it (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm Reset Settings with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm deletion or reset with OCT+ (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you delete a sound from the installer page (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you delete a sound with the computer question skipped (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you delete a sound with the computer tool (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you delete all user sounds or reset sounds to factory defaults from the device manager (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you delete selected sounds from the device manager (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you hold OCT- and OCT+ while powering on (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you hold SAVE for a global save (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you import a Digitone sound from the installer page (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you import a sound file or one DX7 or CZ voice from the installer page (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you import a sound or a DX7 or CZ voice with the computer question skipped (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you import a sound or a DX7 or CZ voice with the computer tool (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you keep calibration or enter update mode by holding OCT- + OCT+ + HOME for 5 s (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you move or swap sounds from the device manager (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you place a sound as new or back in its saved factory position from the device manager (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you place several selected sounds from the device manager (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you rename a sound from the device manager and enter its new name (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you rename a sound from the installer page and enter its new name (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you rename a sound with the computer tool (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you replace a selected user sound from the device manager (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you replace factory sounds from the device manager (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the installer page, device manager or computer tool (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup with the computer question skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore factory order from the device manager (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore factory presets from the device manager (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore favourite marks from the computer (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore favourite marks with the computer question skipped (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "user samples USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose Undo from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE after recording, editing or clearing this loop (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you place a loop from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC in Advance mode when the current loop is not empty (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the installer page, device manager or computer tool (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup with the computer question skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you swap loop slots from the device manager (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "preferences, calibration and MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if a processor failure blocked Dual Core while its saved setting was On",
        "effect": "lost"
       },
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm Reset Settings with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you hold OCT- and OCT+ while powering on (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE for a global save (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you keep calibration or enter update mode by holding OCT- + OCT+ + HOME for 5 s (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the installer page, device manager or computer tool (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup with the computer question skipped (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working music (autosave)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the installer page, device manager or computer tool (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup with the computer question skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the installer page, device manager or computer tool (the computer asks once before restoring the whole backup)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup with the computer question skipped (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: user samples USR2; user samples USR3; preferences, calibration and MIDI LEARN map. At risk when you act: project 1; project 2; project 3; project 4; working music (autosave); user samples USR1; 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": "FM6 voices B1-B16",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (its RESTORE LAST is on by default)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "preferences, calibration and MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change settings from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working music (autosave)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if no readable bank of FM6 patches for your sounds is left and a compatible older FM6 bank is still stored",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save an FM6 user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voices B17-B32",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if an earlier compatible bank sent to the FM-1 is still stored and is newer than the saved bank, or the saved bank is invalid",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you leave SLICES after editing slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you leave SLICES after editing slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you leave SLICES after editing slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "GHOULBOX may start with RESTORE LAST ON after Jangada, even if you turned it OFF before. Jangada saves its own settings at several points, replacing the earlier settings with ones GHOULBOX cannot read; an older choice saved by another firmware can also mean the opposite here. Check MENU > SYSTEM > RESTORE LAST before you edit. ON allows automatic saving after edits and a pause with playback stopped, keys and buttons released, and no sound; OFF stops that autosave.",
     "GHOULBOX reads user samples USR1 until you write over the saved data.",
     "GHOULBOX reads user samples USR2 until you write over the saved data.",
     "GHOULBOX reads user samples USR3 until you write over the saved data."
    ],
    "owner_text": "At risk by itself: FM6 voices B1-B16; preferences, calibration and MIDI LEARN map. At risk by itself, under a condition: working music (autosave); FM6 voices B17-B32. At risk when you act: project 1; project 2; project 3; project 4; user sounds U01-U16; user sounds U17-U32; user samples USR1; user samples USR2; user samples USR3. GHOULBOX may start with RESTORE LAST ON after Jangada, even if you turned it OFF before. Jangada saves its own settings at several points, replacing the earlier settings with ones GHOULBOX cannot read; an older choice saved by another firmware can also mean the opposite here. Check MENU > SYSTEM > RESTORE LAST before you edit. ON allows automatic saving after edits and a pause with playback stopped, keys and buttons released, and no sound; OFF stops that autosave. GHOULBOX reads user samples USR1 until you write over the saved data. GHOULBOX reads user samples USR2 until you write over the saved data. GHOULBOX reads user samples USR3 until you write over the saved data.",
    "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": "FM6 voices B33-B48",
      "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 (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voices B49-B64",
      "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 (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "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 (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 2",
      "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 (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 3",
      "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 (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 4",
      "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 (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working music (autosave)",
      "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 (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voices B1-B16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voices B17-B32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "preferences, calibration and MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Workbench adds Open's built-in samples right after installing it, without asking about samples. This replaces only the items marked 'by itself right after the Workbench installs Open', before you can save anything. This follows Open V12's source code; the downloaded Workbench has not been checked against it."
    ],
    "owner_text": "At risk by itself: FM6 voices B33-B48; FM6 voices B49-B64; project 1; project 2; project 3; project 4; working music (autosave). At risk when you act: user samples USR1; user samples USR2; user samples USR3; user sounds U01-U16; user sounds U17-U32; FM6 voices B1-B16; FM6 voices B17-B32; preferences, calibration and MIDI LEARN map. Workbench adds Open's built-in samples right after installing it, without asking about samples. This replaces only the items marked 'by itself right after the Workbench installs Open', before you can save anything. This follows Open V12's source code; the downloaded Workbench has not been checked against it.",
    "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": "preferences, calibration and MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you confirm deletion of the active user slot (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE in the save screen (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you release a short SAVE (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "FM-106 Beta4 does not save edited user sounds, even when it says the save worked. Export them before turning off the FM-1 or changing firmware again."
    ],
    "owner_text": "At risk by itself: preferences, calibration and MIDI LEARN map. FM-106 Beta4 does not save edited user sounds, even when it says the save worked. Export them before turning off the FM-1 or changing firmware again.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "hortator",
    "name": "Hortator",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "preferences, calibration and MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you remember or forget a Bluetooth device (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "user samples USR1 (Hortator uses its own one-shot sound engines, so saved loops and slices play differently)",
     "user samples USR2 (Hortator uses its own one-shot sound engines, so saved loops and slices play differently)",
     "user samples USR3 (Hortator uses its own one-shot sound engines, so saved loops and slices play differently)"
    ],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: preferences, calibration and MIDI LEARN map. At risk when you act: project 1; project 2; project 3; project 4. Carried over: user samples USR1 (Hortator uses its own one-shot sound engines, so saved loops and slices play differently); user samples USR2 (Hortator uses its own one-shot sound engines, so saved loops and slices play differently); user samples USR3 (Hortator uses its own one-shot sound engines, so saved loops and slices play differently).",
    "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": "preferences, calibration and MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you tap SAVE twice outside the sequencer (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: preferences, calibration and MIDI LEARN map.",
    "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": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore with computer questions skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB backup while playback is stopped, or enter a test session (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore with computer questions skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB backup while playback is stopped, or enter a test session (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore with computer questions skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB backup while playback is stopped, or enter a test session (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore with computer questions skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB backup while playback is stopped, or enter a test session (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working music (autosave)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore with computer questions skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB backup while playback is stopped, or enter a test session (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore with computer questions skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB backup while playback is stopped, or enter a test session (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you install a QY70 style bank from the computer (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you send a QY70 style bank directly with a computer tool (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send a backup for USB restore with computer questions skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB backup while playback is stopped, or enter a test session (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "preferences, calibration and MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore with computer questions skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB backup while playback is stopped, or enter a test session (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voices B33-B48",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install a QY70 style bank from the computer (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a QY70 style bank directly with a computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voices B49-B64",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install a QY70 style bank from the computer (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a QY70 style bank directly with a computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install a QY70 style bank from the computer (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a QY70 style bank directly with a computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete power-on hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install a QY70 style bank from the computer (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a QY70 style bank directly with a computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voices B1-B16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install a QY70 style bank from the computer (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a QY70 style bank directly with a computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voices B17-B32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install a QY70 style bank from the computer (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a QY70 style bank directly with a computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "After you agree to restore on the computer, Polly starts erasing before the FM-1 asks. Saying no on the FM-1 keeps Polly’s current project, but cannot bring back erased data from your previous firmware, even if the computer says nothing changed."
    ],
    "owner_text": "At risk by itself: project 1; project 2; project 3; project 4; working music (autosave); user samples USR1; user samples USR2; preferences, calibration and MIDI LEARN map. At risk when you act: FM6 voices B33-B48; FM6 voices B49-B64; user samples USR3; user sounds U01-U16; user sounds U17-U32; FM6 voices B1-B16; FM6 voices B17-B32. After you agree to restore on the computer, Polly starts erasing before the FM-1 asks. Saying no on the FM-1 keeps Polly’s current project, but cannot bring back erased data from your previous firmware, even if the computer says nothing changed.",
    "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": "FM6 voices B1-B16",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (its RESTORE LAST is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only if a readable old autosave needs conversion and its patterns fit",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voices B17-B32",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if an older project can be read and its patterns need a new format",
        "effect": "lost"
       },
       {
        "way": "when you confirm clearing a pattern or song entry (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you copy or change an entry’s pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "preferences, calibration and MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if Skiff starts without recovering from a crash, freeze or failed start and has not already cleared the old scene storage",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel or change editor preferences (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm RESET SETTINGS (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you confirm a sample upload in the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you confirm a sample upload in the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you confirm a sample upload in the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a readable old Felucca/Skiff project needs conversion, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you choose SAVE AS in the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project with the web editor’s older save command (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a readable old Felucca/Skiff project needs conversion, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you choose SAVE AS in the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project with the web editor’s older save command (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a readable old Felucca/Skiff project needs conversion, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you choose SAVE AS in the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project with the web editor’s older save command (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a readable old Felucca/Skiff project needs conversion, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you choose SAVE AS in the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project with the web editor’s older save command (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working music (autosave)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a valid older FM6 patch bank is still stored and no current set of FM6 patches can be loaded",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save an FM6 user sound (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save, import, erase or rename a user sound (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save, import, erase or rename a user sound (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Unreadable settings use Skiff’s default RESTORE LAST ON.",
     "Skiff reads user samples USR1 until you write over the saved data. Skiff uses its own sound engines, so saved loops or slices can play differently.",
     "Skiff reads user samples USR2 until you write over the saved data. Skiff uses its own sound engines, so saved loops or slices can play differently.",
     "Skiff reads user samples USR3 until you write over the saved data. Skiff uses its own sound engines, so saved loops or slices can play differently."
    ],
    "owner_text": "At risk by itself: FM6 voices B1-B16; FM6 voices B17-B32; preferences, calibration and MIDI LEARN map; user samples USR1; user samples USR2; user samples USR3. At risk by itself, under a condition: project 1; project 2; project 3; project 4; working music (autosave). At risk when you act: user sounds U01-U16; user sounds U17-U32. Unreadable settings use Skiff’s default RESTORE LAST ON. Skiff reads user samples USR1 until you write over the saved data. Skiff uses its own sound engines, so saved loops or slices can play differently. Skiff reads user samples USR2 until you write over the saved data. Skiff uses its own sound engines, so saved loops or slices can play differently. Skiff reads user samples USR3 until you write over the saved data. Skiff uses its own sound engines, so saved loops or slices can play differently.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "sloopdx",
    "name": "sloopDX",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "working music (autosave)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the working loop has unsaved changes, no song is playing, and you start an update or enter UPDATE MODE",
        "effect": "lost"
       },
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only when you leave a bank with unsaved voice changes and a bank is active",
        "effect": "lost"
       },
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you erase the selected bank from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save MY KIT by tapping SAVE twice from KIT or LANE (asks first: press again to confirm)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you save the active bank by tapping EDIT twice on Store (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you save the active bank from the DX7 list (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the active bank from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send MY KIT from the web editor (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send a DX7 bank from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a DX7 bank with a computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "preferences, calibration and MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the saved input setting selects one MIDI channel rather than NOTES or CLOCK",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls at power-on (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings, MIDI controls or a theme with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when you leave a bank with unsaved voice changes and a bank is active",
        "effect": "lost"
       },
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you erase the selected bank from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save the active bank by tapping EDIT twice on Store (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you save the active bank from the DX7 list (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the active bank from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a DX7 bank with a computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a section and confirm it on the SECTION page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save a section with SAVE and white keys 5–8 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a section and confirm it on the SECTION page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save a section with SAVE and white keys 5–8 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a section and confirm it on the SECTION page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save a section with SAVE and white keys 5–8 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a section and confirm it on the SECTION page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save a section with SAVE and white keys 5–8 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: working music (autosave); user samples USR2; preferences, calibration and MIDI LEARN map. At risk by itself, under a condition: user samples USR1. At risk when you act: project 1; project 2; project 3; project 4; 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": "rainbow",
    "name": "Rainbow Mode",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "preferences, calibration and MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if a greeting name was entered in the installer",
        "effect": "lost"
       },
       {
        "way": "when you change Rainbow preferences or save its greeting name (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a user preset (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you run hardware calibration (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or a name from the editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voices B1-B16",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if you open the full version of Felucca by holding HOME + SAVE for 3 seconds and its RESTORE LAST is on (the default)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working music (autosave)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save an FM6 user sound (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current FM6 sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice markers (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice markers (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice markers (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "The full Felucca in Rainbow Mode may start with RESTORE LAST ON after Jangada, even if you turned it OFF before. Jangada saves its own settings at several points, replacing the earlier settings with ones the full Felucca in Rainbow Mode cannot read; an older choice saved by another firmware can also mean the opposite here. Check MENU > SYSTEM > RESTORE LAST in the full Felucca layer before you edit. ON allows automatic saving after edits and a pause with playback stopped, keys and buttons released, and no sound; OFF stops that autosave.",
     "Rainbow Mode reads user samples USR1 until you write over the saved data. Only data in this sample slot is read. Other saved work is separate.",
     "Rainbow Mode reads user samples USR2 until you write over the saved data. Only data in this sample slot is read. Other saved work is separate.",
     "Rainbow Mode reads user samples USR3 until you write over the saved data. Only data in this sample slot is read. Other saved work is separate."
    ],
    "owner_text": "At risk by itself: preferences, calibration and MIDI LEARN map. At risk by itself, under a condition: FM6 voices B1-B16. At risk when you act: project 1; project 2; project 3; project 4; working music (autosave); user sounds U01-U16; user sounds U17-U32; user samples USR1; user samples USR2; user samples USR3. The full Felucca in Rainbow Mode may start with RESTORE LAST ON after Jangada, even if you turned it OFF before. Jangada saves its own settings at several points, replacing the earlier settings with ones the full Felucca in Rainbow Mode cannot read; an older choice saved by another firmware can also mean the opposite here. Check MENU > SYSTEM > RESTORE LAST in the full Felucca layer before you edit. ON allows automatic saving after edits and a pause with playback stopped, keys and buttons released, and no sound; OFF stops that autosave. Rainbow Mode reads user samples USR1 until you write over the saved data. Only data in this sample slot is read. Other saved work is separate. Rainbow Mode reads user samples USR2 until you write over the saved data. Only data in this sample slot is read. Other saved work is separate. Rainbow Mode reads user samples USR3 until you write over the saved data. Only data in this sample slot is read. Other saved work is separate.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "duell",
    "name": "DUELL beta",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 voices B1-B16",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (its RESTORE LAST is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only if loading M01 at first start changes the music and RESTORE LAST is on",
        "effect": "lost"
       },
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "preferences, calibration and MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change MIDI LEARN (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change USB serial settings from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you change preferences from the editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voices B17-B32",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if an earlier compatible bank upload is still stored and the saved bank is missing or older",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working music (autosave)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a patch on the panel (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or import a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user wavetable directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a patch on the panel (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you save or import a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send a patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send a user wavetable directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a user wavetable from the editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a patch on the panel (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or import a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you save a multi directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you save a multi from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you save a patch on the panel (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a pattern (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you save or import a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a patch on the panel (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or import a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a patch on the panel (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or import a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "The installer starts with its erase option selected for this firmware change. Clear it before installing to avoid this extra erase."
    ],
    "owner_text": "At risk by itself: FM6 voices B1-B16; preferences, calibration and MIDI LEARN map. At risk by itself, under a condition: FM6 voices B17-B32. At risk when you act: project 1; project 2; project 3; project 4; working music (autosave); user samples USR1; user samples USR2; user samples USR3; user sounds U01-U16; user sounds U17-U32. The installer starts with its erase option selected for this firmware change. Clear it before installing to avoid this extra erase.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "fimba",
    "name": "FiMba-1 beta",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "preferences, calibration and MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE briefly (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: preferences, calibration and MIDI LEARN map. 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": "maku",
    "name": "MAKU",
    "flags": "CS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "working music (autosave)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a valid older FM6 bank is still stored and no valid set of FM6 patches for your sounds is stored",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voices B1-B16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC for about two seconds to clear every like (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you tap REC to like the current world (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "preferences, calibration and MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold OCT- and OCT+ while powering on (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself, under a condition: working music (autosave). At risk when you act: FM6 voices B1-B16; preferences, calibration and MIDI LEARN map.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "fart",
    "name": "Fart Machine One",
    "flags": "S",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Fart Machine One does not import or save a music setup or loop. SAVE does nothing. Its recorded loop, tempo and effect choices last only while it stays on. Calibration is separate."
    ],
    "owner_text": "At risk when you act: user sounds U01-U16. Fart Machine One does not import or save a music setup or loop. SAVE does nothing. Its recorded loop, tempo and effect choices last only while it stays on. Calibration is separate.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "chord",
    "name": "fm1-chord",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "preferences, calibration and MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change favourites or their filter (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send preferences from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working music (autosave)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 bank patch from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase an FM6 bank patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "fm1-chord reads user samples USR1 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
     "fm1-chord reads user samples USR2 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
     "fm1-chord reads user samples USR3 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored."
    ],
    "owner_text": "At risk by itself: preferences, calibration and MIDI LEARN map. At risk when you act: project 1; project 2; project 3; project 4; working music (autosave); user sounds U01-U16; user sounds U17-U32; user samples USR1; user samples USR2; user samples USR3. fm1-chord reads user samples USR1 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored. fm1-chord reads user samples USR2 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored. fm1-chord reads user samples USR3 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "sloopbanks",
    "name": "SLOOP DX7 Banks",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "working music (autosave)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the working loop has unsaved changes, no song is playing, and you start an update, enter UPDATE MODE or restart with the computer tool",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you have restored a working loop from a backup",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "preferences, calibration and MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a song order from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voices B1-B16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 bank patch from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voices B17-B32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "SLOOP DX7 Banks reads user samples USR1 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP DX7 Banks reads user samples USR2 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP DX7 Banks reads user samples USR3 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops."
    ],
    "owner_text": "At risk by itself: working music (autosave); preferences, calibration and MIDI LEARN map. At risk when you act: project 1; project 2; project 3; project 4; user sounds U01-U16; user sounds U17-U32; FM6 voices B1-B16; FM6 voices B17-B32; user samples USR1; user samples USR2; user samples USR3. SLOOP DX7 Banks reads user samples USR1 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP DX7 Banks reads user samples USR2 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP DX7 Banks reads user samples USR3 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "fumi",
    "name": "FuMi-1",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "preferences, calibration and MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: preferences, calibration and MIDI LEARN map. 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": "waveloop",
    "name": "WaveLoop FM-1",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use, from its second start, after five seconds with playback stopped, no sound and no music changes",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or rename this song from the panel while playback has stopped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save this song or rename it from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at its first start, after five seconds with playback stopped, no sound and no music changes",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or rename this song from the panel while playback has stopped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save this song or rename it from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "preferences, calibration and MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the buttons and knob at power-on; cancelling also requests a settings save (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change a favourite mark or the filter for favourites (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a starred user sound, which also removes its favourite mark (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you run MENU calibration, then close MENU (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send MENU settings, display preferences or favourite changes from the editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if this song is chosen for automatic saving after loading, saving or restoring a session, and project slot D is empty, holds a session saved automatically for the next start or holds data WaveLoop cannot read; playback must be stopped, with five seconds of silence and no music changes",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or rename this song from the panel while playback has stopped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save this song or rename it from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if this song is chosen for automatic saving after loading, saving or restoring a session, and project slot D is empty, holds a session saved automatically for the next start or holds data WaveLoop cannot read; playback must be stopped, with five seconds of silence and no music changes",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or rename this song from the panel while playback has stopped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save this song or rename it from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if the song order or selection has unsaved changes and project slot D is empty, holds WaveLoop’s automatically saved session or holds data WaveLoop cannot read",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only if this song is chosen for automatic saving after loading, saving or restoring a session, and project slot D is empty, holds a session saved automatically for the next start or holds data WaveLoop cannot read; playback must be stopped, with five seconds of silence and no music changes",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or rename this song from the panel while playback has stopped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save this song or rename it from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working music (autosave)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save an FM6 or DRUM user sound (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current FM6 or DRUM sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice markers (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice markers (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "WaveLoop FM-1 reads user samples USR1 until you write over the saved data. Only data in this sample slot is read. Other saved work is separate. Saved samples may have no slice positions set by you.",
     "WaveLoop FM-1 reads user samples USR2 until you write over the saved data. Only data in this sample slot is read. Other saved work is separate. Saved samples may have no slice positions set by you."
    ],
    "owner_text": "At risk by itself: project 1; project 4; preferences, calibration and MIDI LEARN map. At risk by itself, under a condition: project 2; project 3; user samples USR3. At risk when you act: working music (autosave); user sounds U01-U16; user sounds U17-U32; user samples USR1; user samples USR2. WaveLoop FM-1 reads user samples USR1 until you write over the saved data. Only data in this sample slot is read. Other saved work is separate. Saved samples may have no slice positions set by you. WaveLoop FM-1 reads user samples USR2 until you write over the saved data. Only data in this sample slot is read. Other saved work is separate. Saved samples may have no slice positions set by you.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "orbit",
    "name": "ORBIT",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "working music (autosave)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "preferences, calibration and MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels",
        "effect": "lost"
       },
       {
        "way": "automatically, only when song order has an unsaved change as an update or restart starts",
        "effect": "lost"
       },
       {
        "way": "when you hold both OCT buttons as you turn it on to calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on the SONG screen (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored during playback or before a restart is still waiting to be saved",
        "effect": "lost"
       },
       {
        "way": "when you choose SAVE > PROJECT > SAVE and repeat the action before the time runs out (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE and press white key 5–8 to save section A–D (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save, restore or clear a section with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored during playback or before a restart is still waiting to be saved",
        "effect": "lost"
       },
       {
        "way": "when you choose SAVE > PROJECT > SAVE and repeat the action before the time runs out (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE and press white key 5–8 to save section A–D (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save, restore or clear a section with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored during playback or before a restart is still waiting to be saved",
        "effect": "lost"
       },
       {
        "way": "when you choose SAVE > PROJECT > SAVE and repeat the action before the time runs out (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE and press white key 5–8 to save section A–D (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save, restore or clear a section with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored during playback or before a restart is still waiting to be saved",
        "effect": "lost"
       },
       {
        "way": "when you choose SAVE > PROJECT > SAVE and repeat the action before the time runs out (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE and press white key 5–8 to save section A–D (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save, restore or clear a section with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose SAVE > USER > SAVE or ERASE and repeat the action (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, erase, rename or restore user sounds with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store DX7 cartridge voices with optional USER sound links from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose SAVE > USER > SAVE or ERASE and repeat the action (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, erase, rename or restore user sounds with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store DX7 cartridge voices with optional USER sound links from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voices B1-B16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send, erase or restore FM6 patches with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store an FM6 patch from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store selected DX7 cartridge voices from the web editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voices B17-B32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or restore a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample, CHOP selection or drum kit from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or restore a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample, CHOP selection or drum kit from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or restore a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample, CHOP selection or drum kit from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or restore a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample, CHOP selection or drum kit from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "ORBIT reads user samples USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "ORBIT reads user samples USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "ORBIT reads user samples USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules."
    ],
    "owner_text": "At risk by itself: working music (autosave); preferences, calibration and MIDI LEARN map. At risk by itself, under a condition: project 1; project 2; project 3; project 4. At risk when you act: user sounds U01-U16; user sounds U17-U32; FM6 voices B1-B16; FM6 voices B17-B32; user samples USR1; user samples USR2; user samples USR3. ORBIT reads user samples USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. ORBIT reads user samples USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. ORBIT reads user samples USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "floyd",
    "name": "SLOOP Floyd FM",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "working music (autosave)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "preferences, calibration and MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls from HOME and close the menu (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start calibrating the controls at power-on (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a section (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a section (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a section (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a section (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save or erase a user sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save or erase a user sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "SLOOP Floyd FM reads user samples USR1 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP Floyd FM reads user samples USR2 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP Floyd FM reads user samples USR3 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops."
    ],
    "owner_text": "At risk by itself: working music (autosave); preferences, calibration and MIDI LEARN map. At risk when you act: project 1; project 2; project 3; project 4; user sounds U01-U16; user sounds U17-U32; user samples USR1; user samples USR2; user samples USR3. SLOOP Floyd FM reads user samples USR1 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP Floyd FM reads user samples USR2 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP Floyd FM reads user samples USR3 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "winampfm",
    "name": "winampFM Synth",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "working music (autosave)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "preferences, calibration and MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section A directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section A (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section B directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section B (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section C directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section C (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section D directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section D (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voices B1-B16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you store, erase or restore FM6 patches directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voices B17-B32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "winampFM Synth reads user samples USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth reads user samples USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth reads user samples USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules."
    ],
    "owner_text": "At risk by itself: working music (autosave); preferences, calibration and MIDI LEARN map. At risk by itself, under a condition: project 1; project 2; project 3; project 4. At risk when you act: user sounds U01-U16; user sounds U17-U32; FM6 voices B1-B16; FM6 voices B17-B32; user samples USR1; user samples USR2; user samples USR3. winampFM Synth reads user samples USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth reads user samples USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth reads user samples USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "bubba",
    "name": "Bubba Machine (beta)",
    "flags": "ACS?",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you select a different pattern while playback is stopped and the current pattern or one waiting to be saved needs saving",
        "effect": "lost"
       },
       {
        "way": "when you copy to another pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a pattern or Save As (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save song and scenes (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you select a different pattern while playback is stopped and the current pattern or one waiting to be saved needs saving",
        "effect": "lost"
       },
       {
        "way": "when you copy to another pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a pattern or Save As (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save song and scenes (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you select a different pattern while playback is stopped and the current pattern or one waiting to be saved needs saving",
        "effect": "lost"
       },
       {
        "way": "when you copy to another pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a pattern or Save As (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save song and scenes (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you select a different pattern while playback is stopped and the current pattern or one waiting to be saved needs saving",
        "effect": "lost"
       },
       {
        "way": "when you copy to another pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a pattern or Save As (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save song and scenes (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working music (autosave)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you select a different pattern while playback is stopped and the current pattern or one waiting to be saved needs saving",
        "effect": "lost"
       },
       {
        "way": "when you copy to another pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a pattern or Save As (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save song and scenes (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you select a different pattern while playback is stopped and the current pattern or one waiting to be saved needs saving",
        "effect": "lost"
       },
       {
        "way": "when you copy to another pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a pattern or Save As (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save song and scenes (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when a new recording finishes and playback is stopped",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you select a different pattern while playback is stopped and the current pattern or one waiting to be saved needs saving",
        "effect": "lost"
       },
       {
        "way": "when you copy to another pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a pattern or Save As (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save song and scenes (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sound or DX7 bank from the control page or with the computer tool (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you upload a take from the control page or with the computer tool (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       },
       {
        "way": "when you load or remove a screen language pack (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a new recording finishes and playback is stopped",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       },
       {
        "way": "when you load or remove a screen language pack (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send a sound or DX7 bank from the control page or with the computer tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a take from the control page or with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voices B1-B16",
      "effect": "lost",
      "ways": [
       {
        "way": "at an unknown time (the chip maker's code that does this is not public)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voices B17-B32",
      "effect": "lost",
      "ways": [
       {
        "way": "at an unknown time (the chip maker's code that does this is not public)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: project 1; project 2; project 3; project 4; working music (autosave); user samples USR1; user samples USR2; user sounds U01-U16; user sounds U17-U32. At risk by itself, under a condition: user samples USR3. At risk when you act: FM6 voices B1-B16; FM6 voices B17-B32.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "salt",
    "name": "Felucca [Salt]",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "preferences, calibration and MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you erase a user sound (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you run hardware calibration (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send display or favourite changes from the editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a user sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a user sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send samples to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send samples to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send samples to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Felucca [Salt] reads user samples USR1 until you write over the saved data. Slice positions you set in SLICE stay hidden. This firmware has no storage for slice positions.",
     "Felucca [Salt] reads user samples USR2 until you write over the saved data. Slice positions you set in SLICE stay hidden. This firmware has no storage for slice positions.",
     "Felucca [Salt] reads user samples USR3 until you write over the saved data. Slice positions you set in SLICE stay hidden. This firmware has no storage for slice positions."
    ],
    "owner_text": "At risk by itself: preferences, calibration and MIDI LEARN map. At risk when you act: project 1; project 2; project 3; project 4; user sounds U01-U16; user sounds U17-U32; user samples USR1; user samples USR2; user samples USR3. Felucca [Salt] reads user samples USR1 until you write over the saved data. Slice positions you set in SLICE stay hidden. This firmware has no storage for slice positions. Felucca [Salt] reads user samples USR2 until you write over the saved data. Slice positions you set in SLICE stay hidden. This firmware has no storage for slice positions. Felucca [Salt] reads user samples USR3 until you write over the saved data. Slice positions you set in SLICE stay hidden. This firmware has no storage for slice positions.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "pigeon",
    "name": "PIGEON",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 voices B1-B16",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "preferences, calibration and MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only when playback stops after you learn or clear a MIDI mapping",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore compatible backup data with another MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send preferences from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when you edit the sampler and its matching sample leaves room to save those edits",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample in USR1 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample in USR1 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase the PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample in USR1 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample in USR1 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore compatible backup data with another MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save or paste the selected pattern (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore compatible backup data with another MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save or paste the selected pattern (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore compatible backup data with another MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save or paste the selected pattern (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore compatible backup data with another MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save or paste the selected pattern (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working music (autosave)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore compatible backup data with another MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample in USR2 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample in USR2 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase the PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample in USR2 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a PIGEON bank with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample in USR2 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample in USR3 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample in USR3 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase the PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample in USR3 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a PIGEON bank with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample in USR3 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore compatible backup data with another MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore compatible backup data with another MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "PIGEON reads user samples USR1 until you write over the saved data. Sample audio can be read. Loops and slices may play differently; we have not tested whether they sound the same.",
     "PIGEON reads user samples USR2 until you write over the saved data. Sample audio can be read. Loops and slices may play differently; we have not tested whether they sound the same.",
     "PIGEON reads user samples USR3 until you write over the saved data. Sample audio can be read. Loops and slices may play differently; we have not tested whether they sound the same."
    ],
    "owner_text": "At risk by itself: FM6 voices B1-B16; preferences, calibration and MIDI LEARN map. At risk by itself, under a condition: user samples USR1. At risk when you act: project 1; project 2; project 3; project 4; working music (autosave); user samples USR2; user samples USR3; user sounds U01-U16; user sounds U17-U32. PIGEON reads user samples USR1 until you write over the saved data. Sample audio can be read. Loops and slices may play differently; we have not tested whether they sound the same. PIGEON reads user samples USR2 until you write over the saved data. Sample audio can be read. Loops and slices may play differently; we have not tested whether they sound the same. PIGEON reads user samples USR3 until you write over the saved data. Sample audio can be read. Loops and slices may play differently; we have not tested whether they sound the same.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "fm1move",
    "name": "FM1 Move",
    "flags": "SK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a user sound from the device page (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a user sound from the device page (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voices B1-B16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear an FM6 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store or erase an FM6 sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store selected DX7 voices from the device page (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voices B17-B32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you clear a project with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you import a project from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on PROJECT or choose Save here in the device page, after removing any old fourth sample (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "preferences, calibration and MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking)",
        "effect": "changed to the new format: The next settings save replaces Jangada’s learned MIDI control assignments with FM1 Move’s kit settings. Jangada can still read the calibration and shared preferences. Only some settings are changed to the new format. Your songs are not stored in these settings. Switching back may lose settings"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "FM1 Move reads user samples USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move reads user samples USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move reads user samples USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules."
    ],
    "owner_text": "At risk when you act: user sounds U01-U16; user sounds U17-U32; FM6 voices B1-B16; FM6 voices B17-B32; preferences, calibration and MIDI LEARN map; user samples USR1; user samples USR2; user samples USR3. FM1 Move reads user samples USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move reads user samples USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move reads user samples USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "fm1quest",
    "name": "FM1 Quest",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "working music (autosave)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode or receive a firmware update",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "preferences, calibration and MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode with settings waiting to be saved",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on the SONG screen (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save section A from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project A (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section A from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section A (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project B (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section B (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project C (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section C (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project D (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section D (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H1 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H4 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H5 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H6 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P1 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P4 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P5 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P6 (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a user-sound bank with computer commands (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, save or erase a user sound with computer commands (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a user-sound bank with computer commands (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, save or erase a user sound with computer commands (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Quest can play your saved USR1 until you write over it, if its audio and zones fit Quest’s smaller sample slot. Sending a sample to USR1 or erasing it loses the old sample. This includes holding REC on USR1 in IMPORTER when Quest can read it. Sending a sample to USR2 or erasing USR2 can damage the end of the old USR1. Back up USR1 first."
    ],
    "owner_text": "At risk by itself: working music (autosave); preferences, calibration and MIDI LEARN map. At risk when you act: project 1; project 2; project 3; project 4; user samples USR1; user samples USR2; user samples USR3; user sounds U01-U16; user sounds U17-U32. Quest can play your saved USR1 until you write over it, if its audio and zones fit Quest’s smaller sample slot. Sending a sample to USR1 or erasing it loses the old sample. This includes holding REC on USR1 in IMPORTER when Quest can read it. Sending a sample to USR2 or erasing USR2 can damage the end of the old USR1. Back up USR1 first.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "grooveos",
    "name": "Groove OS",
    "flags": "?",
    "weakest_grade": null,
    "at_risk": [],
    "possibly_at_risk": [
     "preferences, calibration and MIDI LEARN map",
     "project 1",
     "project 2",
     "project 3",
     "project 4",
     "working music (autosave)",
     "user sounds U01-U16",
     "user sounds U17-U32",
     "FM6 voices B1-B16",
     "FM6 voices B17-B32",
     "FM6 voices B33-B48",
     "FM6 voices B49-B64",
     "user samples USR1",
     "user samples USR2",
     "user samples USR3"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "The official route first puts V15 back, then installs Groove OS. Treat this firmware’s saved work as lost and back it up with its own tools before starting. Groove OS’s project saves, autosave, preferences, sample uploads and extra installed pages can also replace leftover work; nobody has published which parts of storage they use. A sound missing from PRESETS may still occupy storage, and do not count on Groove OS’s own backups to keep it."
    ],
    "owner_text": "Possibly at risk (layout reported or inferred): preferences, calibration and MIDI LEARN map; project 1; project 2; project 3; project 4; working music (autosave); user sounds U01-U16; user sounds U17-U32; FM6 voices B1-B16; FM6 voices B17-B32; FM6 voices B33-B48; FM6 voices B49-B64; user samples USR1; user samples USR2; user samples USR3. The official route first puts V15 back, then installs Groove OS. Treat this firmware’s saved work as lost and back it up with its own tools before starting. Groove OS’s project saves, autosave, preferences, sample uploads and extra installed pages can also replace leftover work; nobody has published which parts of storage they use. A sound missing from PRESETS may still occupy storage, and do not count on Groove OS’s own backups to keep it.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   }
  ]
 },
 "disagreements": [
  {
   "topic": "Playback light still blinks",
   "docs_say": "The lights section says indications avoid hard blinking.",
   "source_says": "The PLAY light switches on and off while transport runs; locked layers and confirmation lights use a separate breathing path.",
   "docs_ref": {
    "kind": "doc",
    "repo": "zednaked/jangada",
    "ref": "v1.0.1",
    "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
    "path": "README.md",
    "lines": "412-413",
    "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/README.md#L412-L413"
   },
   "source_ref": {
    "kind": "source",
    "repo": "zednaked/jangada",
    "ref": "v1.0.1",
    "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
    "path": "firmware/src/ui_input.c",
    "lines": "119-128",
    "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L119-L128"
   }
  },
  {
   "topic": "Engine selection uses thirteen white keys",
   "docs_say": "The PRESETS explanation points to engine choices on keys 1–12 in the EDIT layer.",
   "source_says": "The engine layer accepts keys 1 through NENGINES; this release defines thirteen engines, so key 13 selects ROBO.",
   "docs_ref": {
    "kind": "doc",
    "repo": "zednaked/jangada",
    "ref": "v1.0.1",
    "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
    "path": "README.md",
    "lines": "252-254",
    "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/README.md#L252-L254"
   },
   "source_ref": {
    "kind": "source",
    "repo": "zednaked/jangada",
    "ref": "v1.0.1",
    "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
    "path": "firmware/src/ui_layers.c",
    "lines": "438-448",
    "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_layers.c#L438-L448"
   }
  },
  {
   "topic": "Track filter on drum track",
   "docs_say": "The track-filter feature is described as applying to every track.",
   "source_says": "The drum track’s DIST page has no editable controls because page_for_drum rejects this track page.",
   "docs_ref": {
    "kind": "doc",
    "repo": "zednaked/jangada",
    "ref": "v1.0.1",
    "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
    "path": "README.md",
    "lines": "357-358",
    "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/README.md#L357-L358"
   },
   "source_ref": {
    "kind": "source",
    "repo": "zednaked/jangada",
    "ref": "v1.0.1",
    "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
    "path": "firmware/src/params.c",
    "lines": "451-455",
    "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/params.c#L451-L455"
   }
  },
  {
   "topic": "Momentary edit scope",
   "docs_say": "The guide describes every knob-edited value as returning when LFO is released.",
   "source_says": "At most sixteen ordinary HOME or page values are remembered; PROJECT LOAD/SAVE, TOOLS CLEAR/INIT, USER, KIT/BEAT, browsing, steps, TRACKS and performance-layer knobs keep their lasting effects when LFO is released.",
   "docs_ref": {
    "kind": "doc",
    "path": "README.md",
    "ref": "v1.0.1",
    "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
    "lines": "321-323",
    "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/README.md#L321-L323"
   },
   "source_ref": {
    "kind": "source",
    "repo": "zednaked/jangada",
    "ref": "v1.0.1",
    "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
    "path": "firmware/src/ui_input.c",
    "lines": "296-376",
    "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L296-L376"
   }
  },
  {
   "topic": "Delay throw on the drum track",
   "docs_say": "The guide describes the delay throw as raising every track’s send.",
   "source_says": "The throw raises synth delay sends; the drum renderer has a reverb send only.",
   "docs_ref": {
    "kind": "doc",
    "path": "README.md",
    "ref": "v1.0.1",
    "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
    "lines": "324-325",
    "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/README.md#L324-L325"
   },
   "source_ref": {
    "kind": "source",
    "repo": "zednaked/jangada",
    "ref": "v1.0.1",
    "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
    "path": "firmware/src/drums.c",
    "lines": "135-140",
    "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/drums.c#L135-L140"
   }
  },
  {
   "topic": "Backup omits MIDI Learn",
   "docs_say": "The guide calls the editor backup complete and includes unit preferences among its contents.",
   "source_says": "The backup builds its preferences with an empty MIDI Learn map, and restoring that snapshot clears the learned assignments instead of restoring them.",
   "docs_ref": {
    "kind": "doc",
    "repo": "zednaked/jangada",
    "ref": "v1.0.1",
    "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
    "path": "README.md",
    "lines": "415-429",
    "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/README.md#L415-L429"
   },
   "source_ref": {
    "kind": "source",
    "repo": "zednaked/jangada",
    "ref": "v1.0.1",
    "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
    "path": "firmware/src/editor_backup.c",
    "lines": "67-76",
    "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/editor_backup.c#L67-L76"
   },
   "additional_source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/editor_backup.c",
     "lines": "134-149",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/editor_backup.c#L134-L149"
    }
   ]
  },
  {
   "topic": "Felucca import is limited to early formats",
   "docs_say": "The guide promises conversion of Felucca projects and presets without specifying a version limit.",
   "source_says": "Jangada converts early Felucca projects and first-generation preset records; Felucca v1.6.1 projects appear empty and its newer user-sound records appear empty, so saving or erasing another slot in that group can rewrite the group without preserving them.",
   "docs_ref": {
    "kind": "doc",
    "repo": "zednaked/jangada",
    "ref": "v1.0.1",
    "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
    "path": "README.md",
    "lines": "427-429",
    "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/README.md#L427-L429"
   },
   "source_ref": {
    "kind": "source",
    "repo": "zednaked/jangada",
    "ref": "v1.0.1",
    "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
    "path": "firmware/src/project.c",
    "lines": "410-419",
    "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L410-L419"
   },
   "additional_source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/project.c",
     "lines": "26-35",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L26-L35"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/project.c",
     "lines": "487-498",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L487-L498"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/upreset.c",
     "lines": "113-119",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/upreset.c#L113-L119"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/upreset.c",
     "lines": "170-185",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/upreset.c#L170-L185"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/upreset.c",
     "lines": "347-367",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/upreset.c#L347-L367"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/project.c",
     "lines": "97-105",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/project.c#L97-L105"
    },
    {
     "kind": "source",
     "repo": "hugelton/Felucca",
     "ref": "v1.6.1",
     "commit": "a53ecf428c29c780108fd70a31b71a32a6b5c313",
     "path": "firmware/src/upreset.c",
     "lines": "48-55",
     "url": "https://github.com/hugelton/Felucca/blob/a53ecf428c29c780108fd70a31b71a32a6b5c313/firmware/src/upreset.c#L48-L55"
    }
   ]
  }
 ],
 "not_mapped": [],
 "behaviour_notes": [
  {
   "topic": "Storage timing",
   "text": "Pattern and sound changes stay in memory until a named save or the working-project autosave; switching the power off is not a save command.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/project.c",
     "lines": "607-625",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L607-L625"
    }
   ]
  },
  {
   "topic": "Menu save even without an edit",
   "text": "With no accepted preferences, simply closing the menu can write Jangada’s preferences without asking; calibration timeout runs the same save check.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/ui_menu.c",
     "lines": "143-148",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L143-L148"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/main.c",
     "lines": "233-239",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/main.c#L233-L239"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/project.c",
     "lines": "719-736",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L719-L736"
    }
   ]
  },
  {
   "topic": "Returning a preference to zero",
   "text": "On CLICK, choosing zero changes the current value but does not itself schedule a preference write; close the HOME menu to store that choice.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/ui_input.c",
     "lines": "374-398",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L374-L398"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/ui_menu.c",
     "lines": "143-148",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_menu.c#L143-L148"
    }
   ]
  },
  {
   "topic": "Second-core preference",
   "text": "Changing 2ND CORE takes effect at the next start.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/panel.c",
     "lines": "87-90",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/panel.c#L87-L90"
    }
   ]
  },
  {
   "topic": "GM and user samples",
   "text": "SAMPLE and GRAIN share three uploaded sample slots; a SAMPLE drum kit uses its own key map.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/eng_sample.c",
     "lines": "36-45",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_sample.c#L36-L45"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/eng_grain.c",
     "lines": "5-9",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_grain.c#L5-L9"
    }
   ]
  },
  {
   "topic": "Failed-start recovery",
   "text": "A crash or hang before the first 30 seconds have cleared the startup guard counts toward automatic USB rescue after two failed starts across warm resets; a normal start with a recorded failure skips loading the saved working music and can later autosave defaults over it without asking, while rescue entry alone writes nothing.",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/main.c",
     "lines": "247-254",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/main.c#L247-L254"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/main.c",
     "lines": "364-387",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/main.c#L364-L387"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/bootguard.h",
     "lines": "16-26",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/bootguard.h#L16-L26"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/project.c",
     "lines": "607-642",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L607-L642"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/recovery.c",
     "lines": "54-72",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/recovery.c#L54-L72"
    }
   ]
  }
 ],
 "external_tools": [
  {
   "feature": "Back up",
   "short_label": "Backup",
   "action": "Read the stopped unit into a dated backup file on the computer.",
   "notes": "The file reads the connected unit’s current music, four project slots, 32 user sounds, both FM6 banks, three sample sets and preferences/calibration; MIDI Learn, factory content, other firmware data and undo history are absent, and reading makes no flash save.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "web/editor.html",
     "lines": "4503-4508",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/web/editor.html#L4503-L4508"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "web/fm1backup.js",
     "lines": "126-148",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/web/fm1backup.js#L126-L148"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/editor_backup.c",
     "lines": "67-109",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/editor_backup.c#L67-L109"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/editor_backup.c",
     "lines": "247-278",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/editor_backup.c#L247-L278"
    }
   ]
  },
  {
   "feature": "Restore backup",
   "short_label": "Restore",
   "action": "After one browser confirmation, replace the data represented in the backup file.",
   "notes": "The browser asks once and writes each represented destination separately, clearing empty saved slots and leaving omitted FM6 banks alone in supported older files; current music goes to memory for later autosave, MIDI Learn is cleared by this release’s own file, interruption can leave mixed old and new work, and there is no undo.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "web/editor.html",
     "lines": "4510-4527",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/web/editor.html#L4510-L4527"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "web/fm1backup.js",
     "lines": "107-123",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/web/fm1backup.js#L107-L123"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "web/fm1backup.js",
     "lines": "151-199",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/web/fm1backup.js#L151-L199"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/editor_backup.c",
     "lines": "114-184",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/editor_backup.c#L114-L184"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/editor_backup.c",
     "lines": "67-76",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/editor_backup.c#L67-L76"
    }
   ]
  },
  {
   "feature": "Save project from editor",
   "short_label": "Save project",
   "action": "After a browser question, save the current four-track music into the chosen project slot at once.",
   "notes": "Each project stores its four tracks, sequence details and live FM6 patches, while sample audio stays shared and macro positions and unit preferences are excluded; it writes at once with no device question or undo, while the panel uses a second clockwise turn.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "web/editor.html",
     "lines": "3072-3081",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/web/editor.html#L3072-L3081"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/editor.c",
     "lines": "416-425",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/editor.c#L416-L425"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/project.c",
     "lines": "439-482",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L439-L482"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/core.h",
     "lines": "105-119",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/core.h#L105-L119"
    }
   ]
  },
  {
   "feature": "Store user sound",
   "short_label": "Store sound",
   "action": "Write the selected sound and its sixteen-step sketch to a user slot at once.",
   "notes": "A stored sound includes its sixteen-step sketch and rewrites its entire group of sixteen immediately; the editor asks over a used slot, commands sent directly have no question, and unreadable older sounds in the group can be lost without undo.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/ui_input.c",
     "lines": "331-347",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L331-L347"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/upreset.c",
     "lines": "113-225",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/upreset.c#L113-L225"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/upreset.c",
     "lines": "347-408",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/upreset.c#L347-L408"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/upreset.c",
     "lines": "475-501",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/upreset.c#L475-L501"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/editor.c",
     "lines": "538-582",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/editor.c#L538-L582"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "web/editor.html",
     "lines": "4569-4600",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/web/editor.html#L4569-L4600"
    }
   ]
  },
  {
   "feature": "Upload user sample",
   "short_label": "Upload",
   "action": "After a browser question, replace one user sample set through USB.",
   "notes": "Each of three sets holds up to sixteen zones and about 79.5 KiB of encoded audio; upload destroys the old sample’s header at the start, erasing a slot removes the whole set, the browser asks but commands sent directly do not, and neither has undo.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/eng_sample.c",
     "lines": "41-54",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/eng_sample.c#L41-L54"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/editor.c",
     "lines": "95-125",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/editor.c#L95-L125"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/editor.c",
     "lines": "437-473",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/editor.c#L437-L473"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "web/editor.html",
     "lines": "3320-3331",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/web/editor.html#L3320-L3331"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "web/editor.html",
     "lines": "3356-3365",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/web/editor.html#L3356-L3365"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "web/fm1backup.js",
     "lines": "164-180",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/web/fm1backup.js#L164-L180"
    }
   ]
  },
  {
   "feature": "Read/write FM6 bank",
   "short_label": "FM6 banks",
   "action": "Read or replace either bank of thirty-two FM6 voices through USB.",
   "notes": "Bank send asks once and commits sixteen voices at a time while stopped, so a failed second half can leave the first half replaced; a single-voice write or erase rewrites its entire half-bank at once and has no undo.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "web/editor.html",
     "lines": "4751-4769",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/web/editor.html#L4751-L4769"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "web/editor.html",
     "lines": "4790-4805",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/web/editor.html#L4790-L4805"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/editor_fm6.c",
     "lines": "53-103",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/editor_fm6.c#L53-L103"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/fm6_bank.c",
     "lines": "191-289",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/fm6_bank.c#L191-L289"
    }
   ]
  },
  {
   "feature": "DX7 bank SysEx receive",
   "short_label": "Receive bank",
   "action": "Store an incoming DX7 bank in the destination named by the FM6 track, or confirm a destination with SAVE.",
   "notes": "An incoming bank writes without a question when the FM6 track already points into a bank; otherwise SAVE confirms, OCT−/OCT+ choose bank 1/2, another button or fifteen seconds cancels, and the two halves write separately while stopped without undo.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/fm6_sysex.c",
     "lines": "28-49",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/fm6_sysex.c#L28-L49"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/fm6_sysex.c",
     "lines": "122-189",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/fm6_sysex.c#L122-L189"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/ui_input.c",
     "lines": "477-499",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ui_input.c#L477-L499"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/project.c",
     "lines": "439-468",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/project.c#L439-L468"
    }
   ]
  },
  {
   "feature": "Track sound SysEx",
   "short_label": "Sound dump",
   "action": "Read a track’s sound or send it back through USB without changing its mix or pattern.",
   "notes": "Sending a sound changes memory while preserving the mix and pattern, with missing sound values returning to defaults; a later project save or autosave can keep it.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/editor_sound.c",
     "lines": "15-90",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/editor_sound.c#L15-L90"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/editor.c",
     "lines": "670-695",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/editor.c#L670-L695"
    }
   ]
  },
  {
   "feature": "Firmware update",
   "short_label": "Update",
   "action": "Receive a firmware install through USB and restart into its updater.",
   "notes": "An update session can erase staging even if refused or failed, and the incoming loader replaces the program and matching update-record sectors; USB rescue alone makes no write, and any installer question is separate from the device protocol.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/ota.c",
     "lines": "275-413",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/ota.c#L275-L413"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/loader/ldr_core.c",
     "lines": "91-175",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/loader/ldr_core.c#L91-L175"
    },
    {
     "kind": "source",
     "repo": "zednaked/jangada",
     "ref": "v1.0.1",
     "commit": "46e6c2c2ed94b609918aa6f5f7381fac915ffc45",
     "path": "firmware/src/recovery.c",
     "lines": "54-72",
     "url": "https://github.com/zednaked/jangada/blob/46e6c2c2ed94b609918aa6f5f7381fac915ffc45/firmware/src/recovery.c#L54-L72"
    }
   ]
  }
 ],
 "refresh_check_fixes": [
  {
   "round": 1,
   "error": "1 Autosave losses omitted",
   "fixed": "Rebuilt the autosave warning from every working-project overlap, including DUELL saved patches and Polly shared memory 4; retained conditional timing and avoided promising an unchanged second save.",
   "at": "switching_note.automatic_working_save; .md Automatic working save; storage.owner_switching_fact"
  },
  {
   "round": 1,
   "error": "2 Automatic second-core settings write",
   "fixed": "Named AUTO core failure as a control-free settings overwrite trigger, with every affected preference/setup object and calibration timing.",
   "at": "switching_note.settings_overwrites; .md Settings overwrites; storage.owner_switching_fact"
  },
  {
   "round": 1,
   "error": "3 FM6 voice-bank losses omitted",
   "fixed": "Rebuilt FM6-bank and sample warnings from their overlap rows, explicitly naming Felucca, JIANT, GHOULBOX and DUELL voice banks and every other affected object.",
   "at": "switching_note.bank_and_sample_overwrites; .md Bank and sample overwrites; storage.owner_switching_fact"
  },
  {
   "round": 1,
   "error": "4 Project and sound losses understated",
   "fixed": "Rebuilt both loss lists from project and user-bank rows, naming all user-sound groups, Melodee U001–U036, DUELL multis and patches, Polly QY70 styles and X0X whole-project return risk.",
   "at": "switching_note.project_and_user_overwrites; .md Project and user overwrites; storage.owner_switching_fact"
  },
  {
   "round": 1,
   "error": "5 Felucca import disagreement absent",
   "fixed": "Added the version-limited conversion disagreement and the whole-group rewrite warning, with both Jangada reader and Felucca v1.6.1 format evidence.",
   "at": "disagreements[6]; .md Where the docs and the firmware disagree"
  },
  {
   "round": 1,
   "error": "6 Project numbering",
   "fixed": "Changed project-slot labels in the two affected actions from A–D to the on-screen 1–4.",
   "at": "controls.encoder_knob1[29]; controls.encoder_knob4[29]; .md PROJECT"
  },
  {
   "round": 1,
   "error": "7 FM6 prompt conditions",
   "fixed": "Specified stopped/not-busy receiving and the chosen FM6 track’s destination; contrasted automatic bank writes and busy refusal.",
   "at": "modes[55]; .md FM6 incoming-bank mode"
  },
  {
   "round": 1,
   "error": "8 Failed-boot coverage",
   "fixed": "Appended USB rescue mode and screen and documented early-failure counting, skipped autosave restore, later default-project overwrite and no-write rescue.",
   "at": "modes[69]; controls.screen[64]; behaviour_notes[5]; storage.objects[5]"
  },
  {
   "round": 1,
   "error": "9 Momentary exclusions incomplete",
   "fixed": "Named every bypassed action and the sixteen-value limit in all four knob entries, held-LFO entry and disagreement.",
   "at": "controls.encoder_knob1[98]; encoder_knob2[97]; encoder_knob3[98]; encoder_knob4[97]; button_lfo; disagreements"
  },
  {
   "round": 1,
   "error": "10 HOME access",
   "fixed": "Corrected HOME access from the visualiser while retaining the TRACKS exception.",
   "at": "modes[61].how_to_get_there; .md The modes"
  },
  {
   "round": 1,
   "error": "11 Chord-page access",
   "fixed": "Replaced the SCL-page instruction with CHORD page and KEY-layer KNOB 1 routes.",
   "at": "modes[56].how_to_get_there; .md The modes"
  },
  {
   "round": 1,
   "error": "12 KIT screen text",
   "fixed": "Replaced the accidental knob-action description with the four displayed KIT values.",
   "at": "controls.screen[32]; .md KIT indicator"
  },
  {
   "round": 2,
   "error": "1 Failure record retained across restart",
   "fixed": "Restricted skipped working-music restoration to a warm restart retaining an early-failure record; explained power-cycle clearing, normal valid-autosave restore, and the 30-second clearing that does not reload skipped music.",
   "at": "switching_note.automatic_working_save; .md Automatic working save; storage.owner_switching_paragraphs.automatic_working_save; storage.owner_switching_fact; storage.objects[5]; storage.install_and_startup_writes[3]"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.button_oct_down[0].short_label",
   "old": "OCTAVE −",
   "new": "OCT −",
   "why": "firmware/src/ui_input.c:637-655@46e6c2c2ed94b609918aa6f5f7381fac915ffc45"
  }
 ]
}