[
  {
    "name": "sine_1hz_gain2",
    "ds": "stub",
    "signal": "sine_1hz",
    "pipeline": [
      { "type": "gain", "params": { "gain": 2.0 } }
    ],
    "meta": { "unit": "V", "description": "Sine 1Hz amplified x2", "displayLow": -2, "displayHigh": 2 }
  },
  {
    "name": "sine_avg10",
    "ds": "stub",
    "signal": "sine_1hz",
    "pipeline": [
      { "type": "moving_average", "params": { "window": 10 } }
    ],
    "meta": { "unit": "V", "description": "10-sample moving average of sine_1hz", "displayLow": -1, "displayHigh": 1 }
  },
  {
    "name": "setpoint_clamped",
    "ds": "stub",
    "signal": "setpoint",
    "pipeline": [
      { "type": "clamp", "params": { "min": 10, "max": 80 } }
    ],
    "meta": { "unit": "°C", "description": "Setpoint clamped to [10, 80]", "displayLow": 0, "displayHigh": 100 }
  }
]
