{
  "swagger": "2.0",
  "info": {
    "title": "Template service",
    "version": "0.1507.0",
    "description": "Send your API key as a bearer token: `Authorization: Bearer <api key>`."
  },
  "consumes": [
    "application/json"
  ],
  "produces": [
    "application/json"
  ],
  "securityDefinitions": {
    "ApiKey": {
      "type": "apiKey",
      "in": "header",
      "name": "Authorization",
      "description": "Your API key as a bearer token: `Authorization: Bearer <api key>`."
    }
  },
  "security": [
    {
      "ApiKey": []
    }
  ],
  "paths": {
    "/scout/v1/template": {
      "post": {
        "operationId": "TemplateService_create",
        "summary": "Create",
        "tags": [
          "TemplateService"
        ],
        "description": "Creates a new template.",
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/CreateTemplateRequest"
            },
            "required": true,
            "x-example": {
              "title": "<title>",
              "description": "<description>",
              "layout": {
                "type": "v1",
                "v1": {
                  "rootPanel": {
                    "type": "viz",
                    "viz": {
                      "type": "v1",
                      "v1": {
                        "id": "<panel id>",
                        "vizId": "<viz id>",
                        "hideLegend": true
                      }
                    }
                  }
                }
              },
              "content": {
                "channelVariables": {
                  "<key>": {
                    "variableName": "<channel variable name>",
                    "computeSpec": {
                      "type": "v1",
                      "v1": "<compute spec v1>"
                    }
                  }
                },
                "charts": {
                  "<key>": {
                    "type": "boundary",
                    "boundary": {
                      "type": "v1",
                      "v1": {
                        "type": {
                          "type": "source",
                          "source": {}
                        }
                      }
                    }
                  }
                }
              },
              "message": "<message>"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/Template"
            },
            "x-example": {
              "rid": "<template rid>",
              "metadata": {
                "title": "<title>",
                "description": "<description>",
                "labels": [
                  "<label>"
                ],
                "properties": {
                  "<key>": "<property value>"
                },
                "isArchived": true,
                "isPublished": true,
                "createdBy": "<user rid>",
                "createdAt": "2026-01-01T00:00:00Z",
                "updatedAt": "2026-01-01T00:00:00Z",
                "editedAt": "2026-01-01T00:00:00Z",
                "previewImage": {
                  "light": "<attachment rid>",
                  "dark": "<attachment rid>"
                }
              },
              "commit": {
                "id": "<commit id>",
                "resourceRid": "<resource rid>",
                "parentCommit": "<commit id>",
                "mergeParentCommit": "<commit id>",
                "message": "<message>",
                "isWorkingState": true,
                "committedBy": "<user rid>",
                "committedAt": "2026-01-01T00:00:00Z"
              },
              "charts": [
                {
                  "rid": "<viz id>",
                  "version": 1
                }
              ],
              "layout": {
                "type": "v1",
                "v1": {
                  "rootPanel": {
                    "type": "viz",
                    "viz": {
                      "type": "v1",
                      "v1": {
                        "id": "<panel id>",
                        "vizId": "<viz id>",
                        "hideLegend": true,
                        "hideLabel": true
                      }
                    }
                  }
                }
              },
              "content": {
                "channelVariables": {
                  "<key>": {
                    "displayName": "<display name>",
                    "variableName": "<channel variable name>",
                    "computeSpec": {
                      "type": "v1",
                      "v1": "<compute spec v1>"
                    },
                    "computeSpecV2": {
                      "computeNode": {
                        "type": "enum",
                        "enum": {
                          "type": "aggregate",
                          "aggregate": {
                            "function": "MIN"
                          }
                        }
                      },
                      "context": {
                        "variables": {
                          "<key>": {
                            "type": "variable",
                            "variable": "<variable name>"
                          }
                        }
                      },
                      "computeExpression": {
                        "type": "v1",
                        "v1": {
                          "type": "python",
                          "python": {
                            "expression": "<expression>",
                            "inputMap": {
                              "<key>": {
                                "value": {
                                  "type": "variable",
                                  "variable": "<channel variable name>"
                                },
                                "dataType": "NUMERIC_SERIES"
                              }
                            },
                            "nominalComputePythonVersion": "<nominal compute python version>"
                          }
                        }
                      }
                    }
                  }
                },
                "inputs": {
                  "type": "v1",
                  "v1": {
                    "inputs": [
                      {
                        "id": "<id>",
                        "label": "<label>",
                        "value": {
                          "type": "tag",
                          "tag": {
                            "key": {
                              "type": "literal",
                              "literal": {
                                "id": "<id>",
                                "value": "<value>"
                              }
                            },
                            "values": [
                              {
                                "type": "literal",
                                "literal": {
                                  "id": "<id>",
                                  "value": "<value>"
                                }
                              }
                            ]
                          }
                        }
                      }
                    ]
                  }
                },
                "charts": {
                  "<key>": {
                    "type": "boundary",
                    "boundary": {
                      "type": "v1",
                      "v1": {
                        "title": "<title>",
                        "type": {
                          "type": "source",
                          "source": {}
                        },
                        "fillColor": "<hex color>"
                      }
                    }
                  }
                },
                "settings": {
                  "assetSettings": {
                    "<key>": {
                      "offset": {
                        "duration": 1,
                        "unit": "DAYS"
                      },
                      "dataScopeOffsets": {
                        "<key>": {
                          "duration": 1,
                          "unit": "DAYS"
                        }
                      }
                    }
                  },
                  "runSettings": {
                    "<key>": {
                      "offset": {
                        "duration": 1,
                        "unit": "DAYS"
                      },
                      "assetSettings": {
                        "<key>": {
                          "offset": {
                            "duration": 1,
                            "unit": "DAYS"
                          },
                          "dataScopeOffsets": {
                            "<key>": {
                              "duration": 1,
                              "unit": "DAYS"
                            }
                          }
                        }
                      }
                    }
                  },
                  "timeSettings": {
                    "type": "v1",
                    "v1": {
                      "timeRangeType": "ABSOLUTE",
                      "globalTimeRange": {
                        "start": {
                          "seconds": 1,
                          "nanos": 1
                        },
                        "end": {
                          "seconds": 1,
                          "nanos": 1
                        }
                      },
                      "isGlobalTime": true,
                      "tabTimeRanges": {
                        "<key>": {
                          "start": {
                            "seconds": 1,
                            "nanos": 1
                          },
                          "end": {
                            "seconds": 1,
                            "nanos": 1
                          }
                        }
                      },
                      "relativeTimestampFormat": {
                        "type": "inherit",
                        "inherit": {}
                      }
                    }
                  },
                  "offsets": {
                    "type": "v1",
                    "v1": {
                      "runs": {
                        "<key>": {
                          "offset": {
                            "type": "custom",
                            "custom": {
                              "duration": 1,
                              "unit": "DAYS"
                            }
                          },
                          "assets": {
                            "<key>": {
                              "offset": {
                                "type": "custom",
                                "custom": {
                                  "duration": 1,
                                  "unit": "DAYS"
                                }
                              },
                              "dataSources": {
                                "<key>": {
                                  "type": "custom",
                                  "custom": {
                                    "duration": 1,
                                    "unit": "DAYS"
                                  }
                                }
                              }
                            }
                          }
                        }
                      },
                      "assets": {
                        "<key>": {
                          "offset": {
                            "type": "custom",
                            "custom": {
                              "duration": 1,
                              "unit": "DAYS"
                            }
                          },
                          "dataSources": {
                            "<key>": {
                              "type": "custom",
                              "custom": {
                                "duration": 1,
                                "unit": "DAYS"
                              }
                            }
                          }
                        }
                      },
                      "inputs": {
                        "<key>": {
                          "offset": {
                            "type": "custom",
                            "custom": {
                              "duration": 1,
                              "unit": "DAYS"
                            }
                          },
                          "assets": {
                            "<key>": {
                              "offset": {
                                "type": "custom",
                                "custom": {
                                  "duration": 1,
                                  "unit": "DAYS"
                                }
                              },
                              "dataSources": {
                                "<key>": {
                                  "type": "custom",
                                  "custom": {
                                    "duration": 1,
                                    "unit": "DAYS"
                                  }
                                }
                              }
                            }
                          },
                          "runs": {
                            "<key>": {
                              "offset": {
                                "type": "custom",
                                "custom": {
                                  "duration": 1,
                                  "unit": "DAYS"
                                }
                              },
                              "assets": {
                                "<key>": {
                                  "offset": {
                                    "type": "custom",
                                    "custom": {
                                      "duration": 1,
                                      "unit": "DAYS"
                                    }
                                  },
                                  "dataSources": {
                                    "<key>": {
                                      "type": "custom",
                                      "custom": {
                                        "duration": 1,
                                        "unit": "DAYS"
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  },
                  "defaultStalenessConfiguration": {
                    "threshold": {
                      "seconds": 1,
                      "nanos": 1
                    },
                    "connectStalePoints": true
                  },
                  "fillStrategy": {
                    "type": "forwardFill",
                    "forwardFill": {
                      "duration": 1,
                      "unit": "DAYS"
                    }
                  },
                  "alignmentStrategy": {
                    "type": "driverSeries",
                    "driverSeries": {}
                  },
                  "statsPanelScope": {
                    "type": "selectedTab",
                    "selectedTab": {}
                  }
                },
                "dataScopeInputs": {
                  "type": "v1",
                  "v1": {
                    "inputs": {
                      "<key>": {
                        "name": "<workbook data scope input name>",
                        "label": "<label>",
                        "value": {
                          "type": "asset",
                          "asset": {
                            "assetRid": "<asset rid>"
                          }
                        },
                        "colorMode": {
                          "type": "byChannel",
                          "byChannel": {}
                        },
                        "alignment": {
                          "type": "run",
                          "run": {
                            "type": "intervalStart",
                            "intervalStart": {}
                          }
                        },
                        "filters": [
                          {
                            "type": "tag",
                            "tag": {
                              "id": "<id>",
                              "key": {
                                "type": "literal",
                                "literal": "<literal>"
                              },
                              "operator": "IN",
                              "values": [
                                {
                                  "type": "literal",
                                  "literal": "<literal>"
                                }
                              ]
                            }
                          }
                        ]
                      }
                    }
                  }
                },
                "timeRangeInputs": {
                  "<key>": {
                    "label": "<label>",
                    "timeRange": {
                      "start": {
                        "seconds": 1,
                        "nanos": 1
                      },
                      "end": {
                        "seconds": 1,
                        "nanos": 1
                      }
                    },
                    "timeRangeType": "ABSOLUTE"
                  }
                },
                "timeRanges": {
                  "<key>": {
                    "type": "timeRangeV1",
                    "timeRangeV1": {
                      "label": "<label>",
                      "time": {
                        "absoluteRange": {
                          "start": {
                            "seconds": 1,
                            "nanos": 1
                          },
                          "end": {
                            "seconds": 1,
                            "nanos": 1
                          }
                        },
                        "timeRangeType": "ABSOLUTE",
                        "t0": {
                          "seconds": 1,
                          "nanos": 1
                        }
                      }
                    }
                  }
                },
                "reportContent": "<report content>",
                "version": "<version>"
              }
            }
          }
        }
      }
    },
    "/scout/v1/template/{templateRid}": {
      "get": {
        "operationId": "TemplateService_get",
        "summary": "Get",
        "tags": [
          "TemplateService"
        ],
        "description": "Must only pass one of (branch, commit). If neither are passed, the latest commit on the \"main\" branch is returned. Throws if the template, branch, or commit doesn't exist.",
        "parameters": [
          {
            "name": "templateRid",
            "in": "path",
            "type": "string",
            "format": "rid",
            "x-alias": "TemplateRid",
            "required": true
          },
          {
            "name": "branch",
            "in": "query",
            "type": "string",
            "x-alias": "BranchName",
            "required": false
          },
          {
            "name": "commit",
            "in": "query",
            "type": "string",
            "x-alias": "CommitId",
            "required": false
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/Template"
            },
            "x-example": {
              "rid": "<template rid>",
              "metadata": {
                "title": "<title>",
                "description": "<description>",
                "labels": [
                  "<label>"
                ],
                "properties": {
                  "<key>": "<property value>"
                },
                "isArchived": true,
                "isPublished": true,
                "createdBy": "<user rid>",
                "createdAt": "2026-01-01T00:00:00Z",
                "updatedAt": "2026-01-01T00:00:00Z",
                "editedAt": "2026-01-01T00:00:00Z",
                "previewImage": {
                  "light": "<attachment rid>",
                  "dark": "<attachment rid>"
                }
              },
              "commit": {
                "id": "<commit id>",
                "resourceRid": "<resource rid>",
                "parentCommit": "<commit id>",
                "mergeParentCommit": "<commit id>",
                "message": "<message>",
                "isWorkingState": true,
                "committedBy": "<user rid>",
                "committedAt": "2026-01-01T00:00:00Z"
              },
              "charts": [
                {
                  "rid": "<viz id>",
                  "version": 1
                }
              ],
              "layout": {
                "type": "v1",
                "v1": {
                  "rootPanel": {
                    "type": "viz",
                    "viz": {
                      "type": "v1",
                      "v1": {
                        "id": "<panel id>",
                        "vizId": "<viz id>",
                        "hideLegend": true,
                        "hideLabel": true
                      }
                    }
                  }
                }
              },
              "content": {
                "channelVariables": {
                  "<key>": {
                    "displayName": "<display name>",
                    "variableName": "<channel variable name>",
                    "computeSpec": {
                      "type": "v1",
                      "v1": "<compute spec v1>"
                    },
                    "computeSpecV2": {
                      "computeNode": {
                        "type": "enum",
                        "enum": {
                          "type": "aggregate",
                          "aggregate": {
                            "function": "MIN"
                          }
                        }
                      },
                      "context": {
                        "variables": {
                          "<key>": {
                            "type": "variable",
                            "variable": "<variable name>"
                          }
                        }
                      },
                      "computeExpression": {
                        "type": "v1",
                        "v1": {
                          "type": "python",
                          "python": {
                            "expression": "<expression>",
                            "inputMap": {
                              "<key>": {
                                "value": {
                                  "type": "variable",
                                  "variable": "<channel variable name>"
                                },
                                "dataType": "NUMERIC_SERIES"
                              }
                            },
                            "nominalComputePythonVersion": "<nominal compute python version>"
                          }
                        }
                      }
                    }
                  }
                },
                "inputs": {
                  "type": "v1",
                  "v1": {
                    "inputs": [
                      {
                        "id": "<id>",
                        "label": "<label>",
                        "value": {
                          "type": "tag",
                          "tag": {
                            "key": {
                              "type": "literal",
                              "literal": {
                                "id": "<id>",
                                "value": "<value>"
                              }
                            },
                            "values": [
                              {
                                "type": "literal",
                                "literal": {
                                  "id": "<id>",
                                  "value": "<value>"
                                }
                              }
                            ]
                          }
                        }
                      }
                    ]
                  }
                },
                "charts": {
                  "<key>": {
                    "type": "boundary",
                    "boundary": {
                      "type": "v1",
                      "v1": {
                        "title": "<title>",
                        "type": {
                          "type": "source",
                          "source": {}
                        },
                        "fillColor": "<hex color>"
                      }
                    }
                  }
                },
                "settings": {
                  "assetSettings": {
                    "<key>": {
                      "offset": {
                        "duration": 1,
                        "unit": "DAYS"
                      },
                      "dataScopeOffsets": {
                        "<key>": {
                          "duration": 1,
                          "unit": "DAYS"
                        }
                      }
                    }
                  },
                  "runSettings": {
                    "<key>": {
                      "offset": {
                        "duration": 1,
                        "unit": "DAYS"
                      },
                      "assetSettings": {
                        "<key>": {
                          "offset": {
                            "duration": 1,
                            "unit": "DAYS"
                          },
                          "dataScopeOffsets": {
                            "<key>": {
                              "duration": 1,
                              "unit": "DAYS"
                            }
                          }
                        }
                      }
                    }
                  },
                  "timeSettings": {
                    "type": "v1",
                    "v1": {
                      "timeRangeType": "ABSOLUTE",
                      "globalTimeRange": {
                        "start": {
                          "seconds": 1,
                          "nanos": 1
                        },
                        "end": {
                          "seconds": 1,
                          "nanos": 1
                        }
                      },
                      "isGlobalTime": true,
                      "tabTimeRanges": {
                        "<key>": {
                          "start": {
                            "seconds": 1,
                            "nanos": 1
                          },
                          "end": {
                            "seconds": 1,
                            "nanos": 1
                          }
                        }
                      },
                      "relativeTimestampFormat": {
                        "type": "inherit",
                        "inherit": {}
                      }
                    }
                  },
                  "offsets": {
                    "type": "v1",
                    "v1": {
                      "runs": {
                        "<key>": {
                          "offset": {
                            "type": "custom",
                            "custom": {
                              "duration": 1,
                              "unit": "DAYS"
                            }
                          },
                          "assets": {
                            "<key>": {
                              "offset": {
                                "type": "custom",
                                "custom": {
                                  "duration": 1,
                                  "unit": "DAYS"
                                }
                              },
                              "dataSources": {
                                "<key>": {
                                  "type": "custom",
                                  "custom": {
                                    "duration": 1,
                                    "unit": "DAYS"
                                  }
                                }
                              }
                            }
                          }
                        }
                      },
                      "assets": {
                        "<key>": {
                          "offset": {
                            "type": "custom",
                            "custom": {
                              "duration": 1,
                              "unit": "DAYS"
                            }
                          },
                          "dataSources": {
                            "<key>": {
                              "type": "custom",
                              "custom": {
                                "duration": 1,
                                "unit": "DAYS"
                              }
                            }
                          }
                        }
                      },
                      "inputs": {
                        "<key>": {
                          "offset": {
                            "type": "custom",
                            "custom": {
                              "duration": 1,
                              "unit": "DAYS"
                            }
                          },
                          "assets": {
                            "<key>": {
                              "offset": {
                                "type": "custom",
                                "custom": {
                                  "duration": 1,
                                  "unit": "DAYS"
                                }
                              },
                              "dataSources": {
                                "<key>": {
                                  "type": "custom",
                                  "custom": {
                                    "duration": 1,
                                    "unit": "DAYS"
                                  }
                                }
                              }
                            }
                          },
                          "runs": {
                            "<key>": {
                              "offset": {
                                "type": "custom",
                                "custom": {
                                  "duration": 1,
                                  "unit": "DAYS"
                                }
                              },
                              "assets": {
                                "<key>": {
                                  "offset": {
                                    "type": "custom",
                                    "custom": {
                                      "duration": 1,
                                      "unit": "DAYS"
                                    }
                                  },
                                  "dataSources": {
                                    "<key>": {
                                      "type": "custom",
                                      "custom": {
                                        "duration": 1,
                                        "unit": "DAYS"
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  },
                  "defaultStalenessConfiguration": {
                    "threshold": {
                      "seconds": 1,
                      "nanos": 1
                    },
                    "connectStalePoints": true
                  },
                  "fillStrategy": {
                    "type": "forwardFill",
                    "forwardFill": {
                      "duration": 1,
                      "unit": "DAYS"
                    }
                  },
                  "alignmentStrategy": {
                    "type": "driverSeries",
                    "driverSeries": {}
                  },
                  "statsPanelScope": {
                    "type": "selectedTab",
                    "selectedTab": {}
                  }
                },
                "dataScopeInputs": {
                  "type": "v1",
                  "v1": {
                    "inputs": {
                      "<key>": {
                        "name": "<workbook data scope input name>",
                        "label": "<label>",
                        "value": {
                          "type": "asset",
                          "asset": {
                            "assetRid": "<asset rid>"
                          }
                        },
                        "colorMode": {
                          "type": "byChannel",
                          "byChannel": {}
                        },
                        "alignment": {
                          "type": "run",
                          "run": {
                            "type": "intervalStart",
                            "intervalStart": {}
                          }
                        },
                        "filters": [
                          {
                            "type": "tag",
                            "tag": {
                              "id": "<id>",
                              "key": {
                                "type": "literal",
                                "literal": "<literal>"
                              },
                              "operator": "IN",
                              "values": [
                                {
                                  "type": "literal",
                                  "literal": "<literal>"
                                }
                              ]
                            }
                          }
                        ]
                      }
                    }
                  }
                },
                "timeRangeInputs": {
                  "<key>": {
                    "label": "<label>",
                    "timeRange": {
                      "start": {
                        "seconds": 1,
                        "nanos": 1
                      },
                      "end": {
                        "seconds": 1,
                        "nanos": 1
                      }
                    },
                    "timeRangeType": "ABSOLUTE"
                  }
                },
                "timeRanges": {
                  "<key>": {
                    "type": "timeRangeV1",
                    "timeRangeV1": {
                      "label": "<label>",
                      "time": {
                        "absoluteRange": {
                          "start": {
                            "seconds": 1,
                            "nanos": 1
                          },
                          "end": {
                            "seconds": 1,
                            "nanos": 1
                          }
                        },
                        "timeRangeType": "ABSOLUTE",
                        "t0": {
                          "seconds": 1,
                          "nanos": 1
                        }
                      }
                    }
                  }
                },
                "reportContent": "<report content>",
                "version": "<version>"
              }
            }
          }
        }
      }
    },
    "/scout/v1/template/batch-get-metadata": {
      "post": {
        "operationId": "TemplateService_batchGetMetadata",
        "summary": "Batch get metadata",
        "tags": [
          "TemplateService"
        ],
        "parameters": [
          {
            "name": "rids",
            "in": "body",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "format": "rid",
                "x-alias": "TemplateRid"
              },
              "uniqueItems": true,
              "example": [
                "<template rid>"
              ]
            },
            "required": false,
            "x-example": [
              "<template rid>"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/TemplateSummary"
              },
              "uniqueItems": true
            },
            "x-example": [
              {
                "rid": "<template rid>",
                "metadata": {
                  "title": "<title>",
                  "description": "<description>",
                  "labels": [
                    "<label>"
                  ],
                  "properties": {
                    "<key>": "<property value>"
                  },
                  "isArchived": true,
                  "isPublished": true,
                  "createdBy": "<user rid>",
                  "createdAt": "2026-01-01T00:00:00Z",
                  "updatedAt": "2026-01-01T00:00:00Z",
                  "editedAt": "2026-01-01T00:00:00Z",
                  "previewImage": {
                    "light": "<attachment rid>",
                    "dark": "<attachment rid>"
                  }
                }
              }
            ]
          }
        }
      }
    },
    "/scout/v1/template/{templateRid}/save-working-state": {
      "post": {
        "operationId": "TemplateService_saveWorkingState",
        "summary": "Save working state",
        "tags": [
          "TemplateService"
        ],
        "description": "Creates a commit that may be compacted, e.g cleaned up and not exist anymore. Throws if the template or branch doesn't exist. Throws if the latest commit doesn't match the provided id. Throws if you save to an archived template.",
        "parameters": [
          {
            "name": "templateRid",
            "in": "path",
            "type": "string",
            "format": "rid",
            "x-alias": "TemplateRid",
            "required": true
          },
          {
            "name": "branch",
            "in": "query",
            "type": "string",
            "x-alias": "BranchName",
            "required": false,
            "description": "Name of the branch to save to. Defaults to \"main\" if not specified."
          },
          {
            "name": "request",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/SaveTemplateRequest"
            },
            "required": true,
            "x-example": {
              "layout": {
                "type": "v1",
                "v1": {
                  "rootPanel": {
                    "type": "viz",
                    "viz": {
                      "type": "v1",
                      "v1": {
                        "id": "<panel id>",
                        "vizId": "<viz id>",
                        "hideLegend": true
                      }
                    }
                  }
                }
              },
              "content": {
                "channelVariables": {
                  "<key>": {
                    "variableName": "<channel variable name>",
                    "computeSpec": {
                      "type": "v1",
                      "v1": "<compute spec v1>"
                    }
                  }
                },
                "charts": {
                  "<key>": {
                    "type": "boundary",
                    "boundary": {
                      "type": "v1",
                      "v1": {
                        "type": {
                          "type": "source",
                          "source": {}
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/Template"
            },
            "x-example": {
              "rid": "<template rid>",
              "metadata": {
                "title": "<title>",
                "description": "<description>",
                "labels": [
                  "<label>"
                ],
                "properties": {
                  "<key>": "<property value>"
                },
                "isArchived": true,
                "isPublished": true,
                "createdBy": "<user rid>",
                "createdAt": "2026-01-01T00:00:00Z",
                "updatedAt": "2026-01-01T00:00:00Z",
                "editedAt": "2026-01-01T00:00:00Z",
                "previewImage": {
                  "light": "<attachment rid>",
                  "dark": "<attachment rid>"
                }
              },
              "commit": {
                "id": "<commit id>",
                "resourceRid": "<resource rid>",
                "parentCommit": "<commit id>",
                "mergeParentCommit": "<commit id>",
                "message": "<message>",
                "isWorkingState": true,
                "committedBy": "<user rid>",
                "committedAt": "2026-01-01T00:00:00Z"
              },
              "charts": [
                {
                  "rid": "<viz id>",
                  "version": 1
                }
              ],
              "layout": {
                "type": "v1",
                "v1": {
                  "rootPanel": {
                    "type": "viz",
                    "viz": {
                      "type": "v1",
                      "v1": {
                        "id": "<panel id>",
                        "vizId": "<viz id>",
                        "hideLegend": true,
                        "hideLabel": true
                      }
                    }
                  }
                }
              },
              "content": {
                "channelVariables": {
                  "<key>": {
                    "displayName": "<display name>",
                    "variableName": "<channel variable name>",
                    "computeSpec": {
                      "type": "v1",
                      "v1": "<compute spec v1>"
                    },
                    "computeSpecV2": {
                      "computeNode": {
                        "type": "enum",
                        "enum": {
                          "type": "aggregate",
                          "aggregate": {
                            "function": "MIN"
                          }
                        }
                      },
                      "context": {
                        "variables": {
                          "<key>": {
                            "type": "variable",
                            "variable": "<variable name>"
                          }
                        }
                      },
                      "computeExpression": {
                        "type": "v1",
                        "v1": {
                          "type": "python",
                          "python": {
                            "expression": "<expression>",
                            "inputMap": {
                              "<key>": {
                                "value": {
                                  "type": "variable",
                                  "variable": "<channel variable name>"
                                },
                                "dataType": "NUMERIC_SERIES"
                              }
                            },
                            "nominalComputePythonVersion": "<nominal compute python version>"
                          }
                        }
                      }
                    }
                  }
                },
                "inputs": {
                  "type": "v1",
                  "v1": {
                    "inputs": [
                      {
                        "id": "<id>",
                        "label": "<label>",
                        "value": {
                          "type": "tag",
                          "tag": {
                            "key": {
                              "type": "literal",
                              "literal": {
                                "id": "<id>",
                                "value": "<value>"
                              }
                            },
                            "values": [
                              {
                                "type": "literal",
                                "literal": {
                                  "id": "<id>",
                                  "value": "<value>"
                                }
                              }
                            ]
                          }
                        }
                      }
                    ]
                  }
                },
                "charts": {
                  "<key>": {
                    "type": "boundary",
                    "boundary": {
                      "type": "v1",
                      "v1": {
                        "title": "<title>",
                        "type": {
                          "type": "source",
                          "source": {}
                        },
                        "fillColor": "<hex color>"
                      }
                    }
                  }
                },
                "settings": {
                  "assetSettings": {
                    "<key>": {
                      "offset": {
                        "duration": 1,
                        "unit": "DAYS"
                      },
                      "dataScopeOffsets": {
                        "<key>": {
                          "duration": 1,
                          "unit": "DAYS"
                        }
                      }
                    }
                  },
                  "runSettings": {
                    "<key>": {
                      "offset": {
                        "duration": 1,
                        "unit": "DAYS"
                      },
                      "assetSettings": {
                        "<key>": {
                          "offset": {
                            "duration": 1,
                            "unit": "DAYS"
                          },
                          "dataScopeOffsets": {
                            "<key>": {
                              "duration": 1,
                              "unit": "DAYS"
                            }
                          }
                        }
                      }
                    }
                  },
                  "timeSettings": {
                    "type": "v1",
                    "v1": {
                      "timeRangeType": "ABSOLUTE",
                      "globalTimeRange": {
                        "start": {
                          "seconds": 1,
                          "nanos": 1
                        },
                        "end": {
                          "seconds": 1,
                          "nanos": 1
                        }
                      },
                      "isGlobalTime": true,
                      "tabTimeRanges": {
                        "<key>": {
                          "start": {
                            "seconds": 1,
                            "nanos": 1
                          },
                          "end": {
                            "seconds": 1,
                            "nanos": 1
                          }
                        }
                      },
                      "relativeTimestampFormat": {
                        "type": "inherit",
                        "inherit": {}
                      }
                    }
                  },
                  "offsets": {
                    "type": "v1",
                    "v1": {
                      "runs": {
                        "<key>": {
                          "offset": {
                            "type": "custom",
                            "custom": {
                              "duration": 1,
                              "unit": "DAYS"
                            }
                          },
                          "assets": {
                            "<key>": {
                              "offset": {
                                "type": "custom",
                                "custom": {
                                  "duration": 1,
                                  "unit": "DAYS"
                                }
                              },
                              "dataSources": {
                                "<key>": {
                                  "type": "custom",
                                  "custom": {
                                    "duration": 1,
                                    "unit": "DAYS"
                                  }
                                }
                              }
                            }
                          }
                        }
                      },
                      "assets": {
                        "<key>": {
                          "offset": {
                            "type": "custom",
                            "custom": {
                              "duration": 1,
                              "unit": "DAYS"
                            }
                          },
                          "dataSources": {
                            "<key>": {
                              "type": "custom",
                              "custom": {
                                "duration": 1,
                                "unit": "DAYS"
                              }
                            }
                          }
                        }
                      },
                      "inputs": {
                        "<key>": {
                          "offset": {
                            "type": "custom",
                            "custom": {
                              "duration": 1,
                              "unit": "DAYS"
                            }
                          },
                          "assets": {
                            "<key>": {
                              "offset": {
                                "type": "custom",
                                "custom": {
                                  "duration": 1,
                                  "unit": "DAYS"
                                }
                              },
                              "dataSources": {
                                "<key>": {
                                  "type": "custom",
                                  "custom": {
                                    "duration": 1,
                                    "unit": "DAYS"
                                  }
                                }
                              }
                            }
                          },
                          "runs": {
                            "<key>": {
                              "offset": {
                                "type": "custom",
                                "custom": {
                                  "duration": 1,
                                  "unit": "DAYS"
                                }
                              },
                              "assets": {
                                "<key>": {
                                  "offset": {
                                    "type": "custom",
                                    "custom": {
                                      "duration": 1,
                                      "unit": "DAYS"
                                    }
                                  },
                                  "dataSources": {
                                    "<key>": {
                                      "type": "custom",
                                      "custom": {
                                        "duration": 1,
                                        "unit": "DAYS"
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  },
                  "defaultStalenessConfiguration": {
                    "threshold": {
                      "seconds": 1,
                      "nanos": 1
                    },
                    "connectStalePoints": true
                  },
                  "fillStrategy": {
                    "type": "forwardFill",
                    "forwardFill": {
                      "duration": 1,
                      "unit": "DAYS"
                    }
                  },
                  "alignmentStrategy": {
                    "type": "driverSeries",
                    "driverSeries": {}
                  },
                  "statsPanelScope": {
                    "type": "selectedTab",
                    "selectedTab": {}
                  }
                },
                "dataScopeInputs": {
                  "type": "v1",
                  "v1": {
                    "inputs": {
                      "<key>": {
                        "name": "<workbook data scope input name>",
                        "label": "<label>",
                        "value": {
                          "type": "asset",
                          "asset": {
                            "assetRid": "<asset rid>"
                          }
                        },
                        "colorMode": {
                          "type": "byChannel",
                          "byChannel": {}
                        },
                        "alignment": {
                          "type": "run",
                          "run": {
                            "type": "intervalStart",
                            "intervalStart": {}
                          }
                        },
                        "filters": [
                          {
                            "type": "tag",
                            "tag": {
                              "id": "<id>",
                              "key": {
                                "type": "literal",
                                "literal": "<literal>"
                              },
                              "operator": "IN",
                              "values": [
                                {
                                  "type": "literal",
                                  "literal": "<literal>"
                                }
                              ]
                            }
                          }
                        ]
                      }
                    }
                  }
                },
                "timeRangeInputs": {
                  "<key>": {
                    "label": "<label>",
                    "timeRange": {
                      "start": {
                        "seconds": 1,
                        "nanos": 1
                      },
                      "end": {
                        "seconds": 1,
                        "nanos": 1
                      }
                    },
                    "timeRangeType": "ABSOLUTE"
                  }
                },
                "timeRanges": {
                  "<key>": {
                    "type": "timeRangeV1",
                    "timeRangeV1": {
                      "label": "<label>",
                      "time": {
                        "absoluteRange": {
                          "start": {
                            "seconds": 1,
                            "nanos": 1
                          },
                          "end": {
                            "seconds": 1,
                            "nanos": 1
                          }
                        },
                        "timeRangeType": "ABSOLUTE",
                        "t0": {
                          "seconds": 1,
                          "nanos": 1
                        }
                      }
                    }
                  }
                },
                "reportContent": "<report content>",
                "version": "<version>"
              }
            }
          }
        }
      }
    },
    "/scout/v1/template/{templateRid}/ref-names": {
      "get": {
        "operationId": "TemplateService_getUsedRefNames",
        "summary": "Get used ref names",
        "tags": [
          "TemplateService"
        ],
        "description": "Returns the set of all ref names used by the template.",
        "parameters": [
          {
            "name": "templateRid",
            "in": "path",
            "type": "string",
            "format": "rid",
            "x-alias": "TemplateRid",
            "required": true
          },
          {
            "name": "branch",
            "in": "query",
            "type": "string",
            "x-alias": "BranchName",
            "required": false
          },
          {
            "name": "commit",
            "in": "query",
            "type": "string",
            "x-alias": "CommitId",
            "required": false
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "x-alias": "DataSourceRefName"
              },
              "uniqueItems": true
            },
            "x-example": [
              "<data source ref name>"
            ]
          }
        }
      }
    },
    "/scout/v1/template/{templateRid}/update-ref-names": {
      "post": {
        "operationId": "TemplateService_updateRefNames",
        "summary": "Update ref names",
        "tags": [
          "TemplateService"
        ],
        "description": "Updates the data source ref names for all variables used in the template.",
        "parameters": [
          {
            "name": "templateRid",
            "in": "path",
            "type": "string",
            "format": "rid",
            "x-alias": "TemplateRid",
            "required": true
          },
          {
            "name": "branch",
            "in": "query",
            "type": "string",
            "x-alias": "BranchName",
            "required": false,
            "description": "Name of the branch to save to. Defaults to \"main\" if not specified."
          },
          {
            "name": "request",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/UpdateRefNameRequest"
            },
            "required": true,
            "x-example": {
              "refNameUpdates": {
                "<key>": "<data source ref name>"
              },
              "latestCommit": "<commit id>"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/Template"
            },
            "x-example": {
              "rid": "<template rid>",
              "metadata": {
                "title": "<title>",
                "description": "<description>",
                "labels": [
                  "<label>"
                ],
                "properties": {
                  "<key>": "<property value>"
                },
                "isArchived": true,
                "isPublished": true,
                "createdBy": "<user rid>",
                "createdAt": "2026-01-01T00:00:00Z",
                "updatedAt": "2026-01-01T00:00:00Z",
                "editedAt": "2026-01-01T00:00:00Z",
                "previewImage": {
                  "light": "<attachment rid>",
                  "dark": "<attachment rid>"
                }
              },
              "commit": {
                "id": "<commit id>",
                "resourceRid": "<resource rid>",
                "parentCommit": "<commit id>",
                "mergeParentCommit": "<commit id>",
                "message": "<message>",
                "isWorkingState": true,
                "committedBy": "<user rid>",
                "committedAt": "2026-01-01T00:00:00Z"
              },
              "charts": [
                {
                  "rid": "<viz id>",
                  "version": 1
                }
              ],
              "layout": {
                "type": "v1",
                "v1": {
                  "rootPanel": {
                    "type": "viz",
                    "viz": {
                      "type": "v1",
                      "v1": {
                        "id": "<panel id>",
                        "vizId": "<viz id>",
                        "hideLegend": true,
                        "hideLabel": true
                      }
                    }
                  }
                }
              },
              "content": {
                "channelVariables": {
                  "<key>": {
                    "displayName": "<display name>",
                    "variableName": "<channel variable name>",
                    "computeSpec": {
                      "type": "v1",
                      "v1": "<compute spec v1>"
                    },
                    "computeSpecV2": {
                      "computeNode": {
                        "type": "enum",
                        "enum": {
                          "type": "aggregate",
                          "aggregate": {
                            "function": "MIN"
                          }
                        }
                      },
                      "context": {
                        "variables": {
                          "<key>": {
                            "type": "variable",
                            "variable": "<variable name>"
                          }
                        }
                      },
                      "computeExpression": {
                        "type": "v1",
                        "v1": {
                          "type": "python",
                          "python": {
                            "expression": "<expression>",
                            "inputMap": {
                              "<key>": {
                                "value": {
                                  "type": "variable",
                                  "variable": "<channel variable name>"
                                },
                                "dataType": "NUMERIC_SERIES"
                              }
                            },
                            "nominalComputePythonVersion": "<nominal compute python version>"
                          }
                        }
                      }
                    }
                  }
                },
                "inputs": {
                  "type": "v1",
                  "v1": {
                    "inputs": [
                      {
                        "id": "<id>",
                        "label": "<label>",
                        "value": {
                          "type": "tag",
                          "tag": {
                            "key": {
                              "type": "literal",
                              "literal": {
                                "id": "<id>",
                                "value": "<value>"
                              }
                            },
                            "values": [
                              {
                                "type": "literal",
                                "literal": {
                                  "id": "<id>",
                                  "value": "<value>"
                                }
                              }
                            ]
                          }
                        }
                      }
                    ]
                  }
                },
                "charts": {
                  "<key>": {
                    "type": "boundary",
                    "boundary": {
                      "type": "v1",
                      "v1": {
                        "title": "<title>",
                        "type": {
                          "type": "source",
                          "source": {}
                        },
                        "fillColor": "<hex color>"
                      }
                    }
                  }
                },
                "settings": {
                  "assetSettings": {
                    "<key>": {
                      "offset": {
                        "duration": 1,
                        "unit": "DAYS"
                      },
                      "dataScopeOffsets": {
                        "<key>": {
                          "duration": 1,
                          "unit": "DAYS"
                        }
                      }
                    }
                  },
                  "runSettings": {
                    "<key>": {
                      "offset": {
                        "duration": 1,
                        "unit": "DAYS"
                      },
                      "assetSettings": {
                        "<key>": {
                          "offset": {
                            "duration": 1,
                            "unit": "DAYS"
                          },
                          "dataScopeOffsets": {
                            "<key>": {
                              "duration": 1,
                              "unit": "DAYS"
                            }
                          }
                        }
                      }
                    }
                  },
                  "timeSettings": {
                    "type": "v1",
                    "v1": {
                      "timeRangeType": "ABSOLUTE",
                      "globalTimeRange": {
                        "start": {
                          "seconds": 1,
                          "nanos": 1
                        },
                        "end": {
                          "seconds": 1,
                          "nanos": 1
                        }
                      },
                      "isGlobalTime": true,
                      "tabTimeRanges": {
                        "<key>": {
                          "start": {
                            "seconds": 1,
                            "nanos": 1
                          },
                          "end": {
                            "seconds": 1,
                            "nanos": 1
                          }
                        }
                      },
                      "relativeTimestampFormat": {
                        "type": "inherit",
                        "inherit": {}
                      }
                    }
                  },
                  "offsets": {
                    "type": "v1",
                    "v1": {
                      "runs": {
                        "<key>": {
                          "offset": {
                            "type": "custom",
                            "custom": {
                              "duration": 1,
                              "unit": "DAYS"
                            }
                          },
                          "assets": {
                            "<key>": {
                              "offset": {
                                "type": "custom",
                                "custom": {
                                  "duration": 1,
                                  "unit": "DAYS"
                                }
                              },
                              "dataSources": {
                                "<key>": {
                                  "type": "custom",
                                  "custom": {
                                    "duration": 1,
                                    "unit": "DAYS"
                                  }
                                }
                              }
                            }
                          }
                        }
                      },
                      "assets": {
                        "<key>": {
                          "offset": {
                            "type": "custom",
                            "custom": {
                              "duration": 1,
                              "unit": "DAYS"
                            }
                          },
                          "dataSources": {
                            "<key>": {
                              "type": "custom",
                              "custom": {
                                "duration": 1,
                                "unit": "DAYS"
                              }
                            }
                          }
                        }
                      },
                      "inputs": {
                        "<key>": {
                          "offset": {
                            "type": "custom",
                            "custom": {
                              "duration": 1,
                              "unit": "DAYS"
                            }
                          },
                          "assets": {
                            "<key>": {
                              "offset": {
                                "type": "custom",
                                "custom": {
                                  "duration": 1,
                                  "unit": "DAYS"
                                }
                              },
                              "dataSources": {
                                "<key>": {
                                  "type": "custom",
                                  "custom": {
                                    "duration": 1,
                                    "unit": "DAYS"
                                  }
                                }
                              }
                            }
                          },
                          "runs": {
                            "<key>": {
                              "offset": {
                                "type": "custom",
                                "custom": {
                                  "duration": 1,
                                  "unit": "DAYS"
                                }
                              },
                              "assets": {
                                "<key>": {
                                  "offset": {
                                    "type": "custom",
                                    "custom": {
                                      "duration": 1,
                                      "unit": "DAYS"
                                    }
                                  },
                                  "dataSources": {
                                    "<key>": {
                                      "type": "custom",
                                      "custom": {
                                        "duration": 1,
                                        "unit": "DAYS"
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  },
                  "defaultStalenessConfiguration": {
                    "threshold": {
                      "seconds": 1,
                      "nanos": 1
                    },
                    "connectStalePoints": true
                  },
                  "fillStrategy": {
                    "type": "forwardFill",
                    "forwardFill": {
                      "duration": 1,
                      "unit": "DAYS"
                    }
                  },
                  "alignmentStrategy": {
                    "type": "driverSeries",
                    "driverSeries": {}
                  },
                  "statsPanelScope": {
                    "type": "selectedTab",
                    "selectedTab": {}
                  }
                },
                "dataScopeInputs": {
                  "type": "v1",
                  "v1": {
                    "inputs": {
                      "<key>": {
                        "name": "<workbook data scope input name>",
                        "label": "<label>",
                        "value": {
                          "type": "asset",
                          "asset": {
                            "assetRid": "<asset rid>"
                          }
                        },
                        "colorMode": {
                          "type": "byChannel",
                          "byChannel": {}
                        },
                        "alignment": {
                          "type": "run",
                          "run": {
                            "type": "intervalStart",
                            "intervalStart": {}
                          }
                        },
                        "filters": [
                          {
                            "type": "tag",
                            "tag": {
                              "id": "<id>",
                              "key": {
                                "type": "literal",
                                "literal": "<literal>"
                              },
                              "operator": "IN",
                              "values": [
                                {
                                  "type": "literal",
                                  "literal": "<literal>"
                                }
                              ]
                            }
                          }
                        ]
                      }
                    }
                  }
                },
                "timeRangeInputs": {
                  "<key>": {
                    "label": "<label>",
                    "timeRange": {
                      "start": {
                        "seconds": 1,
                        "nanos": 1
                      },
                      "end": {
                        "seconds": 1,
                        "nanos": 1
                      }
                    },
                    "timeRangeType": "ABSOLUTE"
                  }
                },
                "timeRanges": {
                  "<key>": {
                    "type": "timeRangeV1",
                    "timeRangeV1": {
                      "label": "<label>",
                      "time": {
                        "absoluteRange": {
                          "start": {
                            "seconds": 1,
                            "nanos": 1
                          },
                          "end": {
                            "seconds": 1,
                            "nanos": 1
                          }
                        },
                        "timeRangeType": "ABSOLUTE",
                        "t0": {
                          "seconds": 1,
                          "nanos": 1
                        }
                      }
                    }
                  }
                },
                "reportContent": "<report content>",
                "version": "<version>"
              }
            }
          }
        }
      }
    },
    "/scout/v1/template/{templateRid}/commit": {
      "post": {
        "operationId": "TemplateService_commit",
        "summary": "Commit",
        "tags": [
          "TemplateService"
        ],
        "description": "Creates a commit with a commit message. Throws if the template or branch doesn't exist. Throws if the latest commit doesn't match the provided id. Throws if you commit to an archived template.",
        "parameters": [
          {
            "name": "templateRid",
            "in": "path",
            "type": "string",
            "format": "rid",
            "x-alias": "TemplateRid",
            "required": true
          },
          {
            "name": "branch",
            "in": "query",
            "type": "string",
            "x-alias": "BranchName",
            "required": false,
            "description": "Name of the branch to commit to. Defaults to \"main\" if not specified."
          },
          {
            "name": "request",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/CommitTemplateRequest"
            },
            "required": true,
            "x-example": {
              "layout": {
                "type": "v1",
                "v1": {
                  "rootPanel": {
                    "type": "viz",
                    "viz": {
                      "type": "v1",
                      "v1": {
                        "id": "<panel id>",
                        "vizId": "<viz id>",
                        "hideLegend": true
                      }
                    }
                  }
                }
              },
              "content": {
                "channelVariables": {
                  "<key>": {
                    "variableName": "<channel variable name>",
                    "computeSpec": {
                      "type": "v1",
                      "v1": "<compute spec v1>"
                    }
                  }
                },
                "charts": {
                  "<key>": {
                    "type": "boundary",
                    "boundary": {
                      "type": "v1",
                      "v1": {
                        "type": {
                          "type": "source",
                          "source": {}
                        }
                      }
                    }
                  }
                }
              },
              "message": "<message>"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/Template"
            },
            "x-example": {
              "rid": "<template rid>",
              "metadata": {
                "title": "<title>",
                "description": "<description>",
                "labels": [
                  "<label>"
                ],
                "properties": {
                  "<key>": "<property value>"
                },
                "isArchived": true,
                "isPublished": true,
                "createdBy": "<user rid>",
                "createdAt": "2026-01-01T00:00:00Z",
                "updatedAt": "2026-01-01T00:00:00Z",
                "editedAt": "2026-01-01T00:00:00Z",
                "previewImage": {
                  "light": "<attachment rid>",
                  "dark": "<attachment rid>"
                }
              },
              "commit": {
                "id": "<commit id>",
                "resourceRid": "<resource rid>",
                "parentCommit": "<commit id>",
                "mergeParentCommit": "<commit id>",
                "message": "<message>",
                "isWorkingState": true,
                "committedBy": "<user rid>",
                "committedAt": "2026-01-01T00:00:00Z"
              },
              "charts": [
                {
                  "rid": "<viz id>",
                  "version": 1
                }
              ],
              "layout": {
                "type": "v1",
                "v1": {
                  "rootPanel": {
                    "type": "viz",
                    "viz": {
                      "type": "v1",
                      "v1": {
                        "id": "<panel id>",
                        "vizId": "<viz id>",
                        "hideLegend": true,
                        "hideLabel": true
                      }
                    }
                  }
                }
              },
              "content": {
                "channelVariables": {
                  "<key>": {
                    "displayName": "<display name>",
                    "variableName": "<channel variable name>",
                    "computeSpec": {
                      "type": "v1",
                      "v1": "<compute spec v1>"
                    },
                    "computeSpecV2": {
                      "computeNode": {
                        "type": "enum",
                        "enum": {
                          "type": "aggregate",
                          "aggregate": {
                            "function": "MIN"
                          }
                        }
                      },
                      "context": {
                        "variables": {
                          "<key>": {
                            "type": "variable",
                            "variable": "<variable name>"
                          }
                        }
                      },
                      "computeExpression": {
                        "type": "v1",
                        "v1": {
                          "type": "python",
                          "python": {
                            "expression": "<expression>",
                            "inputMap": {
                              "<key>": {
                                "value": {
                                  "type": "variable",
                                  "variable": "<channel variable name>"
                                },
                                "dataType": "NUMERIC_SERIES"
                              }
                            },
                            "nominalComputePythonVersion": "<nominal compute python version>"
                          }
                        }
                      }
                    }
                  }
                },
                "inputs": {
                  "type": "v1",
                  "v1": {
                    "inputs": [
                      {
                        "id": "<id>",
                        "label": "<label>",
                        "value": {
                          "type": "tag",
                          "tag": {
                            "key": {
                              "type": "literal",
                              "literal": {
                                "id": "<id>",
                                "value": "<value>"
                              }
                            },
                            "values": [
                              {
                                "type": "literal",
                                "literal": {
                                  "id": "<id>",
                                  "value": "<value>"
                                }
                              }
                            ]
                          }
                        }
                      }
                    ]
                  }
                },
                "charts": {
                  "<key>": {
                    "type": "boundary",
                    "boundary": {
                      "type": "v1",
                      "v1": {
                        "title": "<title>",
                        "type": {
                          "type": "source",
                          "source": {}
                        },
                        "fillColor": "<hex color>"
                      }
                    }
                  }
                },
                "settings": {
                  "assetSettings": {
                    "<key>": {
                      "offset": {
                        "duration": 1,
                        "unit": "DAYS"
                      },
                      "dataScopeOffsets": {
                        "<key>": {
                          "duration": 1,
                          "unit": "DAYS"
                        }
                      }
                    }
                  },
                  "runSettings": {
                    "<key>": {
                      "offset": {
                        "duration": 1,
                        "unit": "DAYS"
                      },
                      "assetSettings": {
                        "<key>": {
                          "offset": {
                            "duration": 1,
                            "unit": "DAYS"
                          },
                          "dataScopeOffsets": {
                            "<key>": {
                              "duration": 1,
                              "unit": "DAYS"
                            }
                          }
                        }
                      }
                    }
                  },
                  "timeSettings": {
                    "type": "v1",
                    "v1": {
                      "timeRangeType": "ABSOLUTE",
                      "globalTimeRange": {
                        "start": {
                          "seconds": 1,
                          "nanos": 1
                        },
                        "end": {
                          "seconds": 1,
                          "nanos": 1
                        }
                      },
                      "isGlobalTime": true,
                      "tabTimeRanges": {
                        "<key>": {
                          "start": {
                            "seconds": 1,
                            "nanos": 1
                          },
                          "end": {
                            "seconds": 1,
                            "nanos": 1
                          }
                        }
                      },
                      "relativeTimestampFormat": {
                        "type": "inherit",
                        "inherit": {}
                      }
                    }
                  },
                  "offsets": {
                    "type": "v1",
                    "v1": {
                      "runs": {
                        "<key>": {
                          "offset": {
                            "type": "custom",
                            "custom": {
                              "duration": 1,
                              "unit": "DAYS"
                            }
                          },
                          "assets": {
                            "<key>": {
                              "offset": {
                                "type": "custom",
                                "custom": {
                                  "duration": 1,
                                  "unit": "DAYS"
                                }
                              },
                              "dataSources": {
                                "<key>": {
                                  "type": "custom",
                                  "custom": {
                                    "duration": 1,
                                    "unit": "DAYS"
                                  }
                                }
                              }
                            }
                          }
                        }
                      },
                      "assets": {
                        "<key>": {
                          "offset": {
                            "type": "custom",
                            "custom": {
                              "duration": 1,
                              "unit": "DAYS"
                            }
                          },
                          "dataSources": {
                            "<key>": {
                              "type": "custom",
                              "custom": {
                                "duration": 1,
                                "unit": "DAYS"
                              }
                            }
                          }
                        }
                      },
                      "inputs": {
                        "<key>": {
                          "offset": {
                            "type": "custom",
                            "custom": {
                              "duration": 1,
                              "unit": "DAYS"
                            }
                          },
                          "assets": {
                            "<key>": {
                              "offset": {
                                "type": "custom",
                                "custom": {
                                  "duration": 1,
                                  "unit": "DAYS"
                                }
                              },
                              "dataSources": {
                                "<key>": {
                                  "type": "custom",
                                  "custom": {
                                    "duration": 1,
                                    "unit": "DAYS"
                                  }
                                }
                              }
                            }
                          },
                          "runs": {
                            "<key>": {
                              "offset": {
                                "type": "custom",
                                "custom": {
                                  "duration": 1,
                                  "unit": "DAYS"
                                }
                              },
                              "assets": {
                                "<key>": {
                                  "offset": {
                                    "type": "custom",
                                    "custom": {
                                      "duration": 1,
                                      "unit": "DAYS"
                                    }
                                  },
                                  "dataSources": {
                                    "<key>": {
                                      "type": "custom",
                                      "custom": {
                                        "duration": 1,
                                        "unit": "DAYS"
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  },
                  "defaultStalenessConfiguration": {
                    "threshold": {
                      "seconds": 1,
                      "nanos": 1
                    },
                    "connectStalePoints": true
                  },
                  "fillStrategy": {
                    "type": "forwardFill",
                    "forwardFill": {
                      "duration": 1,
                      "unit": "DAYS"
                    }
                  },
                  "alignmentStrategy": {
                    "type": "driverSeries",
                    "driverSeries": {}
                  },
                  "statsPanelScope": {
                    "type": "selectedTab",
                    "selectedTab": {}
                  }
                },
                "dataScopeInputs": {
                  "type": "v1",
                  "v1": {
                    "inputs": {
                      "<key>": {
                        "name": "<workbook data scope input name>",
                        "label": "<label>",
                        "value": {
                          "type": "asset",
                          "asset": {
                            "assetRid": "<asset rid>"
                          }
                        },
                        "colorMode": {
                          "type": "byChannel",
                          "byChannel": {}
                        },
                        "alignment": {
                          "type": "run",
                          "run": {
                            "type": "intervalStart",
                            "intervalStart": {}
                          }
                        },
                        "filters": [
                          {
                            "type": "tag",
                            "tag": {
                              "id": "<id>",
                              "key": {
                                "type": "literal",
                                "literal": "<literal>"
                              },
                              "operator": "IN",
                              "values": [
                                {
                                  "type": "literal",
                                  "literal": "<literal>"
                                }
                              ]
                            }
                          }
                        ]
                      }
                    }
                  }
                },
                "timeRangeInputs": {
                  "<key>": {
                    "label": "<label>",
                    "timeRange": {
                      "start": {
                        "seconds": 1,
                        "nanos": 1
                      },
                      "end": {
                        "seconds": 1,
                        "nanos": 1
                      }
                    },
                    "timeRangeType": "ABSOLUTE"
                  }
                },
                "timeRanges": {
                  "<key>": {
                    "type": "timeRangeV1",
                    "timeRangeV1": {
                      "label": "<label>",
                      "time": {
                        "absoluteRange": {
                          "start": {
                            "seconds": 1,
                            "nanos": 1
                          },
                          "end": {
                            "seconds": 1,
                            "nanos": 1
                          }
                        },
                        "timeRangeType": "ABSOLUTE",
                        "t0": {
                          "seconds": 1,
                          "nanos": 1
                        }
                      }
                    }
                  }
                },
                "reportContent": "<report content>",
                "version": "<version>"
              }
            }
          }
        }
      }
    },
    "/scout/v1/template/{templateRid}/metadata": {
      "post": {
        "operationId": "TemplateService_updateMetadata",
        "summary": "Update metadata",
        "tags": [
          "TemplateService"
        ],
        "description": "Throws if the template doesn't exist.",
        "parameters": [
          {
            "name": "templateRid",
            "in": "path",
            "type": "string",
            "format": "rid",
            "x-alias": "TemplateRid",
            "required": true
          },
          {
            "name": "request",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/UpdateMetadataRequest"
            },
            "required": true,
            "x-example": {
              "title": "<title>",
              "description": "<description>",
              "labels": [
                "<label>"
              ],
              "properties": {
                "<key>": "<property value>"
              },
              "isArchived": true,
              "isPublished": true,
              "previewImage": {
                "light": "<attachment rid>",
                "dark": "<attachment rid>"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/TemplateMetadata"
            },
            "x-example": {
              "title": "<title>",
              "description": "<description>",
              "labels": [
                "<label>"
              ],
              "properties": {
                "<key>": "<property value>"
              },
              "isArchived": true,
              "isPublished": true,
              "createdBy": "<user rid>",
              "createdAt": "2026-01-01T00:00:00Z",
              "updatedAt": "2026-01-01T00:00:00Z",
              "editedAt": "2026-01-01T00:00:00Z",
              "previewImage": {
                "light": "<attachment rid>",
                "dark": "<attachment rid>"
              }
            }
          }
        }
      }
    },
    "/scout/v1/template/batch-archive": {
      "post": {
        "operationId": "TemplateService_batchArchive",
        "summary": "Batch archive",
        "tags": [
          "TemplateService"
        ],
        "description": "Archives the provided templates. Templates that are already archived are left unchanged. Throws if any of the templates don't exist.",
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/BatchArchiveTemplatesRequest"
            },
            "required": true,
            "x-example": {
              "target": {
                "type": "rids",
                "rids": [
                  "<template rid>"
                ]
              }
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No content."
          }
        }
      }
    },
    "/scout/v1/template/batch-unarchive": {
      "post": {
        "operationId": "TemplateService_batchUnarchive",
        "summary": "Batch unarchive",
        "tags": [
          "TemplateService"
        ],
        "description": "Unarchives the provided templates. Templates that are not archived are left unchanged. Throws if any of the templates don't exist.",
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/BatchUnarchiveTemplatesRequest"
            },
            "required": true,
            "x-example": {
              "target": {
                "type": "rids",
                "rids": [
                  "<template rid>"
                ]
              }
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No content."
          }
        }
      }
    },
    "/scout/v1/template/search": {
      "post": {
        "operationId": "TemplateService_searchTemplates",
        "summary": "Search templates",
        "tags": [
          "TemplateService"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/SearchTemplatesRequest"
            },
            "required": true,
            "x-example": {
              "query": {
                "type": "and",
                "and": []
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/SearchTemplatesResponse"
            },
            "x-example": {
              "results": [
                {
                  "rid": "<template rid>",
                  "metadata": {
                    "title": "<title>",
                    "description": "<description>",
                    "labels": [
                      "<label>"
                    ],
                    "properties": {
                      "<key>": "<property value>"
                    },
                    "isArchived": true,
                    "isPublished": true,
                    "createdBy": "<user rid>",
                    "createdAt": "2026-01-01T00:00:00Z",
                    "updatedAt": "2026-01-01T00:00:00Z",
                    "editedAt": "2026-01-01T00:00:00Z",
                    "previewImage": {
                      "light": "<attachment rid>",
                      "dark": "<attachment rid>"
                    }
                  }
                }
              ],
              "nextPageToken": "<token>"
            }
          }
        }
      }
    },
    "/scout/v1/template/get-all-labels-properties": {
      "get": {
        "operationId": "TemplateService_getAllLabelsAndProperties",
        "summary": "Get all labels and properties",
        "tags": [
          "TemplateService"
        ],
        "parameters": [
          {
            "name": "workspaces",
            "in": "query",
            "type": "array",
            "items": {
              "type": "string",
              "format": "rid",
              "x-alias": "WorkspaceRid"
            },
            "collectionFormat": "multi",
            "required": false,
            "description": "If supplied, will return only the labels and properties for templates within the supplied workspaces. If empty will return all labels and properties for templates within workspaces that the user is permitted to see."
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/GetAllLabelsAndPropertiesResponse"
            },
            "x-example": {
              "properties": {
                "<key>": [
                  "<property value>"
                ]
              },
              "labels": [
                "<label>"
              ]
            }
          }
        }
      }
    },
    "/scout/v1/template/{templateRid}/duplicate": {
      "post": {
        "operationId": "TemplateService_duplicate",
        "summary": "Duplicate",
        "tags": [
          "TemplateService"
        ],
        "description": "Duplicates an existing template, copying its content (layout, charts, variables) and optionally overriding metadata fields such as title, description, labels, and properties. Returns the newly created template.",
        "parameters": [
          {
            "name": "templateRid",
            "in": "path",
            "type": "string",
            "format": "rid",
            "x-alias": "TemplateRid",
            "required": true,
            "description": "The RID of the source template to duplicate."
          },
          {
            "name": "request",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/DuplicateTemplateRequest"
            },
            "required": true,
            "x-example": {
              "title": "<title>",
              "titleSuffix": "<title suffix>",
              "description": "<description>",
              "isPublished": true,
              "workspace": "<workspace rid>",
              "labels": [
                "<label>"
              ],
              "properties": {
                "<key>": "<property value>"
              },
              "previewImage": {
                "light": "<attachment rid>",
                "dark": "<attachment rid>"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/Template"
            },
            "x-example": {
              "rid": "<template rid>",
              "metadata": {
                "title": "<title>",
                "description": "<description>",
                "labels": [
                  "<label>"
                ],
                "properties": {
                  "<key>": "<property value>"
                },
                "isArchived": true,
                "isPublished": true,
                "createdBy": "<user rid>",
                "createdAt": "2026-01-01T00:00:00Z",
                "updatedAt": "2026-01-01T00:00:00Z",
                "editedAt": "2026-01-01T00:00:00Z",
                "previewImage": {
                  "light": "<attachment rid>",
                  "dark": "<attachment rid>"
                }
              },
              "commit": {
                "id": "<commit id>",
                "resourceRid": "<resource rid>",
                "parentCommit": "<commit id>",
                "mergeParentCommit": "<commit id>",
                "message": "<message>",
                "isWorkingState": true,
                "committedBy": "<user rid>",
                "committedAt": "2026-01-01T00:00:00Z"
              },
              "charts": [
                {
                  "rid": "<viz id>",
                  "version": 1
                }
              ],
              "layout": {
                "type": "v1",
                "v1": {
                  "rootPanel": {
                    "type": "viz",
                    "viz": {
                      "type": "v1",
                      "v1": {
                        "id": "<panel id>",
                        "vizId": "<viz id>",
                        "hideLegend": true,
                        "hideLabel": true
                      }
                    }
                  }
                }
              },
              "content": {
                "channelVariables": {
                  "<key>": {
                    "displayName": "<display name>",
                    "variableName": "<channel variable name>",
                    "computeSpec": {
                      "type": "v1",
                      "v1": "<compute spec v1>"
                    },
                    "computeSpecV2": {
                      "computeNode": {
                        "type": "enum",
                        "enum": {
                          "type": "aggregate",
                          "aggregate": {
                            "function": "MIN"
                          }
                        }
                      },
                      "context": {
                        "variables": {
                          "<key>": {
                            "type": "variable",
                            "variable": "<variable name>"
                          }
                        }
                      },
                      "computeExpression": {
                        "type": "v1",
                        "v1": {
                          "type": "python",
                          "python": {
                            "expression": "<expression>",
                            "inputMap": {
                              "<key>": {
                                "value": {
                                  "type": "variable",
                                  "variable": "<channel variable name>"
                                },
                                "dataType": "NUMERIC_SERIES"
                              }
                            },
                            "nominalComputePythonVersion": "<nominal compute python version>"
                          }
                        }
                      }
                    }
                  }
                },
                "inputs": {
                  "type": "v1",
                  "v1": {
                    "inputs": [
                      {
                        "id": "<id>",
                        "label": "<label>",
                        "value": {
                          "type": "tag",
                          "tag": {
                            "key": {
                              "type": "literal",
                              "literal": {
                                "id": "<id>",
                                "value": "<value>"
                              }
                            },
                            "values": [
                              {
                                "type": "literal",
                                "literal": {
                                  "id": "<id>",
                                  "value": "<value>"
                                }
                              }
                            ]
                          }
                        }
                      }
                    ]
                  }
                },
                "charts": {
                  "<key>": {
                    "type": "boundary",
                    "boundary": {
                      "type": "v1",
                      "v1": {
                        "title": "<title>",
                        "type": {
                          "type": "source",
                          "source": {}
                        },
                        "fillColor": "<hex color>"
                      }
                    }
                  }
                },
                "settings": {
                  "assetSettings": {
                    "<key>": {
                      "offset": {
                        "duration": 1,
                        "unit": "DAYS"
                      },
                      "dataScopeOffsets": {
                        "<key>": {
                          "duration": 1,
                          "unit": "DAYS"
                        }
                      }
                    }
                  },
                  "runSettings": {
                    "<key>": {
                      "offset": {
                        "duration": 1,
                        "unit": "DAYS"
                      },
                      "assetSettings": {
                        "<key>": {
                          "offset": {
                            "duration": 1,
                            "unit": "DAYS"
                          },
                          "dataScopeOffsets": {
                            "<key>": {
                              "duration": 1,
                              "unit": "DAYS"
                            }
                          }
                        }
                      }
                    }
                  },
                  "timeSettings": {
                    "type": "v1",
                    "v1": {
                      "timeRangeType": "ABSOLUTE",
                      "globalTimeRange": {
                        "start": {
                          "seconds": 1,
                          "nanos": 1
                        },
                        "end": {
                          "seconds": 1,
                          "nanos": 1
                        }
                      },
                      "isGlobalTime": true,
                      "tabTimeRanges": {
                        "<key>": {
                          "start": {
                            "seconds": 1,
                            "nanos": 1
                          },
                          "end": {
                            "seconds": 1,
                            "nanos": 1
                          }
                        }
                      },
                      "relativeTimestampFormat": {
                        "type": "inherit",
                        "inherit": {}
                      }
                    }
                  },
                  "offsets": {
                    "type": "v1",
                    "v1": {
                      "runs": {
                        "<key>": {
                          "offset": {
                            "type": "custom",
                            "custom": {
                              "duration": 1,
                              "unit": "DAYS"
                            }
                          },
                          "assets": {
                            "<key>": {
                              "offset": {
                                "type": "custom",
                                "custom": {
                                  "duration": 1,
                                  "unit": "DAYS"
                                }
                              },
                              "dataSources": {
                                "<key>": {
                                  "type": "custom",
                                  "custom": {
                                    "duration": 1,
                                    "unit": "DAYS"
                                  }
                                }
                              }
                            }
                          }
                        }
                      },
                      "assets": {
                        "<key>": {
                          "offset": {
                            "type": "custom",
                            "custom": {
                              "duration": 1,
                              "unit": "DAYS"
                            }
                          },
                          "dataSources": {
                            "<key>": {
                              "type": "custom",
                              "custom": {
                                "duration": 1,
                                "unit": "DAYS"
                              }
                            }
                          }
                        }
                      },
                      "inputs": {
                        "<key>": {
                          "offset": {
                            "type": "custom",
                            "custom": {
                              "duration": 1,
                              "unit": "DAYS"
                            }
                          },
                          "assets": {
                            "<key>": {
                              "offset": {
                                "type": "custom",
                                "custom": {
                                  "duration": 1,
                                  "unit": "DAYS"
                                }
                              },
                              "dataSources": {
                                "<key>": {
                                  "type": "custom",
                                  "custom": {
                                    "duration": 1,
                                    "unit": "DAYS"
                                  }
                                }
                              }
                            }
                          },
                          "runs": {
                            "<key>": {
                              "offset": {
                                "type": "custom",
                                "custom": {
                                  "duration": 1,
                                  "unit": "DAYS"
                                }
                              },
                              "assets": {
                                "<key>": {
                                  "offset": {
                                    "type": "custom",
                                    "custom": {
                                      "duration": 1,
                                      "unit": "DAYS"
                                    }
                                  },
                                  "dataSources": {
                                    "<key>": {
                                      "type": "custom",
                                      "custom": {
                                        "duration": 1,
                                        "unit": "DAYS"
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  },
                  "defaultStalenessConfiguration": {
                    "threshold": {
                      "seconds": 1,
                      "nanos": 1
                    },
                    "connectStalePoints": true
                  },
                  "fillStrategy": {
                    "type": "forwardFill",
                    "forwardFill": {
                      "duration": 1,
                      "unit": "DAYS"
                    }
                  },
                  "alignmentStrategy": {
                    "type": "driverSeries",
                    "driverSeries": {}
                  },
                  "statsPanelScope": {
                    "type": "selectedTab",
                    "selectedTab": {}
                  }
                },
                "dataScopeInputs": {
                  "type": "v1",
                  "v1": {
                    "inputs": {
                      "<key>": {
                        "name": "<workbook data scope input name>",
                        "label": "<label>",
                        "value": {
                          "type": "asset",
                          "asset": {
                            "assetRid": "<asset rid>"
                          }
                        },
                        "colorMode": {
                          "type": "byChannel",
                          "byChannel": {}
                        },
                        "alignment": {
                          "type": "run",
                          "run": {
                            "type": "intervalStart",
                            "intervalStart": {}
                          }
                        },
                        "filters": [
                          {
                            "type": "tag",
                            "tag": {
                              "id": "<id>",
                              "key": {
                                "type": "literal",
                                "literal": "<literal>"
                              },
                              "operator": "IN",
                              "values": [
                                {
                                  "type": "literal",
                                  "literal": "<literal>"
                                }
                              ]
                            }
                          }
                        ]
                      }
                    }
                  }
                },
                "timeRangeInputs": {
                  "<key>": {
                    "label": "<label>",
                    "timeRange": {
                      "start": {
                        "seconds": 1,
                        "nanos": 1
                      },
                      "end": {
                        "seconds": 1,
                        "nanos": 1
                      }
                    },
                    "timeRangeType": "ABSOLUTE"
                  }
                },
                "timeRanges": {
                  "<key>": {
                    "type": "timeRangeV1",
                    "timeRangeV1": {
                      "label": "<label>",
                      "time": {
                        "absoluteRange": {
                          "start": {
                            "seconds": 1,
                            "nanos": 1
                          },
                          "end": {
                            "seconds": 1,
                            "nanos": 1
                          }
                        },
                        "timeRangeType": "ABSOLUTE",
                        "t0": {
                          "seconds": 1,
                          "nanos": 1
                        }
                      }
                    }
                  }
                },
                "reportContent": "<report content>",
                "version": "<version>"
              }
            }
          }
        }
      }
    },
    "/scout/v1/template/{templateRid}/merge-to-main": {
      "post": {
        "operationId": "TemplateService_mergeToMain",
        "summary": "Merge to main",
        "tags": [
          "TemplateService"
        ],
        "description": "Merges the given branch to the \"main\" branch. Throws if the template or branch doesn't exist. Throws if the latest commit doesn't match the provided id. Throws if you merge on an archived template.",
        "parameters": [
          {
            "name": "templateRid",
            "in": "path",
            "type": "string",
            "format": "rid",
            "x-alias": "TemplateRid",
            "required": true
          },
          {
            "name": "request",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/MergeToMainRequest"
            },
            "required": true,
            "x-example": {
              "branchName": "<branch name>",
              "message": "<message>"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/Template"
            },
            "x-example": {
              "rid": "<template rid>",
              "metadata": {
                "title": "<title>",
                "description": "<description>",
                "labels": [
                  "<label>"
                ],
                "properties": {
                  "<key>": "<property value>"
                },
                "isArchived": true,
                "isPublished": true,
                "createdBy": "<user rid>",
                "createdAt": "2026-01-01T00:00:00Z",
                "updatedAt": "2026-01-01T00:00:00Z",
                "editedAt": "2026-01-01T00:00:00Z",
                "previewImage": {
                  "light": "<attachment rid>",
                  "dark": "<attachment rid>"
                }
              },
              "commit": {
                "id": "<commit id>",
                "resourceRid": "<resource rid>",
                "parentCommit": "<commit id>",
                "mergeParentCommit": "<commit id>",
                "message": "<message>",
                "isWorkingState": true,
                "committedBy": "<user rid>",
                "committedAt": "2026-01-01T00:00:00Z"
              },
              "charts": [
                {
                  "rid": "<viz id>",
                  "version": 1
                }
              ],
              "layout": {
                "type": "v1",
                "v1": {
                  "rootPanel": {
                    "type": "viz",
                    "viz": {
                      "type": "v1",
                      "v1": {
                        "id": "<panel id>",
                        "vizId": "<viz id>",
                        "hideLegend": true,
                        "hideLabel": true
                      }
                    }
                  }
                }
              },
              "content": {
                "channelVariables": {
                  "<key>": {
                    "displayName": "<display name>",
                    "variableName": "<channel variable name>",
                    "computeSpec": {
                      "type": "v1",
                      "v1": "<compute spec v1>"
                    },
                    "computeSpecV2": {
                      "computeNode": {
                        "type": "enum",
                        "enum": {
                          "type": "aggregate",
                          "aggregate": {
                            "function": "MIN"
                          }
                        }
                      },
                      "context": {
                        "variables": {
                          "<key>": {
                            "type": "variable",
                            "variable": "<variable name>"
                          }
                        }
                      },
                      "computeExpression": {
                        "type": "v1",
                        "v1": {
                          "type": "python",
                          "python": {
                            "expression": "<expression>",
                            "inputMap": {
                              "<key>": {
                                "value": {
                                  "type": "variable",
                                  "variable": "<channel variable name>"
                                },
                                "dataType": "NUMERIC_SERIES"
                              }
                            },
                            "nominalComputePythonVersion": "<nominal compute python version>"
                          }
                        }
                      }
                    }
                  }
                },
                "inputs": {
                  "type": "v1",
                  "v1": {
                    "inputs": [
                      {
                        "id": "<id>",
                        "label": "<label>",
                        "value": {
                          "type": "tag",
                          "tag": {
                            "key": {
                              "type": "literal",
                              "literal": {
                                "id": "<id>",
                                "value": "<value>"
                              }
                            },
                            "values": [
                              {
                                "type": "literal",
                                "literal": {
                                  "id": "<id>",
                                  "value": "<value>"
                                }
                              }
                            ]
                          }
                        }
                      }
                    ]
                  }
                },
                "charts": {
                  "<key>": {
                    "type": "boundary",
                    "boundary": {
                      "type": "v1",
                      "v1": {
                        "title": "<title>",
                        "type": {
                          "type": "source",
                          "source": {}
                        },
                        "fillColor": "<hex color>"
                      }
                    }
                  }
                },
                "settings": {
                  "assetSettings": {
                    "<key>": {
                      "offset": {
                        "duration": 1,
                        "unit": "DAYS"
                      },
                      "dataScopeOffsets": {
                        "<key>": {
                          "duration": 1,
                          "unit": "DAYS"
                        }
                      }
                    }
                  },
                  "runSettings": {
                    "<key>": {
                      "offset": {
                        "duration": 1,
                        "unit": "DAYS"
                      },
                      "assetSettings": {
                        "<key>": {
                          "offset": {
                            "duration": 1,
                            "unit": "DAYS"
                          },
                          "dataScopeOffsets": {
                            "<key>": {
                              "duration": 1,
                              "unit": "DAYS"
                            }
                          }
                        }
                      }
                    }
                  },
                  "timeSettings": {
                    "type": "v1",
                    "v1": {
                      "timeRangeType": "ABSOLUTE",
                      "globalTimeRange": {
                        "start": {
                          "seconds": 1,
                          "nanos": 1
                        },
                        "end": {
                          "seconds": 1,
                          "nanos": 1
                        }
                      },
                      "isGlobalTime": true,
                      "tabTimeRanges": {
                        "<key>": {
                          "start": {
                            "seconds": 1,
                            "nanos": 1
                          },
                          "end": {
                            "seconds": 1,
                            "nanos": 1
                          }
                        }
                      },
                      "relativeTimestampFormat": {
                        "type": "inherit",
                        "inherit": {}
                      }
                    }
                  },
                  "offsets": {
                    "type": "v1",
                    "v1": {
                      "runs": {
                        "<key>": {
                          "offset": {
                            "type": "custom",
                            "custom": {
                              "duration": 1,
                              "unit": "DAYS"
                            }
                          },
                          "assets": {
                            "<key>": {
                              "offset": {
                                "type": "custom",
                                "custom": {
                                  "duration": 1,
                                  "unit": "DAYS"
                                }
                              },
                              "dataSources": {
                                "<key>": {
                                  "type": "custom",
                                  "custom": {
                                    "duration": 1,
                                    "unit": "DAYS"
                                  }
                                }
                              }
                            }
                          }
                        }
                      },
                      "assets": {
                        "<key>": {
                          "offset": {
                            "type": "custom",
                            "custom": {
                              "duration": 1,
                              "unit": "DAYS"
                            }
                          },
                          "dataSources": {
                            "<key>": {
                              "type": "custom",
                              "custom": {
                                "duration": 1,
                                "unit": "DAYS"
                              }
                            }
                          }
                        }
                      },
                      "inputs": {
                        "<key>": {
                          "offset": {
                            "type": "custom",
                            "custom": {
                              "duration": 1,
                              "unit": "DAYS"
                            }
                          },
                          "assets": {
                            "<key>": {
                              "offset": {
                                "type": "custom",
                                "custom": {
                                  "duration": 1,
                                  "unit": "DAYS"
                                }
                              },
                              "dataSources": {
                                "<key>": {
                                  "type": "custom",
                                  "custom": {
                                    "duration": 1,
                                    "unit": "DAYS"
                                  }
                                }
                              }
                            }
                          },
                          "runs": {
                            "<key>": {
                              "offset": {
                                "type": "custom",
                                "custom": {
                                  "duration": 1,
                                  "unit": "DAYS"
                                }
                              },
                              "assets": {
                                "<key>": {
                                  "offset": {
                                    "type": "custom",
                                    "custom": {
                                      "duration": 1,
                                      "unit": "DAYS"
                                    }
                                  },
                                  "dataSources": {
                                    "<key>": {
                                      "type": "custom",
                                      "custom": {
                                        "duration": 1,
                                        "unit": "DAYS"
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  },
                  "defaultStalenessConfiguration": {
                    "threshold": {
                      "seconds": 1,
                      "nanos": 1
                    },
                    "connectStalePoints": true
                  },
                  "fillStrategy": {
                    "type": "forwardFill",
                    "forwardFill": {
                      "duration": 1,
                      "unit": "DAYS"
                    }
                  },
                  "alignmentStrategy": {
                    "type": "driverSeries",
                    "driverSeries": {}
                  },
                  "statsPanelScope": {
                    "type": "selectedTab",
                    "selectedTab": {}
                  }
                },
                "dataScopeInputs": {
                  "type": "v1",
                  "v1": {
                    "inputs": {
                      "<key>": {
                        "name": "<workbook data scope input name>",
                        "label": "<label>",
                        "value": {
                          "type": "asset",
                          "asset": {
                            "assetRid": "<asset rid>"
                          }
                        },
                        "colorMode": {
                          "type": "byChannel",
                          "byChannel": {}
                        },
                        "alignment": {
                          "type": "run",
                          "run": {
                            "type": "intervalStart",
                            "intervalStart": {}
                          }
                        },
                        "filters": [
                          {
                            "type": "tag",
                            "tag": {
                              "id": "<id>",
                              "key": {
                                "type": "literal",
                                "literal": "<literal>"
                              },
                              "operator": "IN",
                              "values": [
                                {
                                  "type": "literal",
                                  "literal": "<literal>"
                                }
                              ]
                            }
                          }
                        ]
                      }
                    }
                  }
                },
                "timeRangeInputs": {
                  "<key>": {
                    "label": "<label>",
                    "timeRange": {
                      "start": {
                        "seconds": 1,
                        "nanos": 1
                      },
                      "end": {
                        "seconds": 1,
                        "nanos": 1
                      }
                    },
                    "timeRangeType": "ABSOLUTE"
                  }
                },
                "timeRanges": {
                  "<key>": {
                    "type": "timeRangeV1",
                    "timeRangeV1": {
                      "label": "<label>",
                      "time": {
                        "absoluteRange": {
                          "start": {
                            "seconds": 1,
                            "nanos": 1
                          },
                          "end": {
                            "seconds": 1,
                            "nanos": 1
                          }
                        },
                        "timeRangeType": "ABSOLUTE",
                        "t0": {
                          "seconds": 1,
                          "nanos": 1
                        }
                      }
                    }
                  }
                },
                "reportContent": "<report content>",
                "version": "<version>"
              }
            }
          }
        }
      }
    }
  },
  "definitions": {
    "Empty": {
      "type": "object",
      "properties": {}
    },
    "NumericPropertyPredicate": {
      "description": "Matches resources that have a numeric value for the named property and whose value satisfies the operator. NEQ excludes resources that lack the property or store a string value under the same name.",
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "x-alias": "PropertyName"
        },
        "value": {
          "type": "number",
          "format": "double"
        },
        "operator": {
          "$ref": "#/definitions/PropertyComparisonOperator"
        }
      },
      "required": [
        "name",
        "value",
        "operator"
      ]
    },
    "NumericPropertyRangeOperator": {
      "type": "string",
      "enum": [
        "BETWEEN",
        "NOT_BETWEEN"
      ]
    },
    "NumericPropertyRangePredicate": {
      "description": "Inclusive range on a numeric property. At least one bound is required. BETWEEN: min <= x <= max. An absent bound is unbounded on that side. NOT_BETWEEN: x < min OR x > max. An absent bound drops that side. Both operators require a numeric value for `name`. Missing properties and string values never match. Bounds are closed [min, max] to match the number chip (is between / is not between), not half-open.",
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "x-alias": "PropertyName"
        },
        "min": {
          "type": "number",
          "format": "double"
        },
        "max": {
          "type": "number",
          "format": "double"
        },
        "operator": {
          "$ref": "#/definitions/NumericPropertyRangeOperator"
        }
      },
      "required": [
        "name",
        "operator"
      ]
    },
    "nominal.api.Property": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "x-alias": "PropertyName"
        },
        "value": {
          "type": "string",
          "x-alias": "PropertyValue"
        }
      },
      "required": [
        "name",
        "value"
      ]
    },
    "PropertyComparisonOperator": {
      "type": "string",
      "enum": [
        "EQ",
        "NEQ",
        "GT",
        "GTE",
        "LT",
        "LTE"
      ]
    },
    "Range": {
      "description": "Deprecated for new APIs. Define an API-owned range with the endpoint semantics it needs instead.",
      "type": "object",
      "properties": {
        "start": {
          "$ref": "#/definitions/Timestamp"
        },
        "end": {
          "$ref": "#/definitions/Timestamp"
        }
      },
      "required": [
        "start",
        "end"
      ]
    },
    "SetOperator": {
      "type": "string",
      "enum": [
        "AND",
        "OR"
      ]
    },
    "ThemeAwareImage": {
      "type": "object",
      "properties": {
        "light": {
          "type": "string",
          "format": "rid",
          "x-alias": "AttachmentRid"
        },
        "dark": {
          "type": "string",
          "format": "rid",
          "x-alias": "AttachmentRid"
        }
      },
      "required": [
        "light",
        "dark"
      ]
    },
    "TimeUnit": {
      "type": "string",
      "enum": [
        "DAYS",
        "HOURS",
        "MINUTES",
        "SECONDS",
        "MILLISECONDS",
        "MICROSECONDS",
        "NANOSECONDS"
      ]
    },
    "Timestamp": {
      "description": "Deprecated for new APIs. Use google.protobuf.Timestamp for absolute instants in proto APIs.\n\nThis legacy nanosecond precision timestamp type is represented by an epoch time in seconds and a nanosecond offset. The nanosecond offset is from the start of the epoch second, so must be less than 1 billion.",
      "type": "object",
      "properties": {
        "seconds": {
          "type": "integer",
          "format": "int64"
        },
        "nanos": {
          "type": "integer",
          "format": "int64"
        }
      },
      "required": [
        "seconds",
        "nanos"
      ]
    },
    "AssetsFilter": {
      "type": "object",
      "properties": {
        "operator": {
          "$ref": "#/definitions/SetOperator"
        },
        "assets": {
          "type": "array",
          "items": {
            "type": "string",
            "format": "rid",
            "x-alias": "AssetRid"
          }
        }
      },
      "required": [
        "operator"
      ]
    },
    "AssigneesFilter": {
      "type": "object",
      "properties": {
        "operator": {
          "$ref": "#/definitions/SetOperator"
        },
        "assignees": {
          "type": "array",
          "items": {
            "type": "string",
            "format": "rid",
            "x-alias": "UserRid"
          }
        }
      },
      "required": [
        "operator"
      ]
    },
    "DataReviewChecksFilter": {
      "type": "object",
      "properties": {
        "dataReviewChecks": {
          "type": "array",
          "items": {
            "type": "string",
            "format": "rid",
            "x-alias": "CheckRid"
          }
        }
      }
    },
    "DataReviewsFilter": {
      "type": "object",
      "properties": {
        "dataReviews": {
          "type": "array",
          "items": {
            "type": "string",
            "format": "rid",
            "x-alias": "DataReviewRid"
          }
        }
      }
    },
    "event.EventDispositionStatus": {
      "type": "string",
      "enum": [
        "PENDING_REVIEW",
        "CLOSED_IGNORED",
        "CLOSED_REQUIRES_FURTHER_ACTION",
        "NO_DISPOSITION"
      ]
    },
    "event.EventTimeFilter": {
      "type": "object",
      "properties": {
        "timestamp": {
          "$ref": "#/definitions/Timestamp"
        },
        "timestampCondition": {
          "$ref": "#/definitions/event.EventTimeFilterCondition"
        }
      },
      "required": [
        "timestamp",
        "timestampCondition"
      ]
    },
    "event.EventTimeFilterCondition": {
      "type": "string",
      "enum": [
        "START_TIME_BEFORE_INCLUSIVE",
        "START_TIME_BEFORE_EXCLUSIVE",
        "START_TIME_AFTER_INCLUSIVE",
        "START_TIME_AFTER_EXCLUSIVE",
        "END_TIME_BEFORE_INCLUSIVE",
        "END_TIME_BEFORE_EXCLUSIVE",
        "END_TIME_AFTER_INCLUSIVE",
        "END_TIME_AFTER_EXCLUSIVE"
      ]
    },
    "event.EventType": {
      "type": "string",
      "enum": [
        "INFO",
        "FLAG",
        "ERROR",
        "SUCCESS"
      ]
    },
    "OriginTypesFilter": {
      "type": "object",
      "properties": {
        "operator": {
          "$ref": "#/definitions/SetOperator"
        },
        "originTypes": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/event.SearchEventOriginType"
          }
        }
      },
      "required": [
        "operator"
      ]
    },
    "event.SearchEventOriginType": {
      "type": "string",
      "enum": [
        "WORKBOOK",
        "TEMPLATE",
        "API",
        "DATA_REVIEW",
        "PROCEDURE",
        "STREAMING_CHECKLIST"
      ]
    },
    "SearchQuery": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "archived",
            "searchText",
            "exactMatch",
            "after",
            "before",
            "advancedTimeFilter",
            "asset",
            "assets",
            "template",
            "workbook",
            "dataReview",
            "dataReviews",
            "originType",
            "originTypes",
            "dataReviewCheck",
            "dataReviewChecks",
            "dispositionStatus",
            "dispositionStatuses",
            "priority",
            "priorities",
            "assignee",
            "assignees",
            "eventType",
            "eventTypes",
            "createdBy",
            "createdByAnyOf",
            "label",
            "labels",
            "property",
            "properties",
            "and",
            "or",
            "not",
            "workspace",
            "procedure",
            "procedureExecution",
            "stepId",
            "streamingChecklist",
            "streamingCheck",
            "numericProperty",
            "numericPropertyRange"
          ]
        },
        "archived": {
          "type": "boolean"
        },
        "searchText": {
          "type": "string",
          "description": "Search text to perform fuzzy searching against."
        },
        "exactMatch": {
          "type": "string",
          "description": "Search text to perform exact matching against on the event name and description."
        },
        "after": {
          "allOf": [
            {
              "$ref": "#/definitions/Timestamp"
            }
          ],
          "description": "Filters to events after this timestamp, exclusive. This includes events that start before, but end after this time."
        },
        "before": {
          "allOf": [
            {
              "$ref": "#/definitions/Timestamp"
            }
          ],
          "description": "Filters to events before this timestamp, exclusive. This includes events that start before, but end after this time."
        },
        "advancedTimeFilter": {
          "$ref": "#/definitions/event.EventTimeFilter"
        },
        "asset": {
          "type": "string",
          "format": "rid",
          "x-alias": "AssetRid",
          "x-deprecated": "use assetRids"
        },
        "assets": {
          "$ref": "#/definitions/AssetsFilter"
        },
        "template": {
          "type": "string",
          "format": "rid",
          "x-alias": "TemplateRid"
        },
        "workbook": {
          "type": "string",
          "format": "rid",
          "x-alias": "NotebookRid"
        },
        "dataReview": {
          "type": "string",
          "format": "rid",
          "x-alias": "DataReviewRid",
          "x-deprecated": "use dataReviews instead"
        },
        "dataReviews": {
          "$ref": "#/definitions/DataReviewsFilter"
        },
        "originType": {
          "allOf": [
            {
              "$ref": "#/definitions/event.SearchEventOriginType"
            }
          ],
          "x-deprecated": "use originTypes instead"
        },
        "originTypes": {
          "$ref": "#/definitions/OriginTypesFilter"
        },
        "dataReviewCheck": {
          "type": "string",
          "format": "rid",
          "x-alias": "CheckRid",
          "x-deprecated": "use dataReviewChecks instead"
        },
        "dataReviewChecks": {
          "$ref": "#/definitions/DataReviewChecksFilter"
        },
        "dispositionStatus": {
          "allOf": [
            {
              "$ref": "#/definitions/event.EventDispositionStatus"
            }
          ],
          "x-deprecated": "use dispositionStatuses instead"
        },
        "dispositionStatuses": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/event.EventDispositionStatus"
          }
        },
        "priority": {
          "allOf": [
            {
              "$ref": "#/definitions/Priority"
            }
          ],
          "x-deprecated": "use priorities instead"
        },
        "priorities": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Priority"
          }
        },
        "assignee": {
          "type": "string",
          "format": "rid",
          "x-alias": "UserRid",
          "x-deprecated": "use assignees instead"
        },
        "assignees": {
          "$ref": "#/definitions/AssigneesFilter"
        },
        "eventType": {
          "allOf": [
            {
              "$ref": "#/definitions/event.EventType"
            }
          ],
          "x-deprecated": "use eventTypes instead"
        },
        "eventTypes": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/event.EventType"
          }
        },
        "createdBy": {
          "type": "string",
          "format": "rid",
          "x-alias": "UserRid"
        },
        "createdByAnyOf": {
          "type": "array",
          "items": {
            "type": "string",
            "format": "rid",
            "x-alias": "UserRid"
          }
        },
        "label": {
          "type": "string",
          "x-alias": "Label",
          "x-deprecated": "use labels instead"
        },
        "labels": {
          "$ref": "#/definitions/LabelsFilter"
        },
        "property": {
          "allOf": [
            {
              "$ref": "#/definitions/nominal.api.Property"
            }
          ],
          "x-deprecated": "use properties instead"
        },
        "properties": {
          "$ref": "#/definitions/PropertiesFilter"
        },
        "and": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/SearchQuery"
          }
        },
        "or": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/SearchQuery"
          }
        },
        "not": {
          "$ref": "#/definitions/SearchQuery"
        },
        "workspace": {
          "type": "string",
          "format": "rid",
          "x-alias": "WorkspaceRid"
        },
        "procedure": {
          "type": "string",
          "format": "rid",
          "x-alias": "ProcedureRid"
        },
        "procedureExecution": {
          "type": "string",
          "format": "rid",
          "x-alias": "ProcedureExecutionRid"
        },
        "stepId": {
          "type": "string"
        },
        "streamingChecklist": {
          "type": "string",
          "format": "rid",
          "x-alias": "ChecklistRid",
          "description": "Filters to events created from a checklist executing in streaming. Use `assets` to further filter to a specific streaming checklist instance."
        },
        "streamingCheck": {
          "type": "string",
          "format": "rid",
          "x-alias": "CheckRid",
          "description": "Filters to events created from the check of a checklist executing in streaming. Use `assets` to further filter to a specific streaming checklist instance."
        },
        "numericProperty": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericPropertyPredicate"
            }
          ],
          "description": "Matches events using a numeric property comparison."
        },
        "numericPropertyRange": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericPropertyRangePredicate"
            }
          ],
          "description": "Matches events using an inclusive numeric property range."
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "archived",
        "archived": true
      }
    },
    "ChannelLocator": {
      "type": "object",
      "properties": {
        "dataSourceRef": {
          "type": "string",
          "x-alias": "DataSourceRefName"
        },
        "channel": {
          "type": "string",
          "x-alias": "Channel"
        },
        "tags": {
          "type": "object",
          "additionalProperties": {
            "type": "string",
            "x-alias": "TagValue"
          },
          "x-map-key": "TagName"
        },
        "asset": {
          "type": "string",
          "x-alias": "AssetRefName"
        },
        "run": {
          "type": "string",
          "x-alias": "RunRefName"
        },
        "inputId": {
          "type": "string"
        }
      },
      "required": [
        "dataSourceRef",
        "channel"
      ]
    },
    "CommandValue": {
      "description": "A command payload. The variant must match the target channel's data type: floatValue for DOUBLE channels, intValue for INT channels, and enumValue for STRING channels.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "floatValue",
            "intValue",
            "enumValue"
          ]
        },
        "floatValue": {
          "type": "number",
          "format": "double"
        },
        "intValue": {
          "type": "string",
          "x-alias": "CommandIntValue"
        },
        "enumValue": {
          "type": "string"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "floatValue",
        "floatValue": 1
      }
    },
    "Priority": {
      "type": "string",
      "enum": [
        "P0",
        "P1",
        "P2",
        "P3",
        "P4"
      ]
    },
    "ChannelVariable": {
      "type": "object",
      "properties": {
        "displayName": {
          "type": "string"
        },
        "variableName": {
          "type": "string",
          "x-alias": "ChannelVariableName"
        },
        "computeSpec": {
          "$ref": "#/definitions/ComputeSpec"
        },
        "computeSpecV2": {
          "allOf": [
            {
              "$ref": "#/definitions/channelvariables.api.ComputeNodeWithContext"
            }
          ],
          "description": "optional for backcompatibility. If empty, fall back to computeSpec."
        }
      },
      "required": [
        "variableName",
        "computeSpec"
      ]
    },
    "ChannelVariableComputeExpression": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "v1"
          ]
        },
        "v1": {
          "$ref": "#/definitions/ChannelVariableComputeExpressionV1"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "v1",
        "v1": {
          "type": "python",
          "python": {
            "expression": "string",
            "inputMap": {
              "key": {
                "value": {
                  "type": "variable",
                  "variable": "string"
                },
                "dataType": "NUMERIC_SERIES"
              }
            },
            "nominalComputePythonVersion": "string"
          }
        }
      }
    },
    "ChannelVariableComputeExpressionInput": {
      "type": "object",
      "properties": {
        "value": {
          "$ref": "#/definitions/ChannelVariableComputeExpressionInputValue"
        },
        "dataType": {
          "$ref": "#/definitions/ChannelVariableComputeExpressionInputDataType"
        }
      },
      "required": [
        "value",
        "dataType"
      ]
    },
    "ChannelVariableComputeExpressionInputDataType": {
      "type": "string",
      "enum": [
        "NUMERIC_SERIES",
        "ENUM_SERIES",
        "RANGE_SERIES",
        "BOOLEAN_SERIES"
      ]
    },
    "ChannelVariableComputeExpressionInputValue": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "variable"
          ]
        },
        "variable": {
          "type": "string",
          "x-alias": "ChannelVariableName"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "variable",
        "variable": "string"
      }
    },
    "ChannelVariableComputeExpressionV1": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "python"
          ]
        },
        "python": {
          "$ref": "#/definitions/ChannelVariableComputeExpressionV1Python"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "python",
        "python": {
          "expression": "string",
          "inputMap": {
            "key": {
              "value": {
                "type": "variable",
                "variable": "string"
              },
              "dataType": "NUMERIC_SERIES"
            }
          },
          "nominalComputePythonVersion": "string"
        }
      }
    },
    "ChannelVariableComputeExpressionV1Python": {
      "type": "object",
      "properties": {
        "expression": {
          "type": "string",
          "description": "The python code string representing the compute for this variable. Can be up to 25000 characters long."
        },
        "inputMap": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/ChannelVariableComputeExpressionInput"
          },
          "description": "A map of inputs by the name they're referenced by in the expression. Inputs can be other channel variables."
        },
        "nominalComputePythonVersion": {
          "type": "string",
          "description": "The Nominal compute python version identifier which the expression was written in. Used to determine if any migrations are needed to later versions of the python compute syntax. If not present, assumes the oldest version."
        }
      },
      "required": [
        "expression"
      ]
    },
    "channelvariables.api.ComputeNodeWithContext": {
      "type": "object",
      "properties": {
        "computeNode": {
          "allOf": [
            {
              "$ref": "#/definitions/ComputeNode"
            }
          ],
          "description": "Graph representation of the compute for a channel variable."
        },
        "context": {
          "$ref": "#/definitions/WorkbookContext"
        },
        "computeExpression": {
          "allOf": [
            {
              "$ref": "#/definitions/ChannelVariableComputeExpression"
            }
          ],
          "description": "Code representation of the compute for a channel variable. Should be equivalent to the computeNode."
        }
      },
      "required": [
        "computeNode",
        "context"
      ]
    },
    "ComputeSpec": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "v1"
          ]
        },
        "v1": {
          "type": "string",
          "x-alias": "ComputeSpecV1"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "v1",
        "v1": "string"
      }
    },
    "VariableLocator": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "variable",
            "series"
          ]
        },
        "variable": {
          "type": "string",
          "x-alias": "VariableName"
        },
        "series": {
          "$ref": "#/definitions/ChannelLocator"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "variable",
        "variable": "string"
      }
    },
    "WorkbookContext": {
      "type": "object",
      "properties": {
        "variables": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/VariableLocator"
          },
          "x-map-key": "VariableName"
        }
      }
    },
    "AlwaysConnectDisconnectedValues": {
      "description": "This option indicates that disconnected values will always be connected with a line.",
      "type": "object",
      "properties": {}
    },
    "AxisDisplayOptions": {
      "type": "object",
      "properties": {
        "showTitle": {
          "type": "boolean"
        },
        "axisWidth": {
          "type": "number",
          "format": "double"
        },
        "scaleType": {
          "allOf": [
            {
              "$ref": "#/definitions/AxisScaleType"
            }
          ],
          "description": "The scale type of the axis. If not specified, the default is LINEAR."
        }
      },
      "required": [
        "showTitle"
      ]
    },
    "AxisDomainType": {
      "type": "string",
      "enum": [
        "NUMERIC",
        "CATEGORICAL"
      ]
    },
    "AxisPosition": {
      "type": "string",
      "enum": [
        "LEFT",
        "RIGHT"
      ]
    },
    "AxisRange": {
      "type": "object",
      "properties": {
        "start": {
          "type": "number",
          "format": "double"
        },
        "end": {
          "type": "number",
          "format": "double"
        }
      }
    },
    "AxisScaleType": {
      "type": "string",
      "enum": [
        "LINEAR",
        "LOG"
      ]
    },
    "AxisThresholdGroup": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "lineThresholds"
          ]
        },
        "lineThresholds": {
          "$ref": "#/definitions/LineThresholdGroup"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "lineThresholds",
        "lineThresholds": {
          "shadingConfig": "ABOVE",
          "lines": [
            {
              "value": 1,
              "label": "string",
              "color": "string",
              "lineStyle": "DOTTED"
            }
          ],
          "defaultFill": {
            "color": "string"
          }
        }
      }
    },
    "AxisThresholdVisualization": {
      "type": "object",
      "properties": {
        "axisId": {
          "type": "string",
          "x-alias": "AxisId"
        },
        "visibility": {
          "type": "boolean",
          "description": "Determines it's current visibility in the time series chart."
        },
        "thresholds": {
          "$ref": "#/definitions/AxisThresholdGroup"
        }
      },
      "required": [
        "axisId",
        "visibility",
        "thresholds"
      ]
    },
    "BitFlag": {
      "description": "The settings for a bit flag mapping. Each position should be unique. Position 0 represents the least significant bit and position 31 represents the most significant bit.",
      "type": "object",
      "properties": {
        "position": {
          "type": "integer",
          "format": "int32"
        },
        "label": {
          "type": "string"
        }
      },
      "required": [
        "position",
        "label"
      ]
    },
    "BitFlagMapCellConfig": {
      "type": "object",
      "properties": {
        "visualisation": {
          "$ref": "#/definitions/BitFlagMapVisualisation"
        }
      }
    },
    "BitFlagMapRawVisualisation": {
      "description": "The settings for a raw bit flag map visualisation.",
      "type": "object",
      "properties": {
        "highColor": {
          "type": "string",
          "x-alias": "HexColor",
          "description": "The color when any bit is high"
        },
        "lowColor": {
          "type": "string",
          "x-alias": "HexColor",
          "description": "The color when all bits are low"
        },
        "bitFlags": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/BitFlag"
          }
        }
      }
    },
    "BitFlagMapVisualisation": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "raw"
          ]
        },
        "raw": {
          "$ref": "#/definitions/BitFlagMapRawVisualisation"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "raw",
        "raw": {
          "highColor": "string",
          "lowColor": "string",
          "bitFlags": [
            {
              "position": 1,
              "label": "string"
            }
          ]
        }
      }
    },
    "BoundaryType": {
      "description": "The boundary type, with type-specific configuration.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "source",
            "sink"
          ]
        },
        "source": {
          "$ref": "#/definitions/SourceBoundary"
        },
        "sink": {
          "$ref": "#/definitions/SinkBoundary"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "source",
        "source": {}
      }
    },
    "BoundaryVizDefinition": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "v1"
          ]
        },
        "v1": {
          "$ref": "#/definitions/BoundaryVizDefinitionV1"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "v1",
        "v1": {
          "title": "string",
          "type": {
            "type": "source",
            "source": {}
          },
          "fillColor": "string"
        }
      }
    },
    "BoundaryVizDefinitionV1": {
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "description": "The label displayed on the boundary."
        },
        "type": {
          "allOf": [
            {
              "$ref": "#/definitions/BoundaryType"
            }
          ],
          "description": "Whether the boundary is a source or a sink, with type-specific configuration."
        },
        "fillColor": {
          "type": "string",
          "x-alias": "HexColor",
          "description": "Fill color of the boundary. A pipe coming out of a source boundary inherits this color."
        }
      },
      "required": [
        "type"
      ]
    },
    "BucketDisplayConfig": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "default",
            "singleStat"
          ]
        },
        "default": {
          "$ref": "#/definitions/BucketDisplayConfigDefault"
        },
        "singleStat": {
          "$ref": "#/definitions/BucketDisplayConfigSingleStat"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "default",
        "default": {}
      }
    },
    "BucketDisplayConfigDefault": {
      "description": "Default bucket display configuration, which renders a shaded min/max region per bucket with a stair-step line from first point through mean to last point.",
      "type": "object",
      "properties": {}
    },
    "BucketDisplayConfigSingleStat": {
      "type": "object",
      "properties": {
        "stat": {
          "$ref": "#/definitions/BucketDisplayStat"
        }
      },
      "required": [
        "stat"
      ]
    },
    "BucketDisplayStat": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "mean",
            "min",
            "max",
            "count",
            "sum",
            "percentile",
            "lttb"
          ]
        },
        "mean": {
          "$ref": "#/definitions/NoConfigDisplayStat"
        },
        "min": {
          "$ref": "#/definitions/NoConfigDisplayStat"
        },
        "max": {
          "$ref": "#/definitions/NoConfigDisplayStat"
        },
        "count": {
          "$ref": "#/definitions/NoConfigDisplayStat"
        },
        "sum": {
          "$ref": "#/definitions/NoConfigDisplayStat"
        },
        "percentile": {
          "$ref": "#/definitions/BucketDisplayStatPercentile"
        },
        "lttb": {
          "$ref": "#/definitions/NoConfigDisplayStat"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "mean",
        "mean": {}
      }
    },
    "BucketDisplayStatPercentile": {
      "type": "object",
      "properties": {
        "value": {
          "type": "string",
          "description": "Percentile value as a string (e.g. \"0.95\") to avoid floating-point precision issues. Must be between 0 and 1."
        }
      },
      "required": [
        "value"
      ]
    },
    "BurstDiscVizDefinition": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "v1"
          ]
        },
        "v1": {
          "$ref": "#/definitions/BurstDiscVizDefinitionV1"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "v1",
        "v1": {
          "title": "string",
          "rotationDegrees": 1
        }
      }
    },
    "BurstDiscVizDefinitionV1": {
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "description": "The label displayed on the burst disc."
        },
        "rotationDegrees": {
          "type": "integer",
          "format": "int32",
          "description": "Clockwise rotation in degrees. Multiples of 90; absent means no rotation."
        }
      }
    },
    "ButtonVizDefinition": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "v1"
          ]
        },
        "v1": {
          "$ref": "#/definitions/ButtonVizDefinitionV1"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "v1",
        "v1": {
          "label": "string",
          "action": {
            "type": "sendCommands",
            "sendCommands": {
              "commands": [
                {
                  "variableName": "string",
                  "value": {
                    "type": "floatValue",
                    "floatValue": 1
                  }
                }
              ]
            }
          },
          "confirmation": {
            "title": "string",
            "description": "string",
            "confirmLabel": "string"
          }
        }
      }
    },
    "ButtonVizDefinitionV1": {
      "type": "object",
      "properties": {
        "label": {
          "type": "string",
          "description": "The text rendered on the button."
        },
        "action": {
          "$ref": "#/definitions/VizAction"
        },
        "confirmation": {
          "allOf": [
            {
              "$ref": "#/definitions/CommandConfirmation"
            }
          ],
          "description": "If present, the frontend must show a confirmation dialog and receive an explicit confirmation before performing the action."
        }
      },
      "required": [
        "label",
        "action"
      ]
    },
    "CartesianChartDefinition": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "v1"
          ]
        },
        "v1": {
          "$ref": "#/definitions/CartesianChartDefinitionV1"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "v1",
        "v1": {
          "plots": [
            {
              "xVariableName": "string",
              "yVariableName": "string",
              "secondaryVariables": [
                {
                  "variableName": "string",
                  "label": "string",
                  "enabled": true,
                  "visualizationOption": {
                    "type": "asColors",
                    "asColors": {
                      "type": "numeric",
                      "numeric": {
                        "key": 1
                      }
                    }
                  }
                }
              ],
              "enabled": true,
              "xAxisId": "string",
              "yAxisId": "string",
              "color": "string",
              "colorBy": {
                "type": "secondaryVariable",
                "secondaryVariable": "string"
              }
            }
          ],
          "events": [
            {
              "displayName": "string",
              "eventUuid": "string",
              "isPinned": true
            }
          ],
          "comparisonRunGroups": [
            {
              "uuid": "string",
              "name": "string",
              "offset": {
                "value": 1,
                "unit": "DAYS"
              },
              "offsetAnchor": {
                "type": "run",
                "run": {}
              },
              "runs": [
                {
                  "runRid": "string",
                  "enabled": true,
                  "offsetOverride": {
                    "value": 1,
                    "unit": "DAYS"
                  }
                }
              ],
              "color": "string"
            }
          ],
          "title": "string",
          "valueAxes": [
            {
              "id": "string",
              "title": "string",
              "displayOptions": {
                "showTitle": true,
                "axisWidth": 1,
                "scaleType": "LINEAR"
              },
              "range": {
                "start": 1,
                "end": 1
              },
              "limit": {
                "start": 1,
                "end": 1
              },
              "position": "LEFT",
              "domainType": "NUMERIC",
              "tickNumberFormat": {
                "sigFigs": 1,
                "displayOption": "SCIENTIFIC",
                "fixedDecimalPlaces": 1,
                "decimalPlaces": {
                  "type": "fixed",
                  "fixed": {
                    "places": 1
                  }
                }
              },
              "tooltipNumberFormat": {
                "sigFigs": 1,
                "displayOption": "SCIENTIFIC",
                "fixedDecimalPlaces": 1,
                "decimalPlaces": {
                  "type": "fixed",
                  "fixed": {
                    "places": 1
                  }
                }
              },
              "reversed": true,
              "tickInterval": 1
            }
          ],
          "decimation": {
            "type": "temporal",
            "temporal": {}
          },
          "connectPoints": true,
          "floatingLegendsConfig": {
            "hidden": true,
            "legend": {
              "type": "perRow",
              "perRow": {
                "position": {
                  "type": "preset",
                  "preset": "TOP_LEFT"
                }
              }
            },
            "hideEmptySeries": {
              "type": "always",
              "always": {}
            }
          }
        }
      }
    },
    "CartesianChartDefinitionV1": {
      "type": "object",
      "properties": {
        "plots": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/CartesianPlot"
          }
        },
        "events": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Event"
          },
          "x-deprecated": "Please use the workbook's eventRefs field instead."
        },
        "comparisonRunGroups": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/ComparisonRunGroup"
          }
        },
        "title": {
          "type": "string"
        },
        "valueAxes": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/ValueAxis"
          }
        },
        "decimation": {
          "allOf": [
            {
              "$ref": "#/definitions/ScatterDecimation"
            }
          ],
          "description": "The strategy for bucketing points together."
        },
        "connectPoints": {
          "type": "boolean",
          "description": "If toggled true, will visually connect the points of the series"
        },
        "floatingLegendsConfig": {
          "allOf": [
            {
              "$ref": "#/definitions/FloatingLegendConfig"
            }
          ],
          "description": "Config for showing a floating legend in the chart. If undefined, defaults to hiding."
        }
      }
    },
    "CartesianPlot": {
      "type": "object",
      "properties": {
        "xVariableName": {
          "type": "string",
          "x-alias": "ChannelVariableName"
        },
        "yVariableName": {
          "type": "string",
          "x-alias": "ChannelVariableName"
        },
        "secondaryVariables": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/SecondaryVariable"
          }
        },
        "enabled": {
          "type": "boolean"
        },
        "xAxisId": {
          "type": "string",
          "x-alias": "AxisId"
        },
        "yAxisId": {
          "type": "string",
          "x-alias": "AxisId"
        },
        "color": {
          "type": "string",
          "x-alias": "HexColor",
          "description": "Default color for points"
        },
        "colorBy": {
          "allOf": [
            {
              "$ref": "#/definitions/ColorBy"
            }
          ],
          "description": "Configuration for dynamic coloring. Overrides color if specified."
        }
      },
      "required": [
        "xVariableName",
        "yVariableName",
        "xAxisId",
        "yAxisId",
        "color"
      ]
    },
    "CenteredInstrumentLayout": {
      "description": "A single row of text centered in the bubble. There is never a divider.",
      "type": "object",
      "properties": {
        "text": {
          "type": "string"
        }
      }
    },
    "CheckValve": {
      "description": "A check valve, rendered with the check valve symbol. Static: it has no feedback or actions, and rotationDegrees sets the flow direction.",
      "type": "object",
      "properties": {}
    },
    "ChecklistChartDefinition": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "v1"
          ]
        },
        "v1": {
          "$ref": "#/definitions/ChecklistChartDefinitionV1"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "v1",
        "v1": {
          "selectedChecklistRids": [
            "string"
          ],
          "title": "string"
        }
      }
    },
    "ChecklistChartDefinitionV1": {
      "type": "object",
      "properties": {
        "selectedChecklistRids": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "title": {
          "type": "string"
        }
      }
    },
    "ColorBy": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "secondaryVariable"
          ]
        },
        "secondaryVariable": {
          "type": "string",
          "x-alias": "ChannelVariableName",
          "description": "Color by a secondary variable configured on the trace."
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "secondaryVariable",
        "secondaryVariable": "string"
      }
    },
    "ColorScheme": {
      "type": "string",
      "enum": [
        "TURBO",
        "MAGMA",
        "VIRIDIS",
        "PLASMA",
        "INFERNO"
      ]
    },
    "ColorStyle": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "mapped",
            "single"
          ]
        },
        "mapped": {
          "type": "object",
          "additionalProperties": {
            "type": "string",
            "x-alias": "HexColor"
          },
          "description": "Defines specific colors for specific values"
        },
        "single": {
          "type": "string",
          "x-alias": "HexColor",
          "description": "A single color to apply to the whole plot"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "mapped",
        "mapped": {
          "key": "string"
        }
      }
    },
    "ColumnTableState": {
      "description": "A union so a later shape arrives as a new arm rather than a retype of `ValueTableLayoutColumn.columnTableState`, which would break the wire once the field holds data. Same pattern as `ValueTableDefinition`.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "v1"
          ]
        },
        "v1": {
          "$ref": "#/definitions/ColumnTableStateV1"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "v1",
        "v1": {
          "state": {
            "key": {}
          }
        }
      }
    },
    "ColumnTableStateV1": {
      "type": "object",
      "properties": {
        "state": {
          "type": "object",
          "additionalProperties": {},
          "description": "Client-owned table state payload: a JSON object of sort, column order, width, visibility, and filters. Unmodelled so the client grid library's own shapes never freeze into this API."
        }
      }
    },
    "CommandConfirmation": {
      "type": "object",
      "properties": {
        "title": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "confirmLabel": {
          "type": "string",
          "description": "Label for the confirm action. Clients provide a default when absent."
        }
      },
      "required": [
        "title"
      ]
    },
    "CommandTarget": {
      "description": "A channel that receives a value the user enters.",
      "type": "object",
      "properties": {
        "variableName": {
          "type": "string",
          "x-alias": "ChannelVariableName",
          "description": "Channel variable naming the commandable series, resolved by the document hosting this visualization. Must resolve to a physical series (VariableLocator.series)."
        }
      },
      "required": [
        "variableName"
      ]
    },
    "ConnectingLineConfiguration": {
      "description": "How to draw connecting lines between points",
      "type": "object",
      "properties": {
        "style": {
          "$ref": "#/definitions/ConnectingLineStyle"
        },
        "alwaysConnected": {
          "type": "boolean",
          "description": "When true, points connect regardless of the staleness threshold, as if the threshold were infinite. By default, gaps wider than the threshold are left unconnected."
        }
      },
      "required": [
        "style"
      ]
    },
    "ConnectingLineStyle": {
      "description": "The shape of the connecting line between points\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "none",
            "forwardFill",
            "linearInterpolation"
          ]
        },
        "none": {
          "$ref": "#/definitions/NoConnectingLine"
        },
        "forwardFill": {
          "$ref": "#/definitions/ForwardFillConnectingLine"
        },
        "linearInterpolation": {
          "$ref": "#/definitions/LinearInterpolationConnectingLine"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "none",
        "none": {}
      }
    },
    "DataRequestMode": {
      "description": "How data is requested from the backend. Currently supports \"full rate\" and \"bucketed\". Full rate means every point is its own timestamp. Bucketed means the window in question is divided into (say, 1000) buckets and only the aggregates within each bucket are returned.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "fullRate",
            "bucketed"
          ]
        },
        "fullRate": {
          "$ref": "#/definitions/NoConfigDataRequestMode"
        },
        "bucketed": {
          "$ref": "#/definitions/NoConfigDataRequestMode"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "fullRate",
        "fullRate": {}
      }
    },
    "DecimalPlaces": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "fixed",
            "max"
          ]
        },
        "fixed": {
          "$ref": "#/definitions/FixedDecimalPlaces"
        },
        "max": {
          "$ref": "#/definitions/MaxDecimalPlaces"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "fixed",
        "fixed": {
          "places": 1
        }
      }
    },
    "DefaultFill": {
      "type": "object",
      "properties": {
        "color": {
          "type": "string",
          "x-alias": "HexColor"
        }
      },
      "required": [
        "color"
      ]
    },
    "DisconnectedValueVisualization": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "alwaysConnect",
            "never",
            "threshold"
          ]
        },
        "alwaysConnect": {
          "$ref": "#/definitions/AlwaysConnectDisconnectedValues"
        },
        "never": {
          "$ref": "#/definitions/NeverConnectDisconnectedValues"
        },
        "threshold": {
          "$ref": "#/definitions/ThresholdDisconnectedValues"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "alwaysConnect",
        "alwaysConnect": {}
      }
    },
    "EllipseShape": {
      "type": "object",
      "properties": {}
    },
    "EndNodeVizDefinition": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "v1"
          ]
        },
        "v1": {
          "$ref": "#/definitions/EndNodeVizDefinitionV1"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "v1",
        "v1": {
          "title": "string",
          "rotationDegrees": 1
        }
      }
    },
    "EndNodeVizDefinitionV1": {
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "description": "The label displayed on the end node."
        },
        "rotationDegrees": {
          "type": "integer",
          "format": "int32",
          "description": "Clockwise rotation in degrees. Multiples of 90; absent means no rotation."
        }
      }
    },
    "EnumArrayCellConfig": {
      "type": "object",
      "properties": {
        "visualisation": {
          "$ref": "#/definitions/EnumArrayVisualisation"
        }
      }
    },
    "EnumArrayRawVisualisation": {
      "description": "A raw enum array visualisation with optional coloring based on enum thresholds.",
      "type": "object",
      "properties": {}
    },
    "EnumArrayVisualisation": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "raw"
          ]
        },
        "raw": {
          "$ref": "#/definitions/EnumArrayRawVisualisation"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "raw",
        "raw": {}
      }
    },
    "EnumCellConfig": {
      "type": "object",
      "properties": {
        "visualisation": {
          "$ref": "#/definitions/EnumValueVisualisation"
        },
        "groupBySort": {
          "allOf": [
            {
              "$ref": "#/definitions/EnumGroupBySort"
            }
          ],
          "description": "Sorting configuration for grouped data rendering in a cell. If undefined, will sort alphabetically by grouping."
        }
      }
    },
    "EnumDisplayStyle": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "stacked",
            "inline",
            "bar",
            "line"
          ]
        },
        "stacked": {
          "$ref": "#/definitions/EnumDisplayStyleStacked"
        },
        "inline": {
          "$ref": "#/definitions/EnumDisplayStyleInline"
        },
        "bar": {
          "$ref": "#/definitions/EnumDisplayStyleBar"
        },
        "line": {
          "$ref": "#/definitions/EnumDisplayStyleLine"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "stacked",
        "stacked": {}
      }
    },
    "EnumDisplayStyleBar": {
      "type": "object",
      "properties": {}
    },
    "EnumDisplayStyleInline": {
      "type": "object",
      "properties": {}
    },
    "EnumDisplayStyleLine": {
      "type": "object",
      "properties": {}
    },
    "EnumDisplayStyleStacked": {
      "type": "object",
      "properties": {}
    },
    "EnumGroupBySort": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "custom",
            "alphabetical"
          ]
        },
        "custom": {
          "$ref": "#/definitions/EnumGroupBySortCustom"
        },
        "alphabetical": {
          "$ref": "#/definitions/ValueSort"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "custom",
        "custom": {
          "order": [
            "string"
          ]
        }
      }
    },
    "EnumGroupBySortCustom": {
      "type": "object",
      "properties": {
        "order": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Specify the values in the order they should appear. Unspecified values will be sorted to the bottom."
        }
      }
    },
    "EnumRawVisualisation": {
      "description": "The settings for a raw enum visualisation.",
      "type": "object",
      "properties": {
        "colorMap": {
          "type": "object",
          "additionalProperties": {
            "type": "string",
            "x-alias": "HexColor"
          }
        }
      }
    },
    "EnumValueChannel": {
      "type": "object",
      "properties": {
        "variableName": {
          "type": "string",
          "x-alias": "ChannelVariableName"
        },
        "visualisation": {
          "$ref": "#/definitions/EnumValueVisualisation"
        }
      },
      "required": [
        "variableName",
        "visualisation"
      ]
    },
    "EnumValueVisualisation": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "raw"
          ]
        },
        "raw": {
          "$ref": "#/definitions/EnumRawVisualisation"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "raw",
        "raw": {
          "colorMap": {
            "key": "string"
          }
        }
      }
    },
    "Event": {
      "type": "object",
      "properties": {
        "displayName": {
          "type": "string"
        },
        "eventUuid": {
          "type": "string",
          "format": "uuid"
        },
        "isPinned": {
          "type": "boolean"
        }
      },
      "required": [
        "eventUuid",
        "isPinned"
      ]
    },
    "Figure": {
      "description": "The root figure definition for a plotly instance",
      "type": "object",
      "properties": {
        "data": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Trace"
          }
        },
        "layout": {
          "$ref": "#/definitions/Layout"
        },
        "plotlyConfig": {
          "type": "string",
          "description": "The json config definition according to plotly's schema https://plotly.com/python/figure-structure/#the-toplevel-config-attribute"
        }
      },
      "required": [
        "layout",
        "plotlyConfig"
      ]
    },
    "FixedDecimalPlaces": {
      "description": "Format the number to a fixed number of decimal places, padding with zeroes or rounding as needed.",
      "type": "object",
      "properties": {
        "places": {
          "type": "integer",
          "format": "int32"
        }
      },
      "required": [
        "places"
      ]
    },
    "FloatNumberInput": {
      "description": "Accepts finite floating-point values. All present constraints must be finite, and min must be less than or equal to max.",
      "type": "object",
      "properties": {
        "min": {
          "type": "number",
          "format": "double",
          "description": "Inclusive lower bound. Absent means unbounded below."
        },
        "max": {
          "type": "number",
          "format": "double",
          "description": "Inclusive upper bound. Absent means unbounded above."
        },
        "step": {
          "type": "number",
          "format": "double",
          "description": "Must be greater than zero. Valid values are min + k * step for an integer k, or k * step when min is absent. Also the increment for stepper controls. Absent means any value is accepted."
        }
      }
    },
    "FloatingLegend": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "perRow"
          ]
        },
        "perRow": {
          "$ref": "#/definitions/PerRowFloatingLegends"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "perRow",
        "perRow": {
          "position": {
            "type": "preset",
            "preset": "TOP_LEFT"
          }
        }
      }
    },
    "FloatingLegendConfig": {
      "type": "object",
      "properties": {
        "hidden": {
          "type": "boolean",
          "description": "Whether to hide the floating legend. Defaults to false."
        },
        "legend": {
          "$ref": "#/definitions/FloatingLegend"
        },
        "hideEmptySeries": {
          "allOf": [
            {
              "$ref": "#/definitions/HideEmptySeries"
            }
          ],
          "description": "When to omit series that have no points in the visible time range from the legend. If undefined, defaults to never."
        }
      },
      "required": [
        "legend"
      ]
    },
    "FloatingLegendPosition": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "preset"
          ]
        },
        "preset": {
          "$ref": "#/definitions/FloatingLegendPresetPosition"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "preset",
        "preset": "TOP_LEFT"
      }
    },
    "FloatingLegendPresetPosition": {
      "type": "string",
      "enum": [
        "TOP_LEFT",
        "TOP_RIGHT",
        "BOTTOM_LEFT",
        "BOTTOM_RIGHT"
      ]
    },
    "ForwardFillConnectingLine": {
      "type": "object",
      "properties": {}
    },
    "FrequencyChartDefinition": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "v1",
            "v2"
          ]
        },
        "v1": {
          "$ref": "#/definitions/FrequencyChartDefinitionV1"
        },
        "v2": {
          "$ref": "#/definitions/FrequencyChartDefinitionV2"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "v1",
        "v1": {
          "plots": [
            {
              "variableName": "string",
              "enabled": true,
              "yAxisId": "string",
              "color": "string",
              "lineStyle": {
                "type": "v1",
                "v1": "SOLID"
              }
            }
          ],
          "events": [
            {
              "displayName": "string",
              "eventUuid": "string",
              "isPinned": true
            }
          ],
          "comparisonRunGroups": [
            {
              "uuid": "string",
              "name": "string",
              "offset": {
                "value": 1,
                "unit": "DAYS"
              },
              "offsetAnchor": {
                "type": "run",
                "run": {}
              },
              "runs": [
                {
                  "runRid": "string",
                  "enabled": true,
                  "offsetOverride": {
                    "value": 1,
                    "unit": "DAYS"
                  }
                }
              ],
              "color": "string"
            }
          ],
          "title": "string",
          "valueAxes": [
            {
              "id": "string",
              "title": "string",
              "displayOptions": {
                "showTitle": true,
                "axisWidth": 1,
                "scaleType": "LINEAR"
              },
              "range": {
                "start": 1,
                "end": 1
              },
              "limit": {
                "start": 1,
                "end": 1
              },
              "position": "LEFT",
              "domainType": "NUMERIC",
              "tickNumberFormat": {
                "sigFigs": 1,
                "displayOption": "SCIENTIFIC",
                "fixedDecimalPlaces": 1,
                "decimalPlaces": {
                  "type": "fixed",
                  "fixed": {
                    "places": 1
                  }
                }
              },
              "tooltipNumberFormat": {
                "sigFigs": 1,
                "displayOption": "SCIENTIFIC",
                "fixedDecimalPlaces": 1,
                "decimalPlaces": {
                  "type": "fixed",
                  "fixed": {
                    "places": 1
                  }
                }
              },
              "reversed": true,
              "tickInterval": 1
            }
          ],
          "plotType": {
            "type": "fft",
            "fft": {
              "window": "BLACKMAN",
              "peakDetectionMode": "POSITIVE",
              "nfft": 1
            }
          }
        }
      }
    },
    "FrequencyChartDefinitionV1": {
      "type": "object",
      "properties": {
        "plots": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FrequencyPlot"
          }
        },
        "events": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Event"
          },
          "x-deprecated": "Please use the workbook's eventRefs field instead."
        },
        "comparisonRunGroups": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/ComparisonRunGroup"
          }
        },
        "title": {
          "type": "string"
        },
        "valueAxes": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/ValueAxis"
          }
        },
        "plotType": {
          "allOf": [
            {
              "$ref": "#/definitions/FrequencyPlotType"
            }
          ],
          "description": "The type of plot to display. If not specified, the default is FFT."
        }
      }
    },
    "FrequencyChartDefinitionV2": {
      "type": "object",
      "properties": {
        "plots": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FrequencyPlotV2"
          }
        },
        "events": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Event"
          },
          "x-deprecated": "Please use the workbook's eventRefs field instead."
        },
        "comparisonRunGroups": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/ComparisonRunGroup"
          }
        },
        "title": {
          "type": "string"
        },
        "valueAxes": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/ValueAxis"
          }
        },
        "plotType": {
          "allOf": [
            {
              "$ref": "#/definitions/FrequencyPlotType"
            }
          ],
          "description": "The type of plot to display. If not specified, the default is FFT."
        }
      }
    },
    "FrequencyPlot": {
      "description": "A frequency plot that displays a real value against the frequency domain.",
      "type": "object",
      "properties": {
        "variableName": {
          "type": "string",
          "x-alias": "ChannelVariableName"
        },
        "enabled": {
          "type": "boolean"
        },
        "yAxisId": {
          "type": "string",
          "x-alias": "AxisId"
        },
        "color": {
          "type": "string",
          "x-alias": "HexColor"
        },
        "lineStyle": {
          "$ref": "#/definitions/LineStyle"
        }
      },
      "required": [
        "variableName",
        "yAxisId",
        "color",
        "lineStyle"
      ]
    },
    "FrequencyPlotMultivariate": {
      "description": "A plot that performs an analysis on an multiple signals and returns data mapped to the frequency domain.",
      "type": "object",
      "properties": {
        "title": {
          "type": "string"
        },
        "variableNames": {
          "type": "array",
          "items": {
            "type": "string",
            "x-alias": "ChannelVariableName"
          }
        },
        "axesIds": {
          "type": "array",
          "items": {
            "type": "string",
            "x-alias": "AxisId"
          }
        },
        "enabled": {
          "type": "boolean"
        },
        "color": {
          "type": "string",
          "x-alias": "HexColor"
        },
        "lineStyle": {
          "$ref": "#/definitions/LineStyle"
        }
      },
      "required": [
        "color",
        "lineStyle"
      ]
    },
    "FrequencyPlotType": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "fft",
            "periodogram",
            "psd",
            "cpsd",
            "nyquist",
            "bode"
          ]
        },
        "fft": {
          "$ref": "#/definitions/FrequencyPlotTypeFft"
        },
        "periodogram": {
          "$ref": "#/definitions/FrequencyPlotTypePeriodogram"
        },
        "psd": {
          "$ref": "#/definitions/FrequencyPlotTypePsd"
        },
        "cpsd": {
          "$ref": "#/definitions/FrequencyPlotTypeCpsd"
        },
        "nyquist": {
          "$ref": "#/definitions/FrequencyPlotTypeNyquist"
        },
        "bode": {
          "$ref": "#/definitions/FrequencyPlotTypeBode"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "fft",
        "fft": {
          "window": "BLACKMAN",
          "peakDetectionMode": "POSITIVE",
          "nfft": 1
        }
      }
    },
    "FrequencyPlotTypeBode": {
      "type": "object",
      "properties": {
        "alignmentConfiguration": {
          "allOf": [
            {
              "$ref": "#/definitions/AlignmentConfiguration"
            }
          ],
          "description": "When present, aligns one Bode input to the other using the configured interpolation and driver series before estimating the frequency response. For Bode, FIRST uses the input timestamps and SECOND uses the output timestamps."
        },
        "stftOptions": {
          "$ref": "#/definitions/StftOptions"
        },
        "magnitudeScaling": {
          "$ref": "#/definitions/MagnitudeScaling"
        },
        "outputFrequencyType": {
          "$ref": "#/definitions/OutputFrequencyType"
        },
        "unwrapPhase": {
          "type": "boolean"
        },
        "displayMode": {
          "allOf": [
            {
              "$ref": "#/definitions/MagnitudeAndPhaseDisplayMode"
            }
          ],
          "description": "Whether to the magnitude or phase of the output. Defaults to MAGNITUDE if not specified."
        }
      }
    },
    "FrequencyPlotTypeCpsd": {
      "type": "object",
      "properties": {
        "stftOptions": {
          "$ref": "#/definitions/StftOptions"
        },
        "magnitudeScaling": {
          "$ref": "#/definitions/MagnitudeScaling"
        },
        "outputFrequencyType": {
          "$ref": "#/definitions/OutputFrequencyType"
        },
        "unwrapPhase": {
          "type": "boolean"
        },
        "outputPhaseUnit": {
          "$ref": "#/definitions/OutputPhaseUnit"
        },
        "displayMode": {
          "allOf": [
            {
              "$ref": "#/definitions/MagnitudeAndPhaseDisplayMode"
            }
          ],
          "description": "Whether to the magnitude or phase of the output. Defaults to MAGNITUDE if not specified."
        }
      }
    },
    "FrequencyPlotTypeFft": {
      "type": "object",
      "properties": {
        "window": {
          "$ref": "#/definitions/FftWindow"
        },
        "peakDetectionMode": {
          "allOf": [
            {
              "$ref": "#/definitions/PeakDetectionMode"
            }
          ],
          "description": "The aggregate amplitude to render for bucketed FFT data. If not specified, clients should treat this as the legacy mean behavior."
        },
        "nfft": {
          "type": "integer",
          "format": "int32",
          "description": "Length of the FFT. When nfft < input length, the input is truncated to the first nfft samples before windowing and transforming. When nfft > input length, the windowed input is zero-padded up to nfft before transforming. When nfft is unset, defaults to the input length, producing the same result as setting nfft to the input length. The output contains nfft/2 + 1 single-sided frequency bins with spacing fs/nfft. For best performance, prefer a power of 2 (e.g. 512, 1024, 2048)."
        }
      }
    },
    "FrequencyPlotTypeNyquist": {
      "type": "object",
      "properties": {
        "stftOptions": {
          "$ref": "#/definitions/StftOptions"
        }
      }
    },
    "FrequencyPlotTypePeriodogram": {
      "type": "object",
      "properties": {
        "method": {
          "$ref": "#/definitions/PeriodogramMethod"
        }
      },
      "required": [
        "method"
      ]
    },
    "FrequencyPlotTypePsd": {
      "type": "object",
      "properties": {
        "stftOptions": {
          "$ref": "#/definitions/StftOptions"
        },
        "magnitudeScaling": {
          "$ref": "#/definitions/MagnitudeScaling"
        },
        "outputFrequencyType": {
          "$ref": "#/definitions/OutputFrequencyType"
        },
        "displayMode": {
          "allOf": [
            {
              "$ref": "#/definitions/PsdDisplayMode"
            }
          ],
          "description": "How to render bucketed PSD data, or NONE to disable bucketing. If not specified, clients should default to AVERAGE."
        }
      }
    },
    "FrequencyPlotV2": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "single",
            "multivariate"
          ]
        },
        "single": {
          "$ref": "#/definitions/FrequencyPlot"
        },
        "multivariate": {
          "$ref": "#/definitions/FrequencyPlotMultivariate"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "single",
        "single": {
          "variableName": "string",
          "enabled": true,
          "yAxisId": "string",
          "color": "string",
          "lineStyle": {
            "type": "v1",
            "v1": "SOLID"
          }
        }
      }
    },
    "FullSizeMarkerAppearance": {
      "description": "Full-size, opaque point markers.",
      "type": "object",
      "properties": {}
    },
    "Geo3dCrs": {
      "description": "Coordinate reference system for spatial assets (point clouds, meshes) in a Geo3d panel. Expressed as a union so future variants (e.g. UTM, local ENU with a known origin) can carry their own parameters without a breaking change.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "ecef",
            "local"
          ]
        },
        "ecef": {
          "$ref": "#/definitions/Geo3dCrsEcef"
        },
        "local": {
          "$ref": "#/definitions/Geo3dCrsCartesian"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "ecef",
        "ecef": {}
      }
    },
    "Geo3dCrsCartesian": {
      "description": "Local Cartesian coordinate frame with no geographic reference. Coordinates are treated as scene-relative (metres).",
      "type": "object",
      "properties": {}
    },
    "Geo3dCrsEcef": {
      "description": "Earth-Centered Earth-Fixed Cartesian coordinates (X/Y/Z in metres from Earth's centre).",
      "type": "object",
      "properties": {}
    },
    "Geo3dCustomModel": {
      "type": "object",
      "properties": {
        "attachmentRid": {
          "type": "string",
          "format": "rid",
          "x-alias": "AttachmentRid"
        },
        "fileExtension": {
          "type": "string"
        }
      },
      "required": [
        "attachmentRid",
        "fileExtension"
      ]
    },
    "Geo3dDefaultModel": {
      "type": "string",
      "enum": [
        "FICTIONAL_FIGHTER",
        "SATELLITE",
        "QUADCOPTER",
        "FIXEDWING"
      ]
    },
    "Geo3dDefinition": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "v1"
          ]
        },
        "v1": {
          "$ref": "#/definitions/Geo3dDefinitionV1"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "v1",
        "v1": {
          "plots": [
            {
              "plotId": "string",
              "enabled": true,
              "label": "string",
              "visualizationOptions": {
                "color": "string",
                "lineStyle": "SOLID",
                "model": {
                  "type": "default",
                  "default": "FICTIONAL_FIGHTER"
                }
              },
              "position": {
                "type": "wgs84",
                "wgs84": {
                  "latitudeVariableName": "string",
                  "longitudeVariableName": "string",
                  "heightVariableName": "string"
                }
              },
              "orientation": {
                "type": "principalAxes",
                "principalAxes": {
                  "headingVariableName": "string",
                  "pitchVariableName": "string",
                  "rollVariableName": "string"
                }
              },
              "modelLocalOrientation": {
                "forward": "X",
                "up": "X"
              },
              "plotSensors": [
                {
                  "sensorId": "string",
                  "enabled": true,
                  "name": "string",
                  "positionOffset": {
                    "modelOffsetX": 1,
                    "modelOffsetY": 1,
                    "modelOffsetZ": 1
                  },
                  "orientation": {
                    "type": "eulerAngles",
                    "eulerAngles": {
                      "yaw": {
                        "type": "staticNumeric",
                        "staticNumeric": 1
                      },
                      "pitch": {
                        "type": "staticNumeric",
                        "staticNumeric": 1
                      },
                      "roll": {
                        "type": "staticNumeric",
                        "staticNumeric": 1
                      }
                    }
                  },
                  "color": "string",
                  "viewShape": {
                    "type": "conic",
                    "conic": {
                      "fov": {
                        "type": "staticNumeric",
                        "staticNumeric": 1
                      },
                      "length": {
                        "type": "staticNumeric",
                        "staticNumeric": 1
                      }
                    }
                  },
                  "upMarker": true
                }
              ],
              "displayVectors": [
                {
                  "vectorId": "string",
                  "kind": {
                    "type": "sun",
                    "sun": {}
                  },
                  "enabled": true
                }
              ]
            }
          ],
          "title": "string",
          "spatialPlots": [
            {
              "plotId": "string",
              "enabled": true,
              "label": "string",
              "spatialRid": "string",
              "coloring": {
                "type": "geometryAxis",
                "geometryAxis": {
                  "axis": {
                    "x": 1,
                    "y": 1,
                    "z": 1
                  },
                  "colormap": "MAGMA",
                  "dataMin": 1,
                  "dataMax": 1
                }
              },
              "properties": {
                "type": "v1",
                "v1": {
                  "pointSize": 1,
                  "splatMode": "BALL",
                  "coloring": {
                    "type": "matCap",
                    "matCap": {
                      "name": "SOAP"
                    }
                  },
                  "filter": {
                    "type": "none",
                    "none": {}
                  },
                  "timeBinding": {
                    "enabled": true,
                    "attribute": "string",
                    "unit": "NS",
                    "relativeStartUs": 1,
                    "relativeEndUs": 1,
                    "timeWindow": {
                      "type": "accumulated",
                      "accumulated": {}
                    }
                  }
                }
              }
            }
          ],
          "crs": {
            "type": "ecef",
            "ecef": {}
          },
          "tileSource": {
            "type": "preset",
            "preset": {
              "presetId": "string",
              "token": "string"
            }
          }
        }
      }
    },
    "Geo3dDefinitionV1": {
      "type": "object",
      "properties": {
        "plots": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/GeoPlot3d"
          }
        },
        "title": {
          "type": "string"
        },
        "spatialPlots": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/GeoPlot3dSpatial"
          },
          "description": "Spatial dataset or channel plots in the 3D viewport."
        },
        "crs": {
          "allOf": [
            {
              "$ref": "#/definitions/Geo3dCrs"
            }
          ],
          "description": "Coordinate reference system for spatial assets in this panel. Absent means ECEF (the original default)."
        },
        "tileSource": {
          "allOf": [
            {
              "$ref": "#/definitions/Geo3dTileSource"
            }
          ],
          "description": "Tile provider for the terrain basemap and height."
        }
      }
    },
    "Geo3dDisplayVector": {
      "description": "A display for a vector direction",
      "type": "object",
      "properties": {
        "vectorId": {
          "type": "string"
        },
        "kind": {
          "$ref": "#/definitions/Geo3dDisplayVectorKind"
        },
        "enabled": {
          "type": "boolean"
        }
      },
      "required": [
        "vectorId",
        "kind",
        "enabled"
      ]
    },
    "Geo3dDisplayVectorKind": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "sun"
          ]
        },
        "sun": {
          "$ref": "#/definitions/Geo3dDisplayVectorSun"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "sun",
        "sun": {}
      }
    },
    "Geo3dDisplayVectorSun": {
      "type": "object",
      "properties": {}
    },
    "Geo3dModel": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "default",
            "custom"
          ]
        },
        "default": {
          "$ref": "#/definitions/Geo3dDefaultModel"
        },
        "custom": {
          "$ref": "#/definitions/Geo3dCustomModel"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "default",
        "default": "FICTIONAL_FIGHTER"
      }
    },
    "Geo3dModelAxis": {
      "type": "string",
      "enum": [
        "X",
        "Y",
        "Z",
        "NEG_X",
        "NEG_Y",
        "NEG_Z"
      ]
    },
    "Geo3dModelLocalOrientation": {
      "description": "Static orientation correction for the 3D model's native coordinate system. Defines which model axis points forward and which points up.",
      "type": "object",
      "properties": {
        "forward": {
          "$ref": "#/definitions/Geo3dModelAxis"
        },
        "up": {
          "$ref": "#/definitions/Geo3dModelAxis"
        }
      },
      "required": [
        "forward",
        "up"
      ]
    },
    "Geo3dOrientation": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "principalAxes"
          ]
        },
        "principalAxes": {
          "$ref": "#/definitions/Geo3dOrientationPrincipalAxes"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "principalAxes",
        "principalAxes": {
          "headingVariableName": "string",
          "pitchVariableName": "string",
          "rollVariableName": "string"
        }
      }
    },
    "Geo3dOrientationEulerAngles": {
      "description": "Orientation specified as Euler angles yaw/pitch/roll in degrees.",
      "type": "object",
      "properties": {
        "yaw": {
          "$ref": "#/definitions/VariableStaticOrChannel"
        },
        "pitch": {
          "$ref": "#/definitions/VariableStaticOrChannel"
        },
        "roll": {
          "$ref": "#/definitions/VariableStaticOrChannel"
        }
      },
      "required": [
        "yaw",
        "pitch",
        "roll"
      ]
    },
    "Geo3dOrientationPrincipalAxes": {
      "type": "object",
      "properties": {
        "headingVariableName": {
          "type": "string",
          "x-alias": "ChannelVariableName"
        },
        "pitchVariableName": {
          "type": "string",
          "x-alias": "ChannelVariableName"
        },
        "rollVariableName": {
          "type": "string",
          "x-alias": "ChannelVariableName"
        }
      }
    },
    "Geo3dPosition": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "wgs84",
            "ecef",
            "local"
          ]
        },
        "wgs84": {
          "$ref": "#/definitions/Geo3dPositionWgs84"
        },
        "ecef": {
          "$ref": "#/definitions/Geo3dPositionEcef"
        },
        "local": {
          "$ref": "#/definitions/Geo3dPositionLocal"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "wgs84",
        "wgs84": {
          "latitudeVariableName": "string",
          "longitudeVariableName": "string",
          "heightVariableName": "string"
        }
      }
    },
    "Geo3dPositionEcef": {
      "type": "object",
      "properties": {
        "ecefXVariableName": {
          "type": "string",
          "x-alias": "ChannelVariableName"
        },
        "ecefYVariableName": {
          "type": "string",
          "x-alias": "ChannelVariableName"
        },
        "ecefZVariableName": {
          "type": "string",
          "x-alias": "ChannelVariableName"
        }
      },
      "required": [
        "ecefXVariableName",
        "ecefYVariableName",
        "ecefZVariableName"
      ]
    },
    "Geo3dPositionLocal": {
      "description": "Position in a local Cartesian coordinate frame. Useful when data is expressed in a scene-relative reference frame rather than a global geographic one (WGS84 / ECEF).",
      "type": "object",
      "properties": {
        "xVariableName": {
          "type": "string",
          "x-alias": "ChannelVariableName"
        },
        "yVariableName": {
          "type": "string",
          "x-alias": "ChannelVariableName"
        },
        "zVariableName": {
          "type": "string",
          "x-alias": "ChannelVariableName"
        }
      }
    },
    "Geo3dPositionWgs84": {
      "type": "object",
      "properties": {
        "latitudeVariableName": {
          "type": "string",
          "x-alias": "ChannelVariableName"
        },
        "longitudeVariableName": {
          "type": "string",
          "x-alias": "ChannelVariableName"
        },
        "heightVariableName": {
          "type": "string",
          "x-alias": "ChannelVariableName"
        }
      },
      "required": [
        "latitudeVariableName",
        "longitudeVariableName"
      ]
    },
    "Geo3dSensor": {
      "description": "Sensor configuration for 3D scene.",
      "type": "object",
      "properties": {
        "sensorId": {
          "type": "string"
        },
        "enabled": {
          "type": "boolean"
        },
        "name": {
          "type": "string",
          "description": "The name of the sensor."
        },
        "positionOffset": {
          "allOf": [
            {
              "$ref": "#/definitions/Geo3dSensorPositionOffset"
            }
          ],
          "description": "Position offset from the parent model origin, in the model's local frame after orientation."
        },
        "orientation": {
          "allOf": [
            {
              "$ref": "#/definitions/Geo3dSensorOrientationConfig"
            }
          ],
          "description": "The orientation of the sensor."
        },
        "color": {
          "type": "string",
          "x-alias": "HexColor",
          "description": "The color of the sensor."
        },
        "viewShape": {
          "allOf": [
            {
              "$ref": "#/definitions/Geo3dSensorShape"
            }
          ],
          "description": "The shape of the sensor's view volume."
        },
        "upMarker": {
          "type": "boolean",
          "description": "When set, the sensor renders with a small triangular up marker on top of its shape."
        }
      },
      "required": [
        "sensorId"
      ]
    },
    "Geo3dSensorOrientationConfig": {
      "description": "Sensor orientation configuration.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "eulerAngles",
            "nadir",
            "zenith"
          ]
        },
        "eulerAngles": {
          "$ref": "#/definitions/Geo3dOrientationEulerAngles"
        },
        "nadir": {
          "$ref": "#/definitions/Geo3dSensorOrientationNadir"
        },
        "zenith": {
          "$ref": "#/definitions/Geo3dSensorOrientationZenith"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "eulerAngles",
        "eulerAngles": {
          "yaw": {
            "type": "staticNumeric",
            "staticNumeric": 1
          },
          "pitch": {
            "type": "staticNumeric",
            "staticNumeric": 1
          },
          "roll": {
            "type": "staticNumeric",
            "staticNumeric": 1
          }
        }
      }
    },
    "Geo3dSensorOrientationNadir": {
      "type": "object",
      "properties": {}
    },
    "Geo3dSensorOrientationZenith": {
      "type": "object",
      "properties": {}
    },
    "Geo3dSensorPositionOffset": {
      "description": "Position offset in a parent model's local frame.",
      "type": "object",
      "properties": {
        "modelOffsetX": {
          "type": "number",
          "format": "double"
        },
        "modelOffsetY": {
          "type": "number",
          "format": "double"
        },
        "modelOffsetZ": {
          "type": "number",
          "format": "double"
        }
      },
      "required": [
        "modelOffsetX",
        "modelOffsetY",
        "modelOffsetZ"
      ]
    },
    "Geo3dSensorShape": {
      "description": "Sensor shape configuration.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "conic",
            "rectangular",
            "spherical"
          ]
        },
        "conic": {
          "$ref": "#/definitions/Geo3dSensorShapeConic"
        },
        "rectangular": {
          "$ref": "#/definitions/Geo3dSensorShapeRectangular"
        },
        "spherical": {
          "$ref": "#/definitions/Geo3dSensorShapeSpherical"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "conic",
        "conic": {
          "fov": {
            "type": "staticNumeric",
            "staticNumeric": 1
          },
          "length": {
            "type": "staticNumeric",
            "staticNumeric": 1
          }
        }
      }
    },
    "Geo3dSensorShapeConic": {
      "description": "A conic frustum shaped sensor volume.",
      "type": "object",
      "properties": {
        "fov": {
          "allOf": [
            {
              "$ref": "#/definitions/VariableStaticOrChannel"
            }
          ],
          "description": "Full field-of-view (FOV) angle, in degrees."
        },
        "length": {
          "allOf": [
            {
              "$ref": "#/definitions/VariableStaticOrChannel"
            }
          ],
          "description": "Length for the projection, in meters."
        }
      },
      "required": [
        "fov",
        "length"
      ]
    },
    "Geo3dSensorShapeRectangular": {
      "description": "A rectangular frustum shaped sensor volume.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "includedFov"
          ]
        },
        "includedFov": {
          "$ref": "#/definitions/Geo3dSensorShapeRectangularIncludedFov"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "includedFov",
        "includedFov": {
          "xFov": {
            "type": "staticNumeric",
            "staticNumeric": 1
          },
          "yFov": {
            "type": "staticNumeric",
            "staticNumeric": 1
          },
          "length": {
            "type": "staticNumeric",
            "staticNumeric": 1
          },
          "videoVariable": "string"
        }
      }
    },
    "Geo3dSensorShapeRectangularIncludedFov": {
      "description": "A rectangular frustum shaped sensor volume, defined by included angles.",
      "type": "object",
      "properties": {
        "xFov": {
          "allOf": [
            {
              "$ref": "#/definitions/VariableStaticOrChannel"
            }
          ],
          "description": "Full field-of-view (FOV) angle in the sensor's horizontal direction, in degrees."
        },
        "yFov": {
          "allOf": [
            {
              "$ref": "#/definitions/VariableStaticOrChannel"
            }
          ],
          "description": "Full field-of-view (FOV) angle in the sensor's vertical direction, in degrees."
        },
        "length": {
          "allOf": [
            {
              "$ref": "#/definitions/VariableStaticOrChannel"
            }
          ],
          "description": "Length for the projection, in meters."
        },
        "videoVariable": {
          "type": "string",
          "x-alias": "ChannelVariableName",
          "description": "Workbook variable naming a video channel painted on the sensor's image plane."
        }
      },
      "required": [
        "xFov",
        "yFov",
        "length"
      ]
    },
    "Geo3dSensorShapeSpherical": {
      "description": "A spherical sensor volume.",
      "type": "object",
      "properties": {
        "radius": {
          "allOf": [
            {
              "$ref": "#/definitions/VariableStaticOrChannel"
            }
          ],
          "description": "Radius of the sphere, in meters."
        }
      },
      "required": [
        "radius"
      ]
    },
    "Geo3dTileSource": {
      "description": "Tile provider for the terrain basemap and height.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "preset",
            "custom"
          ]
        },
        "preset": {
          "$ref": "#/definitions/Geo3dTileSourcePreset"
        },
        "custom": {
          "$ref": "#/definitions/Geo3dTileSourceCustom"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "preset",
        "preset": {
          "presetId": "string",
          "token": "string"
        }
      }
    },
    "Geo3dTileSourceCustom": {
      "description": "A user-supplied XYZ tile provider.",
      "type": "object",
      "properties": {
        "colorTemplate": {
          "type": "string",
          "description": "Imagery tiles. Must be a valid URL containing {z}, {x}, and {y} exactly once each."
        },
        "heightTemplate": {
          "type": "string",
          "description": "Elevation tiles for terrain. Must be a valid URL containing {z}, {x}, and {y} exactly once each."
        },
        "token": {
          "type": "string",
          "description": "Replaces the {token} placeholder in the tile URLs. Visible to anyone with access to the field."
        }
      },
      "required": [
        "colorTemplate"
      ]
    },
    "Geo3dTileSourcePreset": {
      "description": "A built-in tile provider.",
      "type": "object",
      "properties": {
        "presetId": {
          "type": "string",
          "description": "Preset identifier."
        },
        "token": {
          "type": "string",
          "description": "Replaces the {token} placeholder in the tile URLs. Visible to anyone with access to the field."
        }
      },
      "required": [
        "presetId"
      ]
    },
    "GeoAdditionalTileset": {
      "description": "A standard tileset to overlay on the base map.",
      "type": "string",
      "enum": [
        "VFR",
        "BATHYMETRY"
      ]
    },
    "GeoArrowStyle": {
      "type": "string",
      "enum": [
        "SOLID",
        "HOLLOW",
        "NONE"
      ]
    },
    "GeoBaseTileset": {
      "description": "The base map style. Default STREET if unspecified.",
      "type": "string",
      "enum": [
        "STREET",
        "SATELLITE"
      ]
    },
    "GeoCoordinate": {
      "type": "object",
      "properties": {
        "latitude": {
          "type": "number",
          "format": "double"
        },
        "longitude": {
          "type": "number",
          "format": "double"
        }
      },
      "required": [
        "latitude",
        "longitude"
      ]
    },
    "GeoCustomFeature": {
      "description": "Additional static objects on the map, such as a point representing a tower\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "point"
          ]
        },
        "point": {
          "$ref": "#/definitions/GeoPoint"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "point",
        "point": {
          "label": "string",
          "icon": "string",
          "latitude": 1,
          "longitude": 1,
          "variables": [
            {
              "variableName": "string",
              "label": "string",
              "enabled": true,
              "visualizationOption": {
                "type": "asColors",
                "asColors": {
                  "type": "numeric",
                  "numeric": {
                    "key": 1
                  }
                }
              }
            }
          ]
        }
      }
    },
    "GeoCustomMeasurement": {
      "description": "A custom distance annotation on the map. Units for distance are inherited from GeoVizDefinitionV1",
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "format": "uuid"
        },
        "label": {
          "type": "string"
        },
        "enabled": {
          "type": "boolean"
        },
        "startCoordinate": {
          "$ref": "#/definitions/GeoCoordinate"
        },
        "endCoordinate": {
          "$ref": "#/definitions/GeoCoordinate"
        },
        "visualizationOptions": {
          "$ref": "#/definitions/GeoPlotVisualizationOptions"
        }
      },
      "required": [
        "startCoordinate",
        "endCoordinate",
        "visualizationOptions"
      ]
    },
    "GeoLine3dStyle": {
      "type": "string",
      "enum": [
        "SOLID",
        "DASH",
        "NONE"
      ]
    },
    "GeoLineStyle": {
      "type": "string",
      "enum": [
        "POINTS",
        "SOLID",
        "DASH",
        "NONE"
      ],
      "x-enum-deprecated": {
        "POINTS": "Use SOLID instead."
      }
    },
    "GeoOverlaySourceFormat": {
      "type": "string",
      "enum": [
        "KML"
      ]
    },
    "GeoPlot3d": {
      "type": "object",
      "properties": {
        "plotId": {
          "type": "string"
        },
        "enabled": {
          "type": "boolean"
        },
        "label": {
          "type": "string"
        },
        "visualizationOptions": {
          "$ref": "#/definitions/GeoPlot3dVisualizationOptions"
        },
        "position": {
          "$ref": "#/definitions/Geo3dPosition"
        },
        "orientation": {
          "$ref": "#/definitions/Geo3dOrientation"
        },
        "modelLocalOrientation": {
          "$ref": "#/definitions/Geo3dModelLocalOrientation"
        },
        "plotSensors": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Geo3dSensor"
          }
        },
        "displayVectors": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Geo3dDisplayVector"
          }
        }
      },
      "required": [
        "plotId",
        "visualizationOptions",
        "position",
        "orientation"
      ]
    },
    "GeoPlot3dSpatial": {
      "description": "3D plot for a spatial dataset or channel (point cloud, BVH mesh, etc.) loaded by RID.",
      "type": "object",
      "properties": {
        "plotId": {
          "type": "string"
        },
        "enabled": {
          "type": "boolean"
        },
        "label": {
          "type": "string"
        },
        "spatialRid": {
          "type": "string",
          "format": "rid",
          "x-alias": "SpatialRid"
        },
        "coloring": {
          "allOf": [
            {
              "$ref": "#/definitions/SpatialColoring"
            }
          ],
          "description": "How to color the asset. If omitted, renderers use a +Z direction ramp with colormap VIRIDIS and default bounds (`SpatialColoringGeometryAxis` with axis { x: 0, y: 0, z: 1 }).",
          "x-deprecated": "Use properties instead."
        },
        "properties": {
          "allOf": [
            {
              "$ref": "#/definitions/GeoPlot3dSpatialProperties"
            }
          ],
          "description": "Full versioned appearance and time-binding properties. Takes precedence over the deprecated coloring field when present. Absent on plots created before this field was added; clients should migrate via resolveGeo3dSpatialAppearance."
        }
      },
      "required": [
        "plotId",
        "spatialRid"
      ]
    },
    "GeoPlot3dSpatialProperties": {
      "description": "Versioned container for all persisted spatial plot properties.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "v1"
          ]
        },
        "v1": {
          "$ref": "#/definitions/GeoPlot3dSpatialPropertiesV1"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "v1",
        "v1": {
          "pointSize": 1,
          "splatMode": "BALL",
          "coloring": {
            "type": "matCap",
            "matCap": {
              "name": "SOAP"
            }
          },
          "filter": {
            "type": "none",
            "none": {}
          },
          "timeBinding": {
            "enabled": true,
            "attribute": "string",
            "unit": "NS",
            "relativeStartUs": 1,
            "relativeEndUs": 1,
            "timeWindow": {
              "type": "accumulated",
              "accumulated": {}
            }
          }
        }
      }
    },
    "GeoPlot3dSpatialPropertiesV1": {
      "description": "All user-configurable properties for a spatial plot. Mirrors the frontend SpatialPropertiesV1 type — any new field added to one must be added to both.",
      "type": "object",
      "properties": {
        "pointSize": {
          "type": "number",
          "format": "double",
          "description": "Splat diameter in scene units. Defaults to 0.05."
        },
        "splatMode": {
          "allOf": [
            {
              "$ref": "#/definitions/SpatialSplatMode"
            }
          ],
          "description": "Shape rendered for each point. Defaults to PARABOLIC."
        },
        "coloring": {
          "allOf": [
            {
              "$ref": "#/definitions/SpatialAppearanceColoring"
            }
          ],
          "description": "How to color the point cloud. Defaults to Z-axis gradient with VIRIDIS."
        },
        "filter": {
          "allOf": [
            {
              "$ref": "#/definitions/SpatialVolumetricFilter"
            }
          ],
          "description": "Volumetric visibility filter applied before rendering. Defaults to none."
        },
        "timeBinding": {
          "allOf": [
            {
              "$ref": "#/definitions/SpatialTimeBinding"
            }
          ],
          "description": "Playhead-driven time-visibility binding. Absent means no time filtering."
        }
      }
    },
    "GeoPlot3dVisualizationOptions": {
      "type": "object",
      "properties": {
        "color": {
          "type": "string",
          "x-alias": "HexColor"
        },
        "lineStyle": {
          "$ref": "#/definitions/GeoLine3dStyle"
        },
        "model": {
          "$ref": "#/definitions/Geo3dModel"
        }
      },
      "required": [
        "color",
        "lineStyle"
      ]
    },
    "GeoPlotFromLatLong": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "format": "uuid"
        },
        "latitudeVariableName": {
          "type": "string",
          "x-alias": "ChannelVariableName"
        },
        "longitudeVariableName": {
          "type": "string",
          "x-alias": "ChannelVariableName"
        },
        "secondaryVariables": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/SecondaryVariable"
          }
        },
        "enabled": {
          "type": "boolean"
        },
        "label": {
          "type": "string"
        },
        "visualizationOptions": {
          "$ref": "#/definitions/GeoPlotVisualizationOptions"
        }
      },
      "required": [
        "latitudeVariableName",
        "longitudeVariableName",
        "visualizationOptions"
      ]
    },
    "GeoPlotFromOverlay": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "format": "uuid"
        },
        "attachmentRid": {
          "type": "string",
          "format": "rid",
          "x-alias": "AttachmentRid"
        },
        "sourceFormat": {
          "$ref": "#/definitions/GeoOverlaySourceFormat"
        },
        "enabled": {
          "type": "boolean"
        },
        "label": {
          "type": "string"
        },
        "visualizationOptions": {
          "$ref": "#/definitions/GeoPlotVisualizationOptions"
        }
      },
      "required": [
        "attachmentRid",
        "sourceFormat",
        "visualizationOptions"
      ]
    },
    "GeoPlotSecondaryVisibilityConfig": {
      "type": "object",
      "properties": {
        "visible": {
          "type": "boolean"
        },
        "variableName": {
          "type": "string",
          "x-alias": "ChannelVariableName"
        }
      },
      "required": [
        "visible"
      ]
    },
    "GeoPlotVisualizationOptions": {
      "type": "object",
      "properties": {
        "color": {
          "type": "string",
          "x-alias": "HexColor"
        },
        "lineStyle": {
          "$ref": "#/definitions/GeoLineStyle"
        },
        "arrowStyle": {
          "$ref": "#/definitions/GeoArrowStyle"
        },
        "secondaryColorVisualization": {
          "allOf": [
            {
              "$ref": "#/definitions/GeoPlotSecondaryVisibilityConfig"
            }
          ],
          "description": "If visible, overwrites any existing visualization options on the geo plot."
        }
      },
      "required": [
        "color",
        "lineStyle"
      ]
    },
    "GeoPoint": {
      "description": "A static coordinate on the map",
      "type": "object",
      "properties": {
        "label": {
          "type": "string"
        },
        "icon": {
          "type": "string"
        },
        "latitude": {
          "type": "number",
          "format": "double"
        },
        "longitude": {
          "type": "number",
          "format": "double"
        },
        "variables": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/SecondaryVariable"
          }
        }
      },
      "required": [
        "icon",
        "latitude",
        "longitude"
      ]
    },
    "GeoUnitSystem": {
      "description": "Unit system used for distance measurements.",
      "type": "string",
      "enum": [
        "METRIC",
        "IMPERIAL",
        "NAUTICAL_MILES"
      ]
    },
    "GeoVizDefinition": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "v1"
          ]
        },
        "v1": {
          "$ref": "#/definitions/GeoVizDefinitionV1"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "v1",
        "v1": {
          "plots": [
            {
              "id": "string",
              "latitudeVariableName": "string",
              "longitudeVariableName": "string",
              "secondaryVariables": [
                {
                  "variableName": "string",
                  "label": "string",
                  "enabled": true,
                  "visualizationOption": {
                    "type": "asColors",
                    "asColors": {
                      "type": "numeric",
                      "numeric": {
                        "key": 1
                      }
                    }
                  }
                }
              ],
              "enabled": true,
              "label": "string",
              "visualizationOptions": {
                "color": "string",
                "lineStyle": "POINTS",
                "arrowStyle": "SOLID",
                "secondaryColorVisualization": {
                  "visible": true,
                  "variableName": "string"
                }
              }
            }
          ],
          "backgroundOverlays": [
            {
              "id": "string",
              "attachmentRid": "string",
              "sourceFormat": "KML",
              "enabled": true,
              "label": "string",
              "visualizationOptions": {
                "color": "string",
                "lineStyle": "POINTS",
                "arrowStyle": "SOLID",
                "secondaryColorVisualization": {
                  "visible": true,
                  "variableName": "string"
                }
              }
            }
          ],
          "title": "string",
          "customFeatures": [
            {
              "type": "point",
              "point": {
                "label": "string",
                "icon": "string",
                "latitude": 1,
                "longitude": 1,
                "variables": [
                  {
                    "variableName": "string",
                    "label": "string",
                    "enabled": true,
                    "visualizationOption": {
                      "type": "asColors",
                      "asColors": {
                        "type": "numeric",
                        "numeric": {
                          "key": 1
                        }
                      }
                    }
                  }
                ]
              }
            }
          ],
          "customMeasurements": [
            {
              "id": "string",
              "label": "string",
              "enabled": true,
              "startCoordinate": {
                "latitude": 1,
                "longitude": 1
              },
              "endCoordinate": {
                "latitude": 1,
                "longitude": 1
              },
              "visualizationOptions": {
                "color": "string",
                "lineStyle": "POINTS",
                "arrowStyle": "SOLID",
                "secondaryColorVisualization": {
                  "visible": true,
                  "variableName": "string"
                }
              }
            }
          ],
          "baseTileset": "STREET",
          "additionalTileset": "VFR",
          "unitSystem": "METRIC"
        }
      }
    },
    "GeoVizDefinitionV1": {
      "type": "object",
      "properties": {
        "plots": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/GeoPlotFromLatLong"
          }
        },
        "backgroundOverlays": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/GeoPlotFromOverlay"
          }
        },
        "title": {
          "type": "string"
        },
        "customFeatures": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/GeoCustomFeature"
          }
        },
        "customMeasurements": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/GeoCustomMeasurement"
          }
        },
        "baseTileset": {
          "$ref": "#/definitions/GeoBaseTileset"
        },
        "additionalTileset": {
          "$ref": "#/definitions/GeoAdditionalTileset"
        },
        "unitSystem": {
          "$ref": "#/definitions/GeoUnitSystem"
        }
      }
    },
    "HeatExchangerVizDefinition": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "v1"
          ]
        },
        "v1": {
          "$ref": "#/definitions/HeatExchangerVizDefinitionV1"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "v1",
        "v1": {
          "title": "string",
          "rotationDegrees": 1
        }
      }
    },
    "HeatExchangerVizDefinitionV1": {
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "description": "The label displayed on the heat exchanger."
        },
        "rotationDegrees": {
          "type": "integer",
          "format": "int32",
          "description": "Clockwise rotation in degrees. Multiples of 90; absent means no rotation."
        }
      }
    },
    "HiddenMarkerAppearance": {
      "description": "Point markers are not drawn.",
      "type": "object",
      "properties": {}
    },
    "HideEmptySeries": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "always",
            "whileStreaming",
            "never"
          ]
        },
        "always": {
          "$ref": "#/definitions/HideEmptySeriesAlways"
        },
        "whileStreaming": {
          "$ref": "#/definitions/HideEmptySeriesWhileStreaming"
        },
        "never": {
          "$ref": "#/definitions/HideEmptySeriesNever"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "always",
        "always": {}
      }
    },
    "HideEmptySeriesAlways": {
      "description": "Always omit empty series from the legend.",
      "type": "object",
      "properties": {}
    },
    "HideEmptySeriesNever": {
      "description": "Never omit empty series from the legend.",
      "type": "object",
      "properties": {}
    },
    "HideEmptySeriesWhileStreaming": {
      "description": "Omit empty series from the legend only while the chart streams live data.",
      "type": "object",
      "properties": {}
    },
    "HistogramChartDefinition": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "v1"
          ]
        },
        "v1": {
          "$ref": "#/definitions/HistogramChartDefinitionV1"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "v1",
        "v1": {
          "plots": [
            {
              "variableName": "string",
              "enabled": true,
              "color": "string"
            }
          ],
          "title": "string",
          "displaySettings": {
            "stacked": true,
            "sort": "VALUE_ASCENDING"
          },
          "numericBucketStrategy": {
            "type": "bucketCount",
            "bucketCount": {
              "type": "literal",
              "literal": 1
            }
          },
          "valueAxis": {
            "id": "string",
            "title": "string",
            "displayOptions": {
              "showTitle": true,
              "axisWidth": 1,
              "scaleType": "LINEAR"
            },
            "range": {
              "start": 1,
              "end": 1
            },
            "limit": {
              "start": 1,
              "end": 1
            },
            "position": "LEFT",
            "domainType": "NUMERIC",
            "tickNumberFormat": {
              "sigFigs": 1,
              "displayOption": "SCIENTIFIC",
              "fixedDecimalPlaces": 1,
              "decimalPlaces": {
                "type": "fixed",
                "fixed": {
                  "places": 1
                }
              }
            },
            "tooltipNumberFormat": {
              "sigFigs": 1,
              "displayOption": "SCIENTIFIC",
              "fixedDecimalPlaces": 1,
              "decimalPlaces": {
                "type": "fixed",
                "fixed": {
                  "places": 1
                }
              }
            },
            "reversed": true,
            "tickInterval": 1
          }
        }
      }
    },
    "HistogramChartDefinitionV1": {
      "type": "object",
      "properties": {
        "plots": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/HistogramPlot"
          }
        },
        "title": {
          "type": "string"
        },
        "displaySettings": {
          "$ref": "#/definitions/HistogramDisplaySettings"
        },
        "numericBucketStrategy": {
          "$ref": "#/definitions/NumericHistogramBucketStrategy"
        },
        "valueAxis": {
          "$ref": "#/definitions/ValueAxis"
        }
      },
      "required": [
        "displaySettings"
      ]
    },
    "HistogramDisplaySettings": {
      "type": "object",
      "properties": {
        "stacked": {
          "type": "boolean"
        },
        "sort": {
          "$ref": "#/definitions/HistogramSortOrder"
        }
      },
      "required": [
        "stacked",
        "sort"
      ]
    },
    "HistogramPlot": {
      "type": "object",
      "properties": {
        "variableName": {
          "type": "string",
          "x-alias": "ChannelVariableName"
        },
        "enabled": {
          "type": "boolean"
        },
        "color": {
          "type": "string",
          "x-alias": "HexColor"
        }
      },
      "required": [
        "variableName",
        "color"
      ]
    },
    "HistogramSortOrder": {
      "description": "The order in which the histogram should be sorted. Default is VALUE_ASCENDING.",
      "type": "string",
      "enum": [
        "VALUE_ASCENDING",
        "VALUE_DESCENDING",
        "FREQUENCY_ASCENDING",
        "FREQUENCY_DESCENDING"
      ]
    },
    "ImageAnchor": {
      "description": "A connection point, positioned on an unrotated image.",
      "type": "object",
      "properties": {
        "x": {
          "type": "number",
          "format": "double",
          "description": "Horizontal position from 0 to 1 across the unrotated image, left to right."
        },
        "y": {
          "type": "number",
          "format": "double",
          "description": "Vertical position from 0 to 1 down the unrotated image, top to bottom."
        }
      },
      "required": [
        "x",
        "y"
      ]
    },
    "ImageObjectFit": {
      "description": "How the image is scaled inside its container. CONTAIN fits the image without cropping; COVER fills the container, cropping if needed.",
      "type": "string",
      "enum": [
        "CONTAIN",
        "COVER"
      ]
    },
    "ImageVizDefinition": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "v1"
          ]
        },
        "v1": {
          "$ref": "#/definitions/ImageVizDefinitionV1"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "v1",
        "v1": {
          "title": "string",
          "attachmentRid": "string",
          "alt": "string",
          "objectFit": "CONTAIN",
          "rotationDegrees": 1,
          "anchors": {
            "key": {
              "x": 1,
              "y": 1
            }
          }
        }
      }
    },
    "ImageVizDefinitionV1": {
      "type": "object",
      "properties": {
        "title": {
          "type": "string"
        },
        "attachmentRid": {
          "type": "string",
          "format": "rid",
          "x-alias": "AttachmentRid",
          "description": "The uploaded image attachment. Absent until an image has been uploaded."
        },
        "alt": {
          "type": "string",
          "description": "Alternative text for the image, for accessibility."
        },
        "objectFit": {
          "allOf": [
            {
              "$ref": "#/definitions/ImageObjectFit"
            }
          ],
          "description": "How the image fills its container. Clients provide a default when absent."
        },
        "rotationDegrees": {
          "type": "integer",
          "format": "int32",
          "description": "Clockwise rotation in degrees. Multiples of 90; absent means no rotation."
        },
        "anchors": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/ImageAnchor"
          },
          "description": "Connection points, keyed by the id CanvasEndpoint.anchorId references."
        }
      }
    },
    "InstrumentDivider": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "solid"
          ]
        },
        "solid": {
          "$ref": "#/definitions/SolidInstrumentDivider"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "solid",
        "solid": {}
      }
    },
    "InstrumentLayout": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "centered",
            "twoRow"
          ]
        },
        "centered": {
          "$ref": "#/definitions/CenteredInstrumentLayout"
        },
        "twoRow": {
          "$ref": "#/definitions/TwoRowInstrumentLayout"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "centered",
        "centered": {
          "text": "string"
        }
      }
    },
    "InstrumentVizDefinition": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "v1"
          ]
        },
        "v1": {
          "$ref": "#/definitions/InstrumentVizDefinitionV1"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "v1",
        "v1": {
          "title": "string",
          "layout": {
            "type": "centered",
            "centered": {
              "text": "string"
            }
          }
        }
      }
    },
    "InstrumentVizDefinitionV1": {
      "description": "A P&ID instrument bubble: a circle holding either one centered row of text or two rows of text. The layout is designed for up to 4 characters per row. Longer text is allowed, and the client shrinks it to fit. The bubble's size comes from its canvas rect.",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "description": "The label displayed on the instrument."
        },
        "layout": {
          "allOf": [
            {
              "$ref": "#/definitions/InstrumentLayout"
            }
          ],
          "description": "How text is arranged inside the bubble. Absent means an empty bubble."
        }
      }
    },
    "IntegerNumberInput": {
      "description": "Accepts whole numbers only. min must be less than or equal to max.",
      "type": "object",
      "properties": {
        "min": {
          "type": "integer",
          "format": "int64",
          "description": "Inclusive lower bound. Absent means unbounded below."
        },
        "max": {
          "type": "integer",
          "format": "int64",
          "description": "Inclusive upper bound. Absent means unbounded above."
        },
        "step": {
          "type": "integer",
          "format": "int64",
          "description": "Must be at least 1. Valid values are min + k * step for an integer k, or k * step when min is absent. Also the increment for stepper controls. Absent is treated as 1."
        }
      }
    },
    "Layout": {
      "type": "object",
      "properties": {
        "plotlyLayout": {
          "type": "string",
          "description": "The json layout definition according to plotly's schema https://plotly.com/python/figure-structure/#the-toplevel-layout-attribute"
        }
      },
      "required": [
        "plotlyLayout"
      ]
    },
    "LineStyle": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "v1"
          ]
        },
        "v1": {
          "$ref": "#/definitions/LineStyleV1"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "v1",
        "v1": "SOLID"
      }
    },
    "LineStyleV1": {
      "type": "string",
      "enum": [
        "SOLID",
        "DASH"
      ]
    },
    "LineThreshold": {
      "type": "object",
      "properties": {
        "value": {
          "type": "number",
          "format": "double"
        },
        "label": {
          "type": "string"
        },
        "color": {
          "type": "string",
          "x-alias": "HexColor"
        },
        "lineStyle": {
          "$ref": "#/definitions/ThresholdLineStyle"
        }
      },
      "required": [
        "value",
        "color",
        "lineStyle"
      ]
    },
    "LineThresholdGroup": {
      "description": "Line thresholds are used to mark values or demarcate regions along a single axis.",
      "type": "object",
      "properties": {
        "shadingConfig": {
          "$ref": "#/definitions/ThresholdShadingConfig"
        },
        "lines": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/LineThreshold"
          }
        },
        "defaultFill": {
          "allOf": [
            {
              "$ref": "#/definitions/DefaultFill"
            }
          ],
          "description": "To supplement a set of line thresholds, the default fill configures how the remaining space (either above or below) should be colored. Transparent if empty."
        }
      },
      "required": [
        "shadingConfig"
      ]
    },
    "LinearInterpolationConnectingLine": {
      "type": "object",
      "properties": {}
    },
    "LogChannel": {
      "description": "A field to save additional column names on log panels with support for multiple variables",
      "type": "object",
      "properties": {
        "logChannelVariableName": {
          "type": "string",
          "x-alias": "ChannelVariableName"
        },
        "visibleLogColumnNames": {
          "type": "array",
          "items": {
            "type": "string",
            "x-alias": "LogColumnName"
          }
        },
        "tagFilters": {
          "type": "object",
          "additionalProperties": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "x-alias": "LogTagFilter"
        }
      },
      "required": [
        "logChannelVariableName",
        "tagFilters"
      ]
    },
    "LogColumnTagFilters": {
      "description": "Tag field to filter log series data by.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "literal"
          ]
        },
        "literal": {
          "type": "object",
          "additionalProperties": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "literal",
        "literal": {
          "key": [
            "string"
          ]
        }
      }
    },
    "LogPanelDefinition": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "v1"
          ]
        },
        "v1": {
          "$ref": "#/definitions/LogPanelDefinitionV1"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "v1",
        "v1": {
          "title": "string",
          "logChannels": [
            "string"
          ],
          "logChannelsV2": [
            {
              "logChannelVariableName": "string",
              "visibleLogColumnNames": [
                "string"
              ],
              "tagFilters": {
                "key": [
                  "string"
                ]
              }
            }
          ]
        }
      }
    },
    "LogPanelDefinitionV1": {
      "type": "object",
      "properties": {
        "title": {
          "type": "string"
        },
        "logChannels": {
          "type": "array",
          "items": {
            "type": "string",
            "x-alias": "ChannelVariableName"
          }
        },
        "logChannelsV2": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/LogChannel"
          }
        }
      }
    },
    "MagnitudeAndPhaseDisplayMode": {
      "type": "string",
      "enum": [
        "MAGNITUDE",
        "PHASE"
      ]
    },
    "MarkdownPanelDefinition": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "v1"
          ]
        },
        "v1": {
          "$ref": "#/definitions/MarkdownPanelDefinitionV1"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "v1",
        "v1": {
          "title": "string",
          "content": "string"
        }
      }
    },
    "MarkdownPanelDefinitionV1": {
      "type": "object",
      "properties": {
        "title": {
          "type": "string"
        },
        "content": {
          "type": "string",
          "description": "The markdown content to display in the panel."
        }
      }
    },
    "MarkerAppearance": {
      "description": "How point markers are drawn on numeric plots\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "fullSize",
            "hidden"
          ]
        },
        "fullSize": {
          "$ref": "#/definitions/FullSizeMarkerAppearance"
        },
        "hidden": {
          "$ref": "#/definitions/HiddenMarkerAppearance"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "fullSize",
        "fullSize": {}
      }
    },
    "MaxDecimalPlaces": {
      "description": "Format the number to a maximum number of decimal places, rounding numbers that have greater precision.",
      "type": "object",
      "properties": {
        "places": {
          "type": "integer",
          "format": "int32"
        }
      },
      "required": [
        "places"
      ]
    },
    "NeverConnectDisconnectedValues": {
      "description": "This option indicates that disconnected values are never connected with a line.",
      "type": "object",
      "properties": {}
    },
    "NoConfigAggregation": {
      "type": "object",
      "properties": {}
    },
    "NoConfigDataRequestMode": {
      "type": "object",
      "properties": {}
    },
    "NoConfigDisplayStat": {
      "type": "object",
      "properties": {}
    },
    "NoConfigIndicator": {
      "type": "object",
      "properties": {}
    },
    "NoConnectingLine": {
      "description": "This option indicates that points are never connected with a line.",
      "type": "object",
      "properties": {}
    },
    "NormallyClosedValvePosition": {
      "type": "object",
      "properties": {}
    },
    "NormallyOpenValvePosition": {
      "type": "object",
      "properties": {}
    },
    "NumberFormat": {
      "description": "Number format for numeric cells, eg 1e4 | 10000 | 10,000.",
      "type": "object",
      "properties": {
        "sigFigs": {
          "type": "integer",
          "format": "int32",
          "description": "Include the specified number of significant figures, rounding if needed."
        },
        "displayOption": {
          "allOf": [
            {
              "$ref": "#/definitions/NumberFormatDisplayOption"
            }
          ],
          "description": "The base display format for the number."
        },
        "fixedDecimalPlaces": {
          "type": "integer",
          "format": "int32",
          "x-deprecated": "use decimalPlaces instead"
        },
        "decimalPlaces": {
          "allOf": [
            {
              "$ref": "#/definitions/DecimalPlaces"
            }
          ],
          "description": "Options for formatting the decimal part of number."
        }
      }
    },
    "NumberFormatDisplayOption": {
      "type": "string",
      "enum": [
        "SCIENTIFIC",
        "SUCCINCT",
        "LOCALE",
        "PLAIN"
      ]
    },
    "NumberInputAction": {
      "description": "What the entered value does, and when.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "sendCommands"
          ]
        },
        "sendCommands": {
          "$ref": "#/definitions/NumberInputSendCommandsAction"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "sendCommands",
        "sendCommands": {
          "trigger": {
            "type": "commit",
            "commit": {}
          },
          "targets": [
            {
              "variableName": "string"
            }
          ],
          "confirmation": {
            "title": "string",
            "description": "string",
            "confirmLabel": "string"
          }
        }
      }
    },
    "NumberInputCommitTrigger": {
      "description": "Fires when the user commits an edited value, by blurring the input or pressing Enter.",
      "type": "object",
      "properties": {}
    },
    "NumberInputSendCommandsAction": {
      "description": "When trigger fires, sends the entered value to every entry in targets as a single command service SendCommands request.",
      "type": "object",
      "properties": {
        "trigger": {
          "allOf": [
            {
              "$ref": "#/definitions/NumberInputTrigger"
            }
          ],
          "description": "Absent means commit."
        },
        "targets": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/CommandTarget"
          },
          "description": "The channels that receive the value. Must be non-empty, contain at most 32 entries, and name each variable at most once. Every target receives the same value, so each target's data type must match numberType."
        },
        "confirmation": {
          "allOf": [
            {
              "$ref": "#/definitions/CommandConfirmation"
            }
          ],
          "description": "If present, the frontend must show a confirmation dialog and receive an explicit confirmation before sending the value."
        }
      }
    },
    "NumberInputTrigger": {
      "description": "When an action applies the entered value.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "commit"
          ]
        },
        "commit": {
          "$ref": "#/definitions/NumberInputCommitTrigger"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "commit",
        "commit": {}
      }
    },
    "NumberInputType": {
      "description": "The number type the input accepts. Determines the constraints applied to the entered value and, for sendCommands, the CommandValue variant sent.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "float",
            "integer"
          ]
        },
        "float": {
          "allOf": [
            {
              "$ref": "#/definitions/FloatNumberInput"
            }
          ],
          "description": "sendCommands sends CommandValue.floatValue; command targets must be DOUBLE channels."
        },
        "integer": {
          "allOf": [
            {
              "$ref": "#/definitions/IntegerNumberInput"
            }
          ],
          "description": "sendCommands sends CommandValue.intValue; command targets must be INT channels."
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "float",
        "float": {
          "min": 1,
          "max": 1,
          "step": 1
        }
      }
    },
    "NumberInputVizDefinition": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "v1"
          ]
        },
        "v1": {
          "$ref": "#/definitions/NumberInputVizDefinitionV1"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "v1",
        "v1": {
          "title": "string",
          "numberType": {
            "type": "float",
            "float": {
              "min": 1,
              "max": 1,
              "step": 1
            }
          },
          "unit": "string",
          "action": {
            "type": "sendCommands",
            "sendCommands": {
              "trigger": {
                "type": "commit",
                "commit": {}
              },
              "targets": [
                {
                  "variableName": "string"
                }
              ],
              "confirmation": {
                "title": "string",
                "description": "string",
                "confirmLabel": "string"
              }
            }
          }
        }
      }
    },
    "NumberInputVizDefinitionV1": {
      "description": "A number input whose entered value is applied by action. A value that violates the constraints of numberType is never applied.",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "description": "The label displayed with the input."
        },
        "numberType": {
          "$ref": "#/definitions/NumberInputType"
        },
        "unit": {
          "type": "string",
          "description": "Unit label rendered beside the input, such as \"psi\". Display only; the value is applied as entered."
        },
        "action": {
          "$ref": "#/definitions/NumberInputAction"
        }
      },
      "required": [
        "numberType",
        "action"
      ]
    },
    "NumericArrayCellConfig": {
      "type": "object",
      "properties": {
        "visualisation": {
          "$ref": "#/definitions/NumericArrayVisualisation"
        },
        "numberFormat": {
          "$ref": "#/definitions/NumberFormat"
        }
      }
    },
    "NumericArrayRawVisualisation": {
      "description": "A raw numeric array visualisation with optional coloring based on numeric thresholds.",
      "type": "object",
      "properties": {}
    },
    "NumericArrayVisualisation": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "raw"
          ]
        },
        "raw": {
          "$ref": "#/definitions/NumericArrayRawVisualisation"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "raw",
        "raw": {}
      }
    },
    "NumericBarGaugeVisualisation": {
      "description": "The settings for a bar gauge visualisation.",
      "type": "object",
      "properties": {
        "lowThreshold": {
          "type": "number",
          "format": "double"
        },
        "highThreshold": {
          "type": "number",
          "format": "double"
        }
      },
      "required": [
        "lowThreshold",
        "highThreshold"
      ]
    },
    "NumericBarVisualisationV2": {
      "description": "A numeric visualisation that will fill the cell from left to right with a colored background representing where the value falls inside a set range. The lowest and highest values in the thresholds determine the start and end of the range. Middle threshold values will still affect the cell's coloration.",
      "type": "object",
      "properties": {
        "thresholds": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/chartdefinition.api.Threshold"
          },
          "description": "Modifies the visualisation based on the highest threshold value that the computed value equals or surpasses. The lowest and highest value will determine the 0% and 100% values of the bar."
        }
      }
    },
    "NumericBetweenPredicate": {
      "description": "Matches when lower < value < upper; both bounds are exclusive. Bounds must be finite and lower must be strictly less than upper.",
      "type": "object",
      "properties": {
        "lower": {
          "type": "number",
          "format": "double"
        },
        "upper": {
          "type": "number",
          "format": "double"
        }
      },
      "required": [
        "lower",
        "upper"
      ]
    },
    "NumericCellConfig": {
      "type": "object",
      "properties": {
        "visualisation": {
          "$ref": "#/definitions/NumericValueVisualisationV2"
        },
        "numberFormat": {
          "$ref": "#/definitions/NumberFormat"
        },
        "groupBySort": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericGroupBySort"
            }
          ],
          "description": "Sorting configuration for grouped data rendering in a cell. If undefined, will sort alphabetically by grouping."
        }
      }
    },
    "NumericGroupBySort": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "value"
          ]
        },
        "value": {
          "$ref": "#/definitions/ValueSort"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "value",
        "value": {
          "isDescending": true
        }
      }
    },
    "NumericPresetColorRange": {
      "description": "Color interpolation for numeric values using a preset color scheme.",
      "type": "object",
      "properties": {
        "low": {
          "type": "number",
          "format": "double"
        },
        "high": {
          "type": "number",
          "format": "double"
        },
        "preset": {
          "$ref": "#/definitions/ColorScheme"
        }
      },
      "required": [
        "low",
        "high",
        "preset"
      ]
    },
    "NumericRawVisualisation": {
      "type": "object",
      "properties": {}
    },
    "NumericRawVisualisationV2": {
      "description": "A raw numeric visualisation with optional coloring based on numeric thresholds.",
      "type": "object",
      "properties": {
        "thresholds": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/chartdefinition.api.Threshold"
          },
          "description": "Modifies the visualisation based on the highest threshold value that the computed value surpasses."
        }
      }
    },
    "NumericValueChannel": {
      "type": "object",
      "properties": {
        "variableName": {
          "type": "string",
          "x-alias": "ChannelVariableName"
        },
        "visualisation": {
          "$ref": "#/definitions/NumericValueVisualisation"
        }
      },
      "required": [
        "variableName",
        "visualisation"
      ]
    },
    "NumericValuePredicate": {
      "description": "Numeric comparisons against a value. All operands must be finite floating-point numbers. Non-finite input values do not match. Equality is exact, without a tolerance.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "equals",
            "lessThan",
            "greaterThan",
            "gte",
            "lte",
            "notEqual",
            "between"
          ]
        },
        "equals": {
          "type": "number",
          "format": "double"
        },
        "lessThan": {
          "type": "number",
          "format": "double"
        },
        "greaterThan": {
          "type": "number",
          "format": "double"
        },
        "gte": {
          "type": "number",
          "format": "double"
        },
        "lte": {
          "type": "number",
          "format": "double"
        },
        "notEqual": {
          "type": "number",
          "format": "double"
        },
        "between": {
          "$ref": "#/definitions/NumericBetweenPredicate"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "equals",
        "equals": 1
      }
    },
    "NumericValueVisualisation": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "raw",
            "barGauge"
          ]
        },
        "raw": {
          "$ref": "#/definitions/NumericRawVisualisation"
        },
        "barGauge": {
          "$ref": "#/definitions/NumericBarGaugeVisualisation"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "raw",
        "raw": {}
      }
    },
    "NumericValueVisualisationV2": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "raw",
            "bar"
          ]
        },
        "raw": {
          "$ref": "#/definitions/NumericRawVisualisationV2"
        },
        "bar": {
          "$ref": "#/definitions/NumericBarVisualisationV2"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "raw",
        "raw": {
          "thresholds": [
            {
              "value": 1,
              "color": "string",
              "label": "string",
              "latch": {
                "enabled": true
              }
            }
          ]
        }
      }
    },
    "OrificeVizDefinition": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "v1"
          ]
        },
        "v1": {
          "$ref": "#/definitions/OrificeVizDefinitionV1"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "v1",
        "v1": {
          "title": "string",
          "rotationDegrees": 1
        }
      }
    },
    "OrificeVizDefinitionV1": {
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "description": "The label displayed on the orifice."
        },
        "rotationDegrees": {
          "type": "integer",
          "format": "int32",
          "description": "Clockwise rotation in degrees. Multiples of 90; absent means no rotation."
        }
      }
    },
    "OverlayScope": {
      "type": "string",
      "enum": [
        "ROW",
        "PANEL"
      ]
    },
    "PanelBucketStrategy": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "auto",
            "fixed",
            "duration"
          ]
        },
        "auto": {
          "$ref": "#/definitions/PanelBucketStrategyAuto"
        },
        "fixed": {
          "$ref": "#/definitions/PanelBucketStrategyFixed"
        },
        "duration": {
          "$ref": "#/definitions/PanelBucketStrategyDuration"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "auto",
        "auto": {}
      }
    },
    "PanelBucketStrategyAuto": {
      "type": "object",
      "properties": {}
    },
    "PanelBucketStrategyDuration": {
      "type": "object",
      "properties": {
        "duration": {
          "$ref": "#/definitions/UserDuration"
        }
      },
      "required": [
        "duration"
      ]
    },
    "PanelBucketStrategyFixed": {
      "type": "object",
      "properties": {
        "bucketCount": {
          "type": "integer",
          "format": "int32"
        }
      },
      "required": [
        "bucketCount"
      ]
    },
    "PeakDetectionMode": {
      "type": "string",
      "enum": [
        "POSITIVE",
        "NEGATIVE",
        "MEAN"
      ]
    },
    "PerRowFloatingLegends": {
      "description": "Show a separate floating legend for the series in each row of the chart.",
      "type": "object",
      "properties": {
        "position": {
          "allOf": [
            {
              "$ref": "#/definitions/FloatingLegendPosition"
            }
          ],
          "description": "Position of the floating legend in the chart. If undefined, defaults to preset BOTTOM_LEFT."
        }
      }
    },
    "PersistAll": {
      "type": "object",
      "properties": {}
    },
    "PersistByValue": {
      "type": "object",
      "properties": {
        "values": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "PersistValueOverlay": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "byValue",
            "all"
          ]
        },
        "byValue": {
          "$ref": "#/definitions/PersistByValue"
        },
        "all": {
          "$ref": "#/definitions/PersistAll"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "byValue",
        "byValue": {
          "values": [
            "string"
          ]
        }
      }
    },
    "PlotColoringConfiguration": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "rowIndependent",
            "rowShared"
          ]
        },
        "rowIndependent": {
          "allOf": [
            {
              "$ref": "#/definitions/RowIndependentPlotColoringConfiguration"
            }
          ],
          "description": "Series plotted on each row is colored independently of series in other rows."
        },
        "rowShared": {
          "allOf": [
            {
              "$ref": "#/definitions/RowSharedPlotColoringConfiguration"
            }
          ],
          "description": "Series plotted on each row will be colored using the same order of colors as the plots in the other rows in the panel."
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "rowIndependent",
        "rowIndependent": {}
      }
    },
    "PlotlyPanelDefinition": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "v1"
          ]
        },
        "v1": {
          "$ref": "#/definitions/PlotlyPanelDefinitionV1"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "v1",
        "v1": {
          "title": "string",
          "preset": "SCATTER_3D",
          "figure": {
            "data": [
              {
                "plotlyTrace": "string",
                "compute": {
                  "traceChannelVariables": {
                    "key": "string"
                  },
                  "config": {
                    "type": "scatter3d",
                    "scatter3d": {
                      "decimationStrategy": "SPATIAL"
                    }
                  }
                }
              }
            ],
            "layout": {
              "plotlyLayout": "string"
            },
            "plotlyConfig": "string"
          }
        }
      }
    },
    "PlotlyPanelDefinitionV1": {
      "type": "object",
      "properties": {
        "title": {
          "type": "string"
        },
        "preset": {
          "allOf": [
            {
              "$ref": "#/definitions/PlotlyPreset"
            }
          ],
          "description": "A preset that will render a nominal-defined plotly figure with minimum necessary inputs"
        },
        "figure": {
          "allOf": [
            {
              "$ref": "#/definitions/Figure"
            }
          ],
          "description": "The plotly instance definition, with extra fields for nominal-specific inputs"
        }
      },
      "required": [
        "figure"
      ]
    },
    "PlotlyPreset": {
      "type": "string",
      "enum": [
        "SCATTER_3D"
      ]
    },
    "Position": {
      "type": "string",
      "enum": [
        "TOP",
        "BOTTOM"
      ]
    },
    "ProcedureVizDefinition": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "v1",
            "v2"
          ]
        },
        "v1": {
          "$ref": "#/definitions/ProcedureVizDefinitionV1"
        },
        "v2": {
          "$ref": "#/definitions/ProcedureVizDefinitionV2"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "v1",
        "v1": {
          "title": "string",
          "executionRid": "string"
        }
      }
    },
    "ProcedureVizDefinitionV1": {
      "type": "object",
      "properties": {
        "title": {
          "type": "string"
        },
        "executionRid": {
          "type": "string",
          "format": "rid",
          "x-alias": "ProcedureExecutionRid"
        }
      }
    },
    "ProcedureVizDefinitionV2": {
      "type": "object",
      "properties": {
        "title": {
          "type": "string"
        },
        "procedure": {
          "allOf": [
            {
              "$ref": "#/definitions/ProcedureVizId"
            }
          ],
          "description": "A workbook can save either an execution or a template. Workbook templates should only use the latter."
        }
      }
    },
    "ProcedureVizId": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "executionRid",
            "templateRid"
          ]
        },
        "executionRid": {
          "type": "string",
          "format": "rid",
          "x-alias": "ProcedureExecutionRid"
        },
        "templateRid": {
          "type": "string",
          "format": "rid",
          "x-alias": "ProcedureRid"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "executionRid",
        "executionRid": "string"
      }
    },
    "PsdDisplayMode": {
      "type": "string",
      "enum": [
        "AVERAGE",
        "MAX",
        "MIN",
        "MIN_MAX_ENVELOPE",
        "NONE"
      ]
    },
    "Pump": {
      "description": "The pump type, with type-specific configuration.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "standard"
          ]
        },
        "standard": {
          "$ref": "#/definitions/StandardPump"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "standard",
        "standard": {}
      }
    },
    "PumpVizDefinition": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "v1"
          ]
        },
        "v1": {
          "$ref": "#/definitions/PumpVizDefinitionV1"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "v1",
        "v1": {
          "title": "string",
          "pump": {
            "type": "standard",
            "standard": {}
          },
          "feedbackVariableName": "string",
          "rotationDegrees": 1
        }
      }
    },
    "PumpVizDefinitionV1": {
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "description": "The label displayed on the pump."
        },
        "pump": {
          "allOf": [
            {
              "$ref": "#/definitions/Pump"
            }
          ],
          "description": "The pump variation to render, with variation-specific configuration."
        },
        "feedbackVariableName": {
          "type": "string",
          "x-alias": "ChannelVariableName",
          "description": "Workbook channel variable providing the pump feedback."
        },
        "rotationDegrees": {
          "type": "integer",
          "format": "int32",
          "description": "Clockwise rotation in degrees. Multiples of 90; absent means no rotation."
        }
      },
      "required": [
        "pump",
        "feedbackVariableName"
      ]
    },
    "RangeCellConfig": {
      "type": "object",
      "properties": {
        "visualisation": {
          "$ref": "#/definitions/RangeValueVisualisation"
        },
        "groupBySort": {
          "allOf": [
            {
              "$ref": "#/definitions/RangeGroupBySort"
            }
          ],
          "description": "Sorting configuration for grouped data rendering in a cell. If undefined, will sort alphabetically by grouping."
        }
      }
    },
    "RangeGroupBySort": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "value"
          ]
        },
        "value": {
          "$ref": "#/definitions/ValueSort"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "value",
        "value": {
          "isDescending": true
        }
      }
    },
    "RangeRawVisualisation": {
      "description": "The settings for a raw range visualisation.",
      "type": "object",
      "properties": {
        "rangeColor": {
          "type": "string",
          "x-alias": "HexColor"
        },
        "rangeLabel": {
          "type": "string",
          "description": "The string to display when the condition defined by the variable's function spec is met."
        },
        "noRangeColor": {
          "type": "string",
          "x-alias": "HexColor"
        },
        "noRangeLabel": {
          "type": "string",
          "description": "The string to display when the condition defined by the variable's function spec is not met."
        }
      }
    },
    "RangeValueChannel": {
      "type": "object",
      "properties": {
        "variableName": {
          "type": "string",
          "x-alias": "ChannelVariableName"
        },
        "visualisation": {
          "$ref": "#/definitions/RangeValueVisualisation"
        }
      },
      "required": [
        "variableName",
        "visualisation"
      ]
    },
    "RangeValueVisualisation": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "raw"
          ]
        },
        "raw": {
          "$ref": "#/definitions/RangeRawVisualisation"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "raw",
        "raw": {
          "rangeColor": "string",
          "rangeLabel": "string",
          "noRangeColor": "string",
          "noRangeLabel": "string"
        }
      }
    },
    "RectangleShape": {
      "type": "object",
      "properties": {}
    },
    "RegulatorVizDefinition": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "v1"
          ]
        },
        "v1": {
          "$ref": "#/definitions/RegulatorVizDefinitionV1"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "v1",
        "v1": {
          "title": "string",
          "rotationDegrees": 1
        }
      }
    },
    "RegulatorVizDefinitionV1": {
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "description": "The label displayed on the regulator."
        },
        "rotationDegrees": {
          "type": "integer",
          "format": "int32",
          "description": "Clockwise rotation in degrees. Multiples of 90; absent means no rotation."
        }
      }
    },
    "ReliefValve": {
      "description": "A pressure relief valve, rendered with the relief valve symbol. Shows feedback only; it is not commandable.",
      "type": "object",
      "properties": {
        "feedback": {
          "allOf": [
            {
              "$ref": "#/definitions/ValveFeedback"
            }
          ],
          "description": "Live open/closed state. Absent renders unknown."
        }
      }
    },
    "RowIndependentPlotColoringConfiguration": {
      "type": "object",
      "properties": {}
    },
    "RowSharedPlotColoringConfiguration": {
      "type": "object",
      "properties": {}
    },
    "Scatter3dDecimationStrategy": {
      "type": "string",
      "enum": [
        "SPATIAL",
        "TEMPORAL"
      ]
    },
    "Scatter3dTraceComputeConfig": {
      "type": "object",
      "properties": {
        "decimationStrategy": {
          "allOf": [
            {
              "$ref": "#/definitions/Scatter3dDecimationStrategy"
            }
          ],
          "description": "Bucket computed data points by their proximity in space or in time"
        }
      }
    },
    "ScatterDecimation": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "temporal",
            "spatial"
          ]
        },
        "temporal": {
          "$ref": "#/definitions/TemporalDecimation"
        },
        "spatial": {
          "$ref": "#/definitions/SpatialDecimation"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "temporal",
        "temporal": {}
      }
    },
    "SecondaryVariable": {
      "description": "A secondary variable to associate with a trace",
      "type": "object",
      "properties": {
        "variableName": {
          "type": "string",
          "x-alias": "ChannelVariableName"
        },
        "label": {
          "type": "string"
        },
        "enabled": {
          "type": "boolean",
          "description": "Default true"
        },
        "visualizationOption": {
          "$ref": "#/definitions/SecondaryVariableOptions"
        }
      },
      "required": [
        "variableName"
      ]
    },
    "SecondaryVariableOptions": {
      "description": "Specifies how values of a secondary channel should be visualized.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "asColors"
          ]
        },
        "asColors": {
          "$ref": "#/definitions/ValueToColorMap"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "asColors",
        "asColors": {
          "type": "numeric",
          "numeric": {
            "key": 1
          }
        }
      }
    },
    "SendCommandsAction": {
      "type": "object",
      "properties": {
        "commands": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/VizCommand"
          },
          "description": "The commands to send when the action is activated. Must be non-empty and contain at most 32 entries. Translated at activation time into a command service SendCommands request."
        }
      }
    },
    "Shape": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "rectangle",
            "ellipse",
            "triangle"
          ]
        },
        "rectangle": {
          "$ref": "#/definitions/RectangleShape"
        },
        "ellipse": {
          "$ref": "#/definitions/EllipseShape"
        },
        "triangle": {
          "$ref": "#/definitions/TriangleShape"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "rectangle",
        "rectangle": {}
      }
    },
    "ShapeVizDefinition": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "v1"
          ]
        },
        "v1": {
          "$ref": "#/definitions/ShapeVizDefinitionV1"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "v1",
        "v1": {
          "title": "string",
          "shape": {
            "type": "rectangle",
            "rectangle": {}
          },
          "fillColor": "string",
          "text": "string",
          "rotationDegrees": 1
        }
      }
    },
    "ShapeVizDefinitionV1": {
      "type": "object",
      "properties": {
        "title": {
          "type": "string"
        },
        "shape": {
          "allOf": [
            {
              "$ref": "#/definitions/Shape"
            }
          ],
          "description": "The shape to render, with shape-specific configuration."
        },
        "fillColor": {
          "type": "string",
          "x-alias": "HexColor"
        },
        "text": {
          "type": "string",
          "description": "Text rendered inside the shape. Absent means no text. The client picks the text color, and whether the shape needs an edge to stay visible, from the fill color and its own theme; neither is stored."
        },
        "rotationDegrees": {
          "type": "integer",
          "format": "int32",
          "description": "Clockwise rotation in degrees. Multiples of 90; absent means no rotation."
        }
      }
    },
    "SinkBoundary": {
      "type": "object",
      "properties": {}
    },
    "SolidInstrumentDivider": {
      "type": "object",
      "properties": {}
    },
    "SourceBoundary": {
      "type": "object",
      "properties": {}
    },
    "SpatialAppearanceColoring": {
      "description": "Coloring strategy for a spatial point cloud.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "matCap",
            "solid",
            "geometry",
            "gradient",
            "attributeRgb"
          ]
        },
        "matCap": {
          "$ref": "#/definitions/SpatialAppearanceColoringMatCap"
        },
        "solid": {
          "$ref": "#/definitions/SpatialAppearanceColoringSolid"
        },
        "geometry": {
          "$ref": "#/definitions/SpatialAppearanceColoringGeometry"
        },
        "gradient": {
          "$ref": "#/definitions/SpatialAppearanceColoringGradient"
        },
        "attributeRgb": {
          "$ref": "#/definitions/SpatialAppearanceColoringAttributeRgb"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "matCap",
        "matCap": {
          "name": "SOAP"
        }
      }
    },
    "SpatialAppearanceColoringAttributeRgb": {
      "description": "Color each point using per-point RGB attribute values.",
      "type": "object",
      "properties": {
        "attribute": {
          "type": "string",
          "description": "Name of the per-point attribute that encodes color (e.g. \"rgb\")."
        }
      },
      "required": [
        "attribute"
      ]
    },
    "SpatialAppearanceColoringGeometry": {
      "description": "Color by a per-point scalar attribute mapped through a colormap.",
      "type": "object",
      "properties": {
        "attribute": {
          "type": "string",
          "description": "Name of the per-point attribute to ramp (e.g. \"intensity\")."
        },
        "colormap": {
          "$ref": "#/definitions/SpatialColorMap"
        },
        "rangeMin": {
          "type": "number",
          "format": "double",
          "description": "Colormap lower bound; omit to use the attribute's data minimum."
        },
        "rangeMax": {
          "type": "number",
          "format": "double",
          "description": "Colormap upper bound; omit to use the attribute's data maximum."
        }
      },
      "required": [
        "attribute",
        "colormap"
      ]
    },
    "SpatialAppearanceColoringGradient": {
      "description": "Color by world-space position along a cardinal axis using a colormap.",
      "type": "object",
      "properties": {
        "axis": {
          "$ref": "#/definitions/SpatialColorAxis"
        },
        "colormap": {
          "$ref": "#/definitions/SpatialColorMap"
        },
        "extents": {
          "$ref": "#/definitions/SpatialGradientExtents"
        }
      },
      "required": [
        "axis",
        "colormap",
        "extents"
      ]
    },
    "SpatialAppearanceColoringMatCap": {
      "description": "Color using a baked matcap texture from the renderer's atlas.",
      "type": "object",
      "properties": {
        "name": {
          "$ref": "#/definitions/SpatialMatcap"
        }
      },
      "required": [
        "name"
      ]
    },
    "SpatialAppearanceColoringSolid": {
      "description": "Uniform solid color for all points.",
      "type": "object",
      "properties": {
        "r": {
          "type": "integer",
          "format": "int32"
        },
        "g": {
          "type": "integer",
          "format": "int32"
        },
        "b": {
          "type": "integer",
          "format": "int32"
        },
        "a": {
          "type": "integer",
          "format": "int32"
        }
      },
      "required": [
        "r",
        "g",
        "b",
        "a"
      ]
    },
    "SpatialColorAxis": {
      "description": "Cardinal axis used for gradient coloring.",
      "type": "string",
      "enum": [
        "X",
        "Y",
        "Z"
      ]
    },
    "SpatialColorMap": {
      "description": "Named perceptually uniform scales (matplotlib-style set plus TURBO).",
      "type": "string",
      "enum": [
        "MAGMA",
        "INFERNO",
        "PLASMA",
        "VIRIDIS",
        "CIVIDIS",
        "TURBO"
      ]
    },
    "SpatialColoring": {
      "description": "How to color spatial geometry for display.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "geometryAxis",
            "solid"
          ]
        },
        "geometryAxis": {
          "$ref": "#/definitions/SpatialColoringGeometryAxis"
        },
        "solid": {
          "type": "string",
          "x-alias": "HexColor",
          "description": "Single solid color for all points (hex)."
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "geometryAxis",
        "geometryAxis": {
          "axis": {
            "x": 1,
            "y": 1,
            "z": 1
          },
          "colormap": "MAGMA",
          "dataMin": 1,
          "dataMax": 1
        }
      }
    },
    "SpatialColoringGeometryAxis": {
      "description": "Color by world-space position along an axis direction using a named colormap.",
      "type": "object",
      "properties": {
        "axis": {
          "$ref": "#/definitions/Vec3d"
        },
        "colormap": {
          "$ref": "#/definitions/SpatialColorMap"
        },
        "dataMin": {
          "type": "number",
          "format": "double",
          "description": "Color ramp lower bound; omit for renderer default."
        },
        "dataMax": {
          "type": "number",
          "format": "double",
          "description": "Color ramp upper bound; omit for renderer default."
        }
      },
      "required": [
        "axis",
        "colormap"
      ]
    },
    "SpatialDecimation": {
      "description": "Bucket points together by proximity in value.",
      "type": "object",
      "properties": {}
    },
    "SpatialGradientExtents": {
      "description": "Whether the gradient ramp spans one model or the whole scene.",
      "type": "string",
      "enum": [
        "LOCAL",
        "GLOBAL"
      ]
    },
    "SpatialMatcap": {
      "description": "One of the baked matcaps in the volumesight atlas.",
      "type": "string",
      "enum": [
        "SOAP",
        "SILVER",
        "GOLD",
        "PLASTIC",
        "TILE",
        "VIOLET_CHROME",
        "TRAFFIC_CONE",
        "EMERALD",
        "AMETHYST",
        "BLUE_PAINT",
        "RED_CAR",
        "BEETLE",
        "BUBBLE",
        "PEARL",
        "WAX",
        "MARBLE"
      ]
    },
    "SpatialSplatMode": {
      "description": "Shape rendered for each point in the cloud.",
      "type": "string",
      "enum": [
        "BALL",
        "PARABOLIC",
        "DISC"
      ]
    },
    "SpatialTimeBinding": {
      "description": "Drives point-cloud visibility from the workbook playhead. When enabled, only points with a time attribute value ≤ the mapped playhead position are shown, revealing the cloud progressively as the playhead advances.",
      "type": "object",
      "properties": {
        "enabled": {
          "type": "boolean"
        },
        "attribute": {
          "type": "string",
          "description": "Name of the per-point attribute that encodes time (e.g. \"timestamp\")."
        },
        "unit": {
          "$ref": "#/definitions/SpatialTimeUnit"
        },
        "relativeStartUs": {
          "type": "integer",
          "format": "int64",
          "description": "User-supplied start of the point cloud's time range in µs. Used as a fallback when the ingest pipeline has not yet populated the spatial asset's relative_start_us property."
        },
        "relativeEndUs": {
          "type": "integer",
          "format": "int64",
          "description": "User-supplied end of the point cloud's time range in µs. Used as a fallback when the ingest pipeline has not yet populated the spatial asset's relative_end_us property."
        },
        "timeWindow": {
          "allOf": [
            {
              "$ref": "#/definitions/SpatialTimeWindow"
            }
          ],
          "description": "Controls which returns are visible relative to the playhead. Defaults to accumulated."
        }
      },
      "required": [
        "enabled",
        "attribute",
        "unit"
      ]
    },
    "SpatialTimeUnit": {
      "description": "Unit that the per-point time attribute is stored in.",
      "type": "string",
      "enum": [
        "NS",
        "US",
        "MS",
        "S"
      ]
    },
    "SpatialTimeWindow": {
      "description": "Controls which point cloud returns are visible relative to the playhead.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "accumulated",
            "trailing",
            "symmetric"
          ]
        },
        "accumulated": {
          "$ref": "#/definitions/SpatialTimeWindowAccumulated"
        },
        "trailing": {
          "$ref": "#/definitions/SpatialTimeWindowTrailing"
        },
        "symmetric": {
          "$ref": "#/definitions/SpatialTimeWindowSymmetric"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "accumulated",
        "accumulated": {}
      }
    },
    "SpatialTimeWindowAccumulated": {
      "description": "All returns from the scan origin through the playhead.",
      "type": "object",
      "properties": {}
    },
    "SpatialTimeWindowSymmetric": {
      "description": "Returns within halfWidthSec seconds of the playhead in each direction.",
      "type": "object",
      "properties": {
        "halfWidthSec": {
          "type": "number",
          "format": "double"
        }
      },
      "required": [
        "halfWidthSec"
      ]
    },
    "SpatialTimeWindowTrailing": {
      "description": "The most recent durationSec seconds of returns leading up to the playhead.",
      "type": "object",
      "properties": {
        "durationSec": {
          "type": "number",
          "format": "double"
        }
      },
      "required": [
        "durationSec"
      ]
    },
    "SpatialVolumetricFilter": {
      "description": "Visibility filter applied to points before rendering.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "none",
            "valueRange",
            "stringEquals"
          ]
        },
        "none": {
          "$ref": "#/definitions/SpatialVolumetricFilterNone"
        },
        "valueRange": {
          "$ref": "#/definitions/SpatialVolumetricFilterValueRange"
        },
        "stringEquals": {
          "$ref": "#/definitions/SpatialVolumetricFilterStringEquals"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "none",
        "none": {}
      }
    },
    "SpatialVolumetricFilterNone": {
      "description": "No filter — all points are visible.",
      "type": "object",
      "properties": {}
    },
    "SpatialVolumetricFilterStringEquals": {
      "description": "Show only points whose attribute value equals a given string.",
      "type": "object",
      "properties": {
        "attribute": {
          "type": "string"
        },
        "value": {
          "type": "string"
        }
      },
      "required": [
        "attribute",
        "value"
      ]
    },
    "SpatialVolumetricFilterValueRange": {
      "description": "Show only points whose attribute value falls within [min, max].",
      "type": "object",
      "properties": {
        "attribute": {
          "type": "string"
        },
        "min": {
          "type": "number",
          "format": "double"
        },
        "max": {
          "type": "number",
          "format": "double"
        }
      },
      "required": [
        "attribute",
        "min",
        "max"
      ]
    },
    "StalenessCellConfig": {
      "type": "object",
      "properties": {
        "visualisation": {
          "$ref": "#/definitions/StalenessVisualisation"
        },
        "groupBySort": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericGroupBySort"
            }
          ],
          "description": "Sorting configuration for grouped data rendering in a cell. If undefined, will sort alphabetically by grouping."
        }
      }
    },
    "StalenessConfiguration": {
      "type": "object",
      "properties": {
        "threshold": {
          "allOf": [
            {
              "$ref": "#/definitions/run.api.Duration"
            }
          ],
          "description": "The duration above which points are considered stale. By default this is 1 second."
        },
        "connectStalePoints": {
          "type": "boolean",
          "description": "Whether or not to visually connect stale points, i.e. points whose distance exceeds that of the configured threshold. By default this is true."
        }
      },
      "required": [
        "threshold",
        "connectStalePoints"
      ]
    },
    "StalenessVisualisation": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "raw",
            "bar"
          ]
        },
        "raw": {
          "$ref": "#/definitions/NumericRawVisualisationV2"
        },
        "bar": {
          "$ref": "#/definitions/NumericBarVisualisationV2"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "raw",
        "raw": {
          "thresholds": [
            {
              "value": 1,
              "color": "string",
              "label": "string",
              "latch": {
                "enabled": true
              }
            }
          ]
        }
      }
    },
    "StandardPump": {
      "type": "object",
      "properties": {}
    },
    "StandardValve": {
      "type": "object",
      "properties": {
        "normalPosition": {
          "allOf": [
            {
              "$ref": "#/definitions/ValveNormalPosition"
            }
          ],
          "description": "The valve's position when not powered, which determines the symbol rendered. Absent is treated as normallyClosed."
        },
        "feedback": {
          "allOf": [
            {
              "$ref": "#/definitions/ValveFeedback"
            }
          ],
          "description": "Live open/closed state. Absent renders unknown."
        },
        "commanding": {
          "allOf": [
            {
              "$ref": "#/definitions/ValveCommanding"
            }
          ],
          "description": "The valve's command menu. Absent means the valve is not commandable."
        }
      }
    },
    "StructCellConfig": {
      "type": "object",
      "properties": {
        "visualisation": {
          "$ref": "#/definitions/StructVisualisation"
        }
      }
    },
    "StructRawVisualisation": {
      "description": "A raw struct visualisation (renders the JSON as-is)",
      "type": "object",
      "properties": {}
    },
    "StructVisualisation": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "raw"
          ]
        },
        "raw": {
          "$ref": "#/definitions/StructRawVisualisation"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "raw",
        "raw": {}
      }
    },
    "TableColumn": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "x-alias": "ChannelVariableName"
        },
        "typedConfig": {
          "$ref": "#/definitions/TableColumnTypedConfig"
        },
        "columnWidth": {
          "type": "number",
          "format": "double"
        }
      },
      "required": [
        "name"
      ]
    },
    "TableColumnEnumAggregation": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "first",
            "last",
            "allDistinct",
            "countDistinct",
            "valueCounts"
          ]
        },
        "first": {
          "$ref": "#/definitions/NoConfigAggregation"
        },
        "last": {
          "$ref": "#/definitions/NoConfigAggregation"
        },
        "allDistinct": {
          "$ref": "#/definitions/NoConfigAggregation"
        },
        "countDistinct": {
          "$ref": "#/definitions/NoConfigAggregation"
        },
        "valueCounts": {
          "$ref": "#/definitions/NoConfigAggregation"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "first",
        "first": {}
      }
    },
    "TableColumnEnumConfig": {
      "type": "object",
      "properties": {
        "aggregation": {
          "$ref": "#/definitions/TableColumnEnumAggregation"
        },
        "summaryRowAggregation": {
          "$ref": "#/definitions/TableColumnEnumAggregation"
        }
      },
      "required": [
        "aggregation"
      ]
    },
    "TableColumnLogAggregation": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "count"
          ]
        },
        "count": {
          "$ref": "#/definitions/NoConfigAggregation"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "count",
        "count": {}
      }
    },
    "TableColumnLogConfig": {
      "type": "object",
      "properties": {
        "aggregation": {
          "$ref": "#/definitions/TableColumnLogAggregation"
        },
        "summaryRowAggregation": {
          "$ref": "#/definitions/TableColumnLogAggregation"
        },
        "visibleLogFields": {
          "type": "array",
          "items": {
            "type": "string",
            "x-alias": "LogColumnName"
          }
        },
        "tagFilters": {
          "$ref": "#/definitions/LogColumnTagFilters"
        }
      },
      "required": [
        "aggregation"
      ]
    },
    "TableColumnNumericAggregation": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "first",
            "last",
            "mean",
            "min",
            "max",
            "stddev",
            "count"
          ]
        },
        "first": {
          "$ref": "#/definitions/NoConfigAggregation"
        },
        "last": {
          "$ref": "#/definitions/NoConfigAggregation"
        },
        "mean": {
          "$ref": "#/definitions/NoConfigAggregation"
        },
        "min": {
          "$ref": "#/definitions/NoConfigAggregation"
        },
        "max": {
          "$ref": "#/definitions/NoConfigAggregation"
        },
        "stddev": {
          "$ref": "#/definitions/NoConfigAggregation"
        },
        "count": {
          "$ref": "#/definitions/NoConfigAggregation"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "first",
        "first": {}
      }
    },
    "TableColumnNumericConfig": {
      "type": "object",
      "properties": {
        "aggregation": {
          "$ref": "#/definitions/TableColumnNumericAggregation"
        },
        "summaryRowAggregation": {
          "$ref": "#/definitions/TableColumnNumericAggregation"
        },
        "numberFormat": {
          "allOf": [
            {
              "$ref": "#/definitions/NumberFormat"
            }
          ],
          "description": "Optional per-column number formatting. If unset, the panel-level default formatting is used."
        },
        "indicator": {
          "allOf": [
            {
              "$ref": "#/definitions/TableColumnNumericIndicator"
            }
          ],
          "description": "How a numeric cell visualises its value beyond the number itself. If unset, the default is bars."
        },
        "thresholds": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/chartdefinition.api.Threshold"
          },
          "description": "Colors the cell with the highest threshold whose value the displayed value equals or surpasses. Values below every threshold are left uncolored. Only read when indicator is color, but kept when the indicator changes so switching back restores them."
        }
      },
      "required": [
        "aggregation"
      ]
    },
    "TableColumnNumericIndicator": {
      "description": "Bars scales a comparison bar to the column's displayed range, color paints the cell from the column's thresholds, and none shows only the number.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "none",
            "bars",
            "color"
          ]
        },
        "none": {
          "$ref": "#/definitions/NoConfigIndicator"
        },
        "bars": {
          "$ref": "#/definitions/NoConfigIndicator"
        },
        "color": {
          "$ref": "#/definitions/NoConfigIndicator"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "none",
        "none": {}
      }
    },
    "TableColumnRangeAggregation": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "percentTrue",
            "allDistinct",
            "valueCounts"
          ]
        },
        "percentTrue": {
          "$ref": "#/definitions/NoConfigAggregation"
        },
        "allDistinct": {
          "$ref": "#/definitions/NoConfigAggregation"
        },
        "valueCounts": {
          "$ref": "#/definitions/NoConfigAggregation"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "percentTrue",
        "percentTrue": {}
      }
    },
    "TableColumnRangeConfig": {
      "type": "object",
      "properties": {
        "aggregation": {
          "$ref": "#/definitions/TableColumnRangeAggregation"
        },
        "summaryRowAggregation": {
          "$ref": "#/definitions/TableColumnRangeAggregation"
        }
      },
      "required": [
        "aggregation"
      ]
    },
    "TableColumnTypedConfig": {
      "description": "Any configuration that is specific to the type in question\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "numeric",
            "enum",
            "range",
            "log"
          ]
        },
        "numeric": {
          "$ref": "#/definitions/TableColumnNumericConfig"
        },
        "enum": {
          "$ref": "#/definitions/TableColumnEnumConfig"
        },
        "range": {
          "$ref": "#/definitions/TableColumnRangeConfig"
        },
        "log": {
          "$ref": "#/definitions/TableColumnLogConfig"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "numeric",
        "numeric": {
          "aggregation": {
            "type": "first",
            "first": {}
          },
          "summaryRowAggregation": {
            "type": "first",
            "first": {}
          },
          "numberFormat": {
            "sigFigs": 1,
            "displayOption": "SCIENTIFIC",
            "fixedDecimalPlaces": 1,
            "decimalPlaces": {
              "type": "fixed",
              "fixed": {
                "places": 1
              }
            }
          },
          "indicator": {
            "type": "none",
            "none": {}
          },
          "thresholds": [
            {
              "value": 1,
              "color": "string",
              "label": "string",
              "latch": {
                "enabled": true
              }
            }
          ]
        }
      }
    },
    "Tank": {
      "description": "The tank type, with type-specific configuration.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "vertical"
          ]
        },
        "vertical": {
          "$ref": "#/definitions/VerticalTank"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "vertical",
        "vertical": {}
      }
    },
    "TankMarkerPosition": {
      "type": "string",
      "enum": [
        "LEFT",
        "RIGHT"
      ]
    },
    "TankVizDefinition": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "v1"
          ]
        },
        "v1": {
          "$ref": "#/definitions/TankVizDefinitionV1"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "v1",
        "v1": {
          "title": "string",
          "tank": {
            "type": "vertical",
            "vertical": {}
          },
          "capacity": 1,
          "markerPosition": "LEFT",
          "showMarkerLabel": true,
          "fillColor": "string",
          "feedbackVariableName": "string"
        }
      }
    },
    "TankVizDefinitionV1": {
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "description": "The label displayed on the tank."
        },
        "tank": {
          "allOf": [
            {
              "$ref": "#/definitions/Tank"
            }
          ],
          "description": "The tank variation to render, with variation-specific configuration."
        },
        "capacity": {
          "type": "number",
          "format": "double",
          "description": "Full-scale capacity of the tank gauge."
        },
        "markerPosition": {
          "allOf": [
            {
              "$ref": "#/definitions/TankMarkerPosition"
            }
          ],
          "description": "Side of the gauge the level marker renders on."
        },
        "showMarkerLabel": {
          "type": "boolean",
          "description": "Whether the level marker renders its value label."
        },
        "fillColor": {
          "type": "string",
          "x-alias": "HexColor",
          "description": "Fill color of the tank level."
        },
        "feedbackVariableName": {
          "type": "string",
          "x-alias": "ChannelVariableName",
          "description": "Workbook channel variable providing the tank level feedback."
        }
      },
      "required": [
        "tank",
        "capacity",
        "markerPosition",
        "showMarkerLabel",
        "fillColor",
        "feedbackVariableName"
      ]
    },
    "TemporalDecimation": {
      "description": "Bucket points together by proximity in time.",
      "type": "object",
      "properties": {}
    },
    "TemporalSubunitsRelativeTimestampFormat": {
      "description": "Display relative timestamps as temporal subunits, such as 1h 20m 30s.",
      "type": "object",
      "properties": {}
    },
    "chartdefinition.api.Threshold": {
      "type": "object",
      "properties": {
        "value": {
          "type": "number",
          "format": "double",
          "description": "The minimum value a number must be to trigger the threshold color. If used in a staleness cell, this value is in milliseconds."
        },
        "color": {
          "type": "string",
          "x-alias": "HexColor",
          "description": "The color to apply to the cell when the threshold is active."
        },
        "label": {
          "type": "string",
          "description": "A name for this threshold to display while editing."
        },
        "latch": {
          "allOf": [
            {
              "$ref": "#/definitions/ThresholdLatch"
            }
          ],
          "description": "Options for pinning an indicator that data was within the threshold range while streaming."
        }
      },
      "required": [
        "value",
        "color"
      ]
    },
    "ThresholdDisconnectedValues": {
      "description": "NOTE this is deprecated and will be translated to NeverConnectDisconnectedValues by the frontend. This option indicates the duration below which disconnected values will always be connected with a line.",
      "type": "object",
      "properties": {
        "type": {
          "$ref": "#/definitions/run.api.Duration"
        }
      },
      "required": [
        "type"
      ]
    },
    "ThresholdLatch": {
      "type": "object",
      "properties": {
        "enabled": {
          "type": "boolean"
        }
      },
      "required": [
        "enabled"
      ]
    },
    "ThresholdLineStyle": {
      "type": "string",
      "enum": [
        "DOTTED",
        "SOLID",
        "NONE"
      ]
    },
    "ThresholdShadingConfig": {
      "description": "Specifies how areas of a plot should be shaded in relation to the defined threshold lines. Will eventually include other shading configurations, like a buffer zone.",
      "type": "string",
      "enum": [
        "ABOVE",
        "BELOW",
        "NONE"
      ]
    },
    "ThrustChamberVizDefinition": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "v1"
          ]
        },
        "v1": {
          "$ref": "#/definitions/ThrustChamberVizDefinitionV1"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "v1",
        "v1": {
          "title": "string",
          "rotationDegrees": 1
        }
      }
    },
    "ThrustChamberVizDefinitionV1": {
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "description": "The label displayed on the thrust chamber."
        },
        "rotationDegrees": {
          "type": "integer",
          "format": "int32",
          "description": "Clockwise rotation in degrees. Multiples of 90; absent means no rotation."
        }
      }
    },
    "TimeSeriesChartDefinition": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "v1"
          ]
        },
        "v1": {
          "$ref": "#/definitions/TimeSeriesChartDefinitionV1"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "v1",
        "v1": {
          "rows": [
            {
              "title": "string",
              "plots": [
                {
                  "variableName": "string",
                  "enabled": true,
                  "yAxisId": "string",
                  "color": "string",
                  "lineStyle": {
                    "type": "v1",
                    "v1": "SOLID"
                  }
                }
              ],
              "plotsV2": [
                {
                  "variableName": "string",
                  "enabled": true,
                  "yAxisId": "string",
                  "type": {
                    "type": "numeric",
                    "numeric": {
                      "color": "string",
                      "lineStyle": {
                        "type": "v1",
                        "v1": "SOLID"
                      },
                      "lineWidth": 1
                    }
                  },
                  "hideFromTooltip": true
                }
              ],
              "rowFlexSize": 1,
              "enabled": true
            }
          ],
          "comparisonRunGroups": [
            {
              "uuid": "string",
              "name": "string",
              "offset": {
                "value": 1,
                "unit": "DAYS"
              },
              "offsetAnchor": {
                "type": "run",
                "run": {}
              },
              "runs": [
                {
                  "runRid": "string",
                  "enabled": true,
                  "offsetOverride": {
                    "value": 1,
                    "unit": "DAYS"
                  }
                }
              ],
              "color": "string"
            }
          ],
          "events": [
            {
              "displayName": "string",
              "eventUuid": "string",
              "isPinned": true
            }
          ],
          "title": "string",
          "valueAxes": [
            {
              "id": "string",
              "title": "string",
              "displayOptions": {
                "showTitle": true,
                "axisWidth": 1,
                "scaleType": "LINEAR"
              },
              "range": {
                "start": 1,
                "end": 1
              },
              "limit": {
                "start": 1,
                "end": 1
              },
              "position": "LEFT",
              "domainType": "NUMERIC",
              "tickNumberFormat": {
                "sigFigs": 1,
                "displayOption": "SCIENTIFIC",
                "fixedDecimalPlaces": 1,
                "decimalPlaces": {
                  "type": "fixed",
                  "fixed": {
                    "places": 1
                  }
                }
              },
              "tooltipNumberFormat": {
                "sigFigs": 1,
                "displayOption": "SCIENTIFIC",
                "fixedDecimalPlaces": 1,
                "decimalPlaces": {
                  "type": "fixed",
                  "fixed": {
                    "places": 1
                  }
                }
              },
              "reversed": true,
              "tickInterval": 1
            }
          ],
          "thresholds": [
            {
              "axisId": "string",
              "visibility": true,
              "thresholds": {
                "type": "lineThresholds",
                "lineThresholds": {
                  "shadingConfig": "ABOVE",
                  "lines": [
                    {
                      "value": 1,
                      "label": "string",
                      "color": "string",
                      "lineStyle": "DOTTED"
                    }
                  ],
                  "defaultFill": {
                    "color": "string"
                  }
                }
              }
            }
          ],
          "disconnectedValues": {
            "type": "alwaysConnect",
            "alwaysConnect": {}
          },
          "stalenessConfiguration": {
            "threshold": {
              "seconds": 1,
              "nanos": 1
            },
            "connectStalePoints": true
          },
          "connectingLineConfiguration": {
            "style": {
              "type": "none",
              "none": {}
            },
            "alwaysConnected": true
          },
          "markerAppearance": {
            "type": "fullSize",
            "fullSize": {}
          },
          "plotColoringConfiguration": {
            "type": "rowIndependent",
            "rowIndependent": {}
          },
          "anchorPoint": {
            "seconds": 1,
            "nanos": 1
          },
          "bucketStrategy": {
            "type": "auto",
            "auto": {}
          },
          "floatingLegendsConfig": {
            "hidden": true,
            "legend": {
              "type": "perRow",
              "perRow": {
                "position": {
                  "type": "preset",
                  "preset": "TOP_LEFT"
                }
              }
            },
            "hideEmptySeries": {
              "type": "always",
              "always": {}
            }
          },
          "bucketDisplayConfig": {
            "type": "default",
            "default": {}
          }
        }
      }
    },
    "TimeSeriesChartDefinitionV1": {
      "type": "object",
      "properties": {
        "rows": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/TimeSeriesRow"
          }
        },
        "comparisonRunGroups": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/ComparisonRunGroup"
          }
        },
        "events": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Event"
          },
          "x-deprecated": "Please use the workbook's eventRefs field instead."
        },
        "title": {
          "type": "string"
        },
        "valueAxes": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/ValueAxis"
          }
        },
        "thresholds": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/AxisThresholdVisualization"
          }
        },
        "disconnectedValues": {
          "allOf": [
            {
              "$ref": "#/definitions/DisconnectedValueVisualization"
            }
          ],
          "description": "Determines when disconnected values should be connected. By default, they are always connected.",
          "x-deprecated": "Use stalenessConfiguration instead"
        },
        "stalenessConfiguration": {
          "allOf": [
            {
              "$ref": "#/definitions/StalenessConfiguration"
            }
          ],
          "description": "Determines when to draw lines between points. By default, the staleness threshold is 1s and stale points are connected."
        },
        "connectingLineConfiguration": {
          "allOf": [
            {
              "$ref": "#/definitions/ConnectingLineConfiguration"
            }
          ],
          "description": "Determines how to draw connecting lines between points. By default, uses forward fill/stair step connectors bounded by the staleness threshold."
        },
        "markerAppearance": {
          "allOf": [
            {
              "$ref": "#/definitions/MarkerAppearance"
            }
          ],
          "description": "Determines how point markers are drawn on numeric plots. By default, uses full-size markers."
        },
        "plotColoringConfiguration": {
          "allOf": [
            {
              "$ref": "#/definitions/PlotColoringConfiguration"
            }
          ],
          "description": "Configuration for coloring time series plots in this chart. By default, plots are colored independently between rows with a unique color if possible when created."
        },
        "anchorPoint": {
          "allOf": [
            {
              "$ref": "#/definitions/Timestamp"
            }
          ],
          "description": "Optional anchor point for fixed bucket alignment. When set, buckets align to this time instead of the viewport start."
        },
        "bucketStrategy": {
          "allOf": [
            {
              "$ref": "#/definitions/PanelBucketStrategy"
            }
          ],
          "description": "Custom bucket size to use when loading data."
        },
        "floatingLegendsConfig": {
          "allOf": [
            {
              "$ref": "#/definitions/FloatingLegendConfig"
            }
          ],
          "description": "Config for showing floating legends in the chart. If undefined, defaults to hiding."
        },
        "bucketDisplayConfig": {
          "allOf": [
            {
              "$ref": "#/definitions/BucketDisplayConfig"
            }
          ],
          "description": "Controls how decimated bucket data is displayed (e.g. show mean, min, max, count, sum, or a specific percentile). If undefined, defaults to BucketDisplayConfigDefault."
        }
      }
    },
    "TimeSeriesEnumPlot": {
      "type": "object",
      "properties": {
        "color": {
          "allOf": [
            {
              "$ref": "#/definitions/ColorStyle"
            }
          ],
          "description": "How to color the value ranges"
        },
        "position": {
          "allOf": [
            {
              "$ref": "#/definitions/Position"
            }
          ],
          "description": "Where to place the plot within the row"
        },
        "persistValueOverlays": {
          "allOf": [
            {
              "$ref": "#/definitions/PersistValueOverlay"
            }
          ],
          "description": "Render certain values' full-row/full-panel color overlays even when not interacting with the plot"
        },
        "overlayScope": {
          "allOf": [
            {
              "$ref": "#/definitions/OverlayScope"
            }
          ],
          "description": "How far to extend the overlay"
        },
        "displayInline": {
          "type": "boolean",
          "x-deprecated": "Use displayStyle instead"
        },
        "displayStyle": {
          "allOf": [
            {
              "$ref": "#/definitions/EnumDisplayStyle"
            }
          ],
          "description": "How to display the enum values on the chart"
        }
      },
      "required": [
        "color",
        "position",
        "persistValueOverlays",
        "overlayScope"
      ]
    },
    "TimeSeriesNumericPlot": {
      "type": "object",
      "properties": {
        "color": {
          "type": "string",
          "x-alias": "HexColor"
        },
        "lineStyle": {
          "$ref": "#/definitions/LineStyle"
        },
        "lineWidth": {
          "type": "integer",
          "format": "int32",
          "description": "Stroke width of the plotted line, in CSS pixels. Absent means the client's default width."
        }
      },
      "required": [
        "color",
        "lineStyle"
      ]
    },
    "TimeSeriesPlot": {
      "type": "object",
      "properties": {
        "variableName": {
          "type": "string",
          "x-alias": "ChannelVariableName"
        },
        "enabled": {
          "type": "boolean"
        },
        "yAxisId": {
          "type": "string",
          "x-alias": "AxisId"
        },
        "color": {
          "type": "string",
          "x-alias": "HexColor"
        },
        "lineStyle": {
          "$ref": "#/definitions/LineStyle"
        }
      },
      "required": [
        "variableName",
        "yAxisId",
        "color",
        "lineStyle"
      ]
    },
    "TimeSeriesPlotConfig": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "numeric",
            "range",
            "enum"
          ]
        },
        "numeric": {
          "$ref": "#/definitions/TimeSeriesNumericPlot"
        },
        "range": {
          "$ref": "#/definitions/TimeSeriesRangePlot"
        },
        "enum": {
          "$ref": "#/definitions/TimeSeriesEnumPlot"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "numeric",
        "numeric": {
          "color": "string",
          "lineStyle": {
            "type": "v1",
            "v1": "SOLID"
          },
          "lineWidth": 1
        }
      }
    },
    "TimeSeriesPlotV2": {
      "type": "object",
      "properties": {
        "variableName": {
          "type": "string",
          "x-alias": "ChannelVariableName"
        },
        "enabled": {
          "type": "boolean"
        },
        "yAxisId": {
          "type": "string",
          "x-alias": "AxisId"
        },
        "type": {
          "$ref": "#/definitions/TimeSeriesPlotConfig"
        },
        "hideFromTooltip": {
          "type": "boolean"
        }
      },
      "required": [
        "variableName",
        "yAxisId",
        "type"
      ]
    },
    "TimeSeriesRangePlot": {
      "type": "object",
      "properties": {
        "color": {
          "type": "string",
          "x-alias": "HexColor"
        }
      },
      "required": [
        "color"
      ]
    },
    "TimeSeriesRow": {
      "type": "object",
      "properties": {
        "title": {
          "type": "string"
        },
        "plots": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/TimeSeriesPlot"
          }
        },
        "plotsV2": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/TimeSeriesPlotV2"
          }
        },
        "rowFlexSize": {
          "type": "number",
          "format": "double"
        },
        "enabled": {
          "type": "boolean"
        }
      },
      "required": [
        "rowFlexSize"
      ]
    },
    "TimeSeriesTablePanelDefinition": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "v1"
          ]
        },
        "v1": {
          "$ref": "#/definitions/TimeSeriesTablePanelDefinitionV1"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "v1",
        "v1": {
          "title": "string",
          "columns": [
            {
              "name": "string",
              "typedConfig": {
                "type": "numeric",
                "numeric": {
                  "aggregation": {
                    "type": "first",
                    "first": {}
                  },
                  "summaryRowAggregation": {
                    "type": "first",
                    "first": {}
                  },
                  "numberFormat": {
                    "sigFigs": 1,
                    "displayOption": "SCIENTIFIC",
                    "fixedDecimalPlaces": 1,
                    "decimalPlaces": {
                      "type": "fixed",
                      "fixed": {
                        "places": 1
                      }
                    }
                  },
                  "indicator": {
                    "type": "none",
                    "none": {}
                  },
                  "thresholds": [
                    {
                      "value": 1,
                      "color": "string",
                      "label": "string",
                      "latch": {
                        "enabled": true
                      }
                    }
                  ]
                }
              },
              "columnWidth": 1
            }
          ],
          "numberFormat": {
            "sigFigs": 1,
            "displayOption": "SCIENTIFIC",
            "fixedDecimalPlaces": 1,
            "decimalPlaces": {
              "type": "fixed",
              "fixed": {
                "places": 1
              }
            }
          },
          "timestampColumnWidth": 1,
          "summaryRowVisible": true,
          "bucketStrategy": {
            "type": "auto",
            "auto": {}
          },
          "anchorPoint": {
            "seconds": 1,
            "nanos": 1
          },
          "dataRequestMode": {
            "type": "fullRate",
            "fullRate": {}
          }
        }
      }
    },
    "TimeSeriesTablePanelDefinitionV1": {
      "type": "object",
      "properties": {
        "title": {
          "type": "string"
        },
        "columns": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/TableColumn"
          }
        },
        "numberFormat": {
          "allOf": [
            {
              "$ref": "#/definitions/NumberFormat"
            }
          ],
          "description": "Optional panel-level number formatting for numeric columns. Per-column number formatting overrides this value."
        },
        "timestampColumnWidth": {
          "type": "number",
          "format": "double"
        },
        "summaryRowVisible": {
          "type": "boolean",
          "description": "Whether to display the summary row at the bottom of the table. Default is true."
        },
        "bucketStrategy": {
          "$ref": "#/definitions/PanelBucketStrategy"
        },
        "anchorPoint": {
          "allOf": [
            {
              "$ref": "#/definitions/Timestamp"
            }
          ],
          "description": "Optional anchor point for fixed bucket alignment. When set, buckets align to this time instead of the viewport start."
        },
        "dataRequestMode": {
          "allOf": [
            {
              "$ref": "#/definitions/DataRequestMode"
            }
          ],
          "description": "The mode to use when requesting data from the backend. Default is full rate."
        }
      }
    },
    "TotalSecondsRelativeTimestampFormat": {
      "description": "Display relative timestamps as a total number of seconds.",
      "type": "object",
      "properties": {}
    },
    "Trace": {
      "type": "object",
      "properties": {
        "plotlyTrace": {
          "type": "string",
          "description": "The json trace definition according to plotly's schema https://plotly.com/python/figure-structure/#the-toplevel-data-attribute"
        },
        "compute": {
          "allOf": [
            {
              "$ref": "#/definitions/TraceCompute"
            }
          ],
          "description": "Information needed to substitute computed data arrays into the trace"
        }
      },
      "required": [
        "plotlyTrace"
      ]
    },
    "TraceCompute": {
      "type": "object",
      "properties": {
        "traceChannelVariables": {
          "type": "object",
          "additionalProperties": {
            "type": "string",
            "x-alias": "ChannelVariableName"
          },
          "description": "A map of plotly trace variables to the channel variables that should load into them"
        },
        "config": {
          "$ref": "#/definitions/TraceComputeConfig"
        }
      }
    },
    "TraceComputeConfig": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "scatter3d"
          ]
        },
        "scatter3d": {
          "$ref": "#/definitions/Scatter3dTraceComputeConfig"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "scatter3d",
        "scatter3d": {
          "decimationStrategy": "SPATIAL"
        }
      }
    },
    "TriangleShape": {
      "type": "object",
      "properties": {}
    },
    "TwoRowInstrumentLayout": {
      "type": "object",
      "properties": {
        "topText": {
          "type": "string",
          "description": "Text in the top row, usually the ISA function letters (e.g. \"PIT\"). Absent means the row is empty."
        },
        "bottomText": {
          "type": "string",
          "description": "Text in the bottom row, usually the loop number (e.g. \"1234\"). Absent means the row is empty."
        },
        "divider": {
          "allOf": [
            {
              "$ref": "#/definitions/InstrumentDivider"
            }
          ],
          "description": "A horizontal line between the two rows. Absent means no line."
        }
      }
    },
    "ValueAxis": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "displayOptions": {
          "$ref": "#/definitions/AxisDisplayOptions"
        },
        "range": {
          "$ref": "#/definitions/AxisRange"
        },
        "limit": {
          "$ref": "#/definitions/AxisRange"
        },
        "position": {
          "$ref": "#/definitions/AxisPosition"
        },
        "domainType": {
          "$ref": "#/definitions/AxisDomainType"
        },
        "tickNumberFormat": {
          "$ref": "#/definitions/NumberFormat"
        },
        "tooltipNumberFormat": {
          "$ref": "#/definitions/NumberFormat"
        },
        "reversed": {
          "type": "boolean",
          "description": "Whether the axis direction is reversed. When true, larger values appear on the opposite side (left for X axis, bottom for Y axis). Defaults to false."
        },
        "tickInterval": {
          "type": "number",
          "format": "double",
          "description": "Spacing between axis tick labels in data units. Ticks are placed at multiples of this interval within the axis range. If not specified, ticks are chosen automatically. Applies to linear scales only."
        }
      },
      "required": [
        "id",
        "title",
        "displayOptions",
        "range",
        "limit",
        "position",
        "domainType"
      ]
    },
    "ValuePredicate": {
      "description": "A value predicate discriminated by data type. Only numeric values are currently supported; additional types, such as string predicates, can be added as new variants. Missing values or values of a different data type do not match; values are not coerced between types.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "number"
          ]
        },
        "number": {
          "$ref": "#/definitions/NumericValuePredicate"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "number",
        "number": {
          "type": "equals",
          "equals": 1
        }
      }
    },
    "ValueSort": {
      "type": "object",
      "properties": {
        "isDescending": {
          "type": "boolean",
          "description": "If true, numerics sort high to low, enums sort alphabetically descending, and ranges sort inRange groupings first. If false, the opposite is true for each."
        }
      },
      "required": [
        "isDescending"
      ]
    },
    "ValueTableCell": {
      "type": "object",
      "properties": {
        "variableName": {
          "type": "string"
        },
        "uuid": {
          "type": "string",
          "format": "uuid"
        },
        "config": {
          "$ref": "#/definitions/ValueTableCellConfig"
        }
      },
      "required": [
        "variableName",
        "config"
      ]
    },
    "ValueTableCellConfig": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "numeric",
            "enum",
            "range",
            "bitFlagMap",
            "staleness",
            "numericArray",
            "enumArray",
            "struct"
          ]
        },
        "numeric": {
          "$ref": "#/definitions/NumericCellConfig"
        },
        "enum": {
          "$ref": "#/definitions/EnumCellConfig"
        },
        "range": {
          "$ref": "#/definitions/RangeCellConfig"
        },
        "bitFlagMap": {
          "$ref": "#/definitions/BitFlagMapCellConfig"
        },
        "staleness": {
          "$ref": "#/definitions/StalenessCellConfig"
        },
        "numericArray": {
          "$ref": "#/definitions/NumericArrayCellConfig"
        },
        "enumArray": {
          "$ref": "#/definitions/EnumArrayCellConfig"
        },
        "struct": {
          "$ref": "#/definitions/StructCellConfig"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "numeric",
        "numeric": {
          "visualisation": {
            "type": "raw",
            "raw": {
              "thresholds": [
                {
                  "value": 1,
                  "color": "string",
                  "label": "string",
                  "latch": {
                    "enabled": true
                  }
                }
              ]
            }
          },
          "numberFormat": {
            "sigFigs": 1,
            "displayOption": "SCIENTIFIC",
            "fixedDecimalPlaces": 1,
            "decimalPlaces": {
              "type": "fixed",
              "fixed": {
                "places": 1
              }
            }
          },
          "groupBySort": {
            "type": "value",
            "value": {
              "isDescending": true
            }
          }
        }
      }
    },
    "ValueTableChannel": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "numeric",
            "enum",
            "range"
          ]
        },
        "numeric": {
          "$ref": "#/definitions/NumericValueChannel"
        },
        "enum": {
          "$ref": "#/definitions/EnumValueChannel"
        },
        "range": {
          "$ref": "#/definitions/RangeValueChannel"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "numeric",
        "numeric": {
          "variableName": "string",
          "visualisation": {
            "type": "raw",
            "raw": {}
          }
        }
      }
    },
    "ValueTableColumnChannel": {
      "type": "object",
      "properties": {
        "variableName": {
          "type": "string"
        },
        "displayName": {
          "type": "string",
          "description": "The column header. Falls back to the variable's own display name."
        },
        "visualisation": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericValueVisualisationV2"
            }
          ],
          "description": "Per-column numeric visualisation, such as thresholds. Superseded by `cellConfig`, which readers prefer when both are set; writers keep writing the numeric arm's visualisation here so older readers still see thresholds."
        },
        "cellConfig": {
          "allOf": [
            {
              "$ref": "#/definitions/ValueTableCellConfig"
            }
          ],
          "description": "Per-column typed cell settings, shared by every row of the column — the same union a grid cell persists, so the column view reaches settings parity with the grid (number format, enum color map, range, staleness, bit flags). The populated arm doubles as the channel's cell type; absent means a numeric channel configured only by `visualisation`."
        }
      },
      "required": [
        "variableName"
      ]
    },
    "ValueTableDefinition": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "v1",
            "v2",
            "v3"
          ]
        },
        "v1": {
          "$ref": "#/definitions/ValueTableDefinitionV1"
        },
        "v2": {
          "$ref": "#/definitions/ValueTableDefinitionV2"
        },
        "v3": {
          "$ref": "#/definitions/ValueTableDefinitionV3"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "v1",
        "v1": {
          "title": "string",
          "channels": [
            {
              "type": "numeric",
              "numeric": {
                "variableName": "string",
                "visualisation": {
                  "type": "raw",
                  "raw": {}
                }
              }
            }
          ]
        }
      }
    },
    "ValueTableDefinitionV1": {
      "type": "object",
      "properties": {
        "title": {
          "type": "string"
        },
        "channels": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/ValueTableChannel"
          },
          "description": "Each channel to be displayed. Based on the data type, the visualisation options and settings will be different."
        }
      }
    },
    "ValueTableDefinitionV2": {
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "description": "The display title of the panel."
        },
        "showUnits": {
          "type": "boolean",
          "description": "If true, display units in the cells when available."
        },
        "showStalenessIndicator": {
          "type": "boolean",
          "description": "If true, display staleness indicator in the cells when available."
        },
        "layout": {
          "$ref": "#/definitions/ValueTableLayout"
        },
        "stalenessIndicator": {
          "allOf": [
            {
              "$ref": "#/definitions/ValueTableStalenessConfig"
            }
          ],
          "description": "Configuration for showing staleness of values in the value table while streaming."
        }
      },
      "required": [
        "layout"
      ]
    },
    "ValueTableDefinitionV3": {
      "description": "A value table with three explicit layout modes: static, flow, and column. Display settings live here rather than on the layout so a mode switch preserves them; `column` has no home for them at all. The `grid` arm is reused verbatim from V2, making a static V3 payload byte-identical to the equivalent V2 one — the `v3` union tag is all that distinguishes them.",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "description": "The display title of the panel."
        },
        "showUnits": {
          "type": "boolean",
          "description": "If true, display units in the cells when available."
        },
        "showStalenessIndicator": {
          "type": "boolean",
          "description": "If true, display staleness indicator in the cells when available."
        },
        "showCellLabels": {
          "type": "boolean",
          "description": "If true, display channel names in the cells."
        },
        "showColumnHeaders": {
          "type": "boolean",
          "description": "If true, display column headers."
        },
        "showRowHeaders": {
          "type": "boolean",
          "description": "If true, display row headers."
        },
        "rowHeaderWidth": {
          "type": "number",
          "format": "double",
          "description": "The width of the row headers in pixels."
        },
        "gridDefaultCellConfigs": {
          "allOf": [
            {
              "$ref": "#/definitions/ValueTableMultiCellConfig"
            }
          ],
          "description": "Panel-level defaults for cell visualisations, applying to every layout mode."
        },
        "layout": {
          "$ref": "#/definitions/ValueTableLayoutV2"
        }
      },
      "required": [
        "gridDefaultCellConfigs",
        "layout"
      ]
    },
    "ValueTableFlowCell": {
      "description": "A cell in a flow layout, wrapped with the metadata identifying which grouped fan-out it came from.",
      "type": "object",
      "properties": {
        "cell": {
          "$ref": "#/definitions/ValueTableCell"
        },
        "groupId": {
          "type": "string",
          "format": "uuid",
          "description": "Stable id shared by every cell of one grouped fan-out. Client-generated, not a RID: there is no server-side registry, and it is meaningful only as a correlation key within a single panel payload."
        },
        "partition": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "description": "Tag key to value, selecting which grouping of a grouped compute response this cell renders. Corresponds to `compute.api.Grouping.tagsWithValues`. Must be absent when `groupId` is absent."
        }
      },
      "required": [
        "cell"
      ]
    },
    "ValueTableGridRowColumnConfig": {
      "type": "object",
      "properties": {
        "position": {
          "type": "integer",
          "format": "int32",
          "description": "The index of the row or column to apply this configuration to."
        },
        "header": {
          "type": "string"
        },
        "cellConfig": {
          "$ref": "#/definitions/ValueTableMultiCellConfig"
        }
      },
      "required": [
        "position"
      ]
    },
    "ValueTableGridValueTableCell": {
      "type": "object",
      "properties": {
        "row": {
          "type": "integer",
          "format": "int32"
        },
        "column": {
          "type": "integer",
          "format": "int32"
        },
        "cell": {
          "$ref": "#/definitions/ValueTableCell"
        }
      },
      "required": [
        "row",
        "column",
        "cell"
      ]
    },
    "ValueTableLayout": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "grid"
          ]
        },
        "grid": {
          "$ref": "#/definitions/ValueTableLayoutGrid"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "grid",
        "grid": {
          "showRowHeaders": true,
          "rowHeaderWidth": 1,
          "showColumnHeaders": true,
          "showCellLabels": true,
          "gridDefaultCellConfigs": {
            "range": {
              "visualisation": {
                "type": "raw",
                "raw": {
                  "rangeColor": "string",
                  "rangeLabel": "string",
                  "noRangeColor": "string",
                  "noRangeLabel": "string"
                }
              },
              "groupBySort": {
                "type": "value",
                "value": {
                  "isDescending": true
                }
              }
            },
            "enum": {
              "visualisation": {
                "type": "raw",
                "raw": {
                  "colorMap": {
                    "key": "string"
                  }
                }
              },
              "groupBySort": {
                "type": "custom",
                "custom": {
                  "order": [
                    "string"
                  ]
                }
              }
            },
            "numeric": {
              "visualisation": {
                "type": "raw",
                "raw": {
                  "thresholds": [
                    {
                      "value": 1,
                      "color": "string",
                      "label": "string",
                      "latch": {
                        "enabled": true
                      }
                    }
                  ]
                }
              },
              "numberFormat": {
                "sigFigs": 1,
                "displayOption": "SCIENTIFIC",
                "fixedDecimalPlaces": 1,
                "decimalPlaces": {
                  "type": "fixed",
                  "fixed": {
                    "places": 1
                  }
                }
              },
              "groupBySort": {
                "type": "value",
                "value": {
                  "isDescending": true
                }
              }
            },
            "staleness": {
              "visualisation": {
                "type": "raw",
                "raw": {
                  "thresholds": [
                    {
                      "value": 1,
                      "color": "string",
                      "label": "string",
                      "latch": {
                        "enabled": true
                      }
                    }
                  ]
                }
              },
              "groupBySort": {
                "type": "value",
                "value": {
                  "isDescending": true
                }
              }
            },
            "numericArray": {
              "visualisation": {
                "type": "raw",
                "raw": {}
              },
              "numberFormat": {
                "sigFigs": 1,
                "displayOption": "SCIENTIFIC",
                "fixedDecimalPlaces": 1,
                "decimalPlaces": {
                  "type": "fixed",
                  "fixed": {
                    "places": 1
                  }
                }
              }
            },
            "enumArray": {
              "visualisation": {
                "type": "raw",
                "raw": {}
              }
            },
            "struct": {
              "visualisation": {
                "type": "raw",
                "raw": {}
              }
            }
          },
          "columnConfigs": [
            {
              "position": 1,
              "header": "string",
              "cellConfig": {
                "range": {
                  "visualisation": {
                    "type": "raw",
                    "raw": {
                      "rangeColor": "string",
                      "rangeLabel": "string",
                      "noRangeColor": "string",
                      "noRangeLabel": "string"
                    }
                  },
                  "groupBySort": {
                    "type": "value",
                    "value": {
                      "isDescending": true
                    }
                  }
                },
                "enum": {
                  "visualisation": {
                    "type": "raw",
                    "raw": {
                      "colorMap": {
                        "key": "string"
                      }
                    }
                  },
                  "groupBySort": {
                    "type": "custom",
                    "custom": {
                      "order": [
                        "string"
                      ]
                    }
                  }
                },
                "numeric": {
                  "visualisation": {
                    "type": "raw",
                    "raw": {
                      "thresholds": [
                        {
                          "value": 1,
                          "color": "string",
                          "label": "string",
                          "latch": {
                            "enabled": true
                          }
                        }
                      ]
                    }
                  },
                  "numberFormat": {
                    "sigFigs": 1,
                    "displayOption": "SCIENTIFIC",
                    "fixedDecimalPlaces": 1,
                    "decimalPlaces": {
                      "type": "fixed",
                      "fixed": {
                        "places": 1
                      }
                    }
                  },
                  "groupBySort": {
                    "type": "value",
                    "value": {
                      "isDescending": true
                    }
                  }
                },
                "staleness": {
                  "visualisation": {
                    "type": "raw",
                    "raw": {
                      "thresholds": [
                        {
                          "value": 1,
                          "color": "string",
                          "label": "string",
                          "latch": {
                            "enabled": true
                          }
                        }
                      ]
                    }
                  },
                  "groupBySort": {
                    "type": "value",
                    "value": {
                      "isDescending": true
                    }
                  }
                },
                "numericArray": {
                  "visualisation": {
                    "type": "raw",
                    "raw": {}
                  },
                  "numberFormat": {
                    "sigFigs": 1,
                    "displayOption": "SCIENTIFIC",
                    "fixedDecimalPlaces": 1,
                    "decimalPlaces": {
                      "type": "fixed",
                      "fixed": {
                        "places": 1
                      }
                    }
                  }
                },
                "enumArray": {
                  "visualisation": {
                    "type": "raw",
                    "raw": {}
                  }
                },
                "struct": {
                  "visualisation": {
                    "type": "raw",
                    "raw": {}
                  }
                }
              }
            }
          ],
          "rowConfigs": [
            {
              "position": 1,
              "header": "string",
              "cellConfig": {
                "range": {
                  "visualisation": {
                    "type": "raw",
                    "raw": {
                      "rangeColor": "string",
                      "rangeLabel": "string",
                      "noRangeColor": "string",
                      "noRangeLabel": "string"
                    }
                  },
                  "groupBySort": {
                    "type": "value",
                    "value": {
                      "isDescending": true
                    }
                  }
                },
                "enum": {
                  "visualisation": {
                    "type": "raw",
                    "raw": {
                      "colorMap": {
                        "key": "string"
                      }
                    }
                  },
                  "groupBySort": {
                    "type": "custom",
                    "custom": {
                      "order": [
                        "string"
                      ]
                    }
                  }
                },
                "numeric": {
                  "visualisation": {
                    "type": "raw",
                    "raw": {
                      "thresholds": [
                        {
                          "value": 1,
                          "color": "string",
                          "label": "string",
                          "latch": {
                            "enabled": true
                          }
                        }
                      ]
                    }
                  },
                  "numberFormat": {
                    "sigFigs": 1,
                    "displayOption": "SCIENTIFIC",
                    "fixedDecimalPlaces": 1,
                    "decimalPlaces": {
                      "type": "fixed",
                      "fixed": {
                        "places": 1
                      }
                    }
                  },
                  "groupBySort": {
                    "type": "value",
                    "value": {
                      "isDescending": true
                    }
                  }
                },
                "staleness": {
                  "visualisation": {
                    "type": "raw",
                    "raw": {
                      "thresholds": [
                        {
                          "value": 1,
                          "color": "string",
                          "label": "string",
                          "latch": {
                            "enabled": true
                          }
                        }
                      ]
                    }
                  },
                  "groupBySort": {
                    "type": "value",
                    "value": {
                      "isDescending": true
                    }
                  }
                },
                "numericArray": {
                  "visualisation": {
                    "type": "raw",
                    "raw": {}
                  },
                  "numberFormat": {
                    "sigFigs": 1,
                    "displayOption": "SCIENTIFIC",
                    "fixedDecimalPlaces": 1,
                    "decimalPlaces": {
                      "type": "fixed",
                      "fixed": {
                        "places": 1
                      }
                    }
                  }
                },
                "enumArray": {
                  "visualisation": {
                    "type": "raw",
                    "raw": {}
                  }
                },
                "struct": {
                  "visualisation": {
                    "type": "raw",
                    "raw": {}
                  }
                }
              }
            }
          ],
          "rowCount": 1,
          "columnCount": 1,
          "cells": [
            {
              "row": 1,
              "column": 1,
              "cell": {
                "variableName": "string",
                "uuid": "string",
                "config": {
                  "type": "numeric",
                  "numeric": {
                    "visualisation": {
                      "type": "raw",
                      "raw": {
                        "thresholds": [
                          {
                            "value": 1,
                            "color": "string",
                            "label": "string",
                            "latch": {
                              "enabled": true
                            }
                          }
                        ]
                      }
                    },
                    "numberFormat": {
                      "sigFigs": 1,
                      "displayOption": "SCIENTIFIC",
                      "fixedDecimalPlaces": 1,
                      "decimalPlaces": {
                        "type": "fixed",
                        "fixed": {
                          "places": 1
                        }
                      }
                    },
                    "groupBySort": {
                      "type": "value",
                      "value": {
                        "isDescending": true
                      }
                    }
                  }
                }
              }
            }
          ]
        }
      }
    },
    "ValueTableLayoutColumn": {
      "description": "A layout that renders each channel as a column of a sortable, filterable table.",
      "type": "object",
      "properties": {
        "columnChannels": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/ValueTableColumnChannel"
          },
          "description": "The channels to display, one column each."
        },
        "columnTableState": {
          "allOf": [
            {
              "$ref": "#/definitions/ColumnTableState"
            }
          ],
          "description": "Client-owned table state. The backend stores and returns it without interpreting it."
        }
      }
    },
    "ValueTableLayoutFlow": {
      "description": "A flowing layout where order is the data: cells render in list order and wrap onto a new line every `wrapWidth` cells. A cell's position is its index — there are no coordinates and no row or column counts.\n\nDeliberately has no `rowConfigs`: rows are derived wrap lines, so a persisted per-row config would be silently mis-targeted whenever `wrapWidth` or a fan-out's cardinality changed. Do not add one for symmetry.",
      "type": "object",
      "properties": {
        "cells": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/ValueTableFlowCell"
          },
          "description": "The cells to display, in render order."
        },
        "wrapWidth": {
          "type": "integer",
          "format": "int32",
          "description": "The number of cells per wrap line, and therefore the flow's column count. Never infer that count from `columnConfigs`, which is sparse: `[]` means `wrapWidth` columns none of which are configured, not zero columns."
        },
        "columnConfigs": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/ValueTableGridRowColumnConfig"
          },
          "description": "Column-level configurations, sparse over the `wrapWidth` columns: a column with no header and no cell config has no entry. `position` is authoritative rather than the array index, and must be less than `wrapWidth`. The count-plus-configs pairing mirrors `ValueTableLayoutGrid`'s `columnCount`, though that arm's list is written densely."
        },
        "groups": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/ValueTableMultiCellConfig"
          },
          "description": "Per-group cell configuration, keyed by `ValueTableFlowCell.groupId`. A group with no entry falls back to `gridDefaultCellConfigs`; entries with no matching cell are tolerated."
        }
      },
      "required": [
        "wrapWidth"
      ]
    },
    "ValueTableLayoutGrid": {
      "description": "A 2D grid layout for the value table where cells are laid out in specific rows and columns. Supports hierarchical cell visualisation configurations, favoring when present: the cell's own definition, then the column's, then the row's, then the panel's.",
      "type": "object",
      "properties": {
        "showRowHeaders": {
          "type": "boolean",
          "description": "If true, display row headers."
        },
        "rowHeaderWidth": {
          "type": "number",
          "format": "double",
          "description": "The width of the row headers in pixels."
        },
        "showColumnHeaders": {
          "type": "boolean",
          "description": "If true, display column headers."
        },
        "showCellLabels": {
          "type": "boolean",
          "description": "If true, display channel names in the cells."
        },
        "gridDefaultCellConfigs": {
          "allOf": [
            {
              "$ref": "#/definitions/ValueTableMultiCellConfig"
            }
          ],
          "description": "Panel-level defaults for cell visualisations"
        },
        "columnConfigs": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/ValueTableGridRowColumnConfig"
          },
          "description": "Column-level configurations."
        },
        "rowConfigs": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/ValueTableGridRowColumnConfig"
          },
          "description": "Row-level configurations."
        },
        "rowCount": {
          "type": "integer",
          "format": "int32"
        },
        "columnCount": {
          "type": "integer",
          "format": "int32"
        },
        "cells": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/ValueTableGridValueTableCell"
          },
          "description": "An array of cells to display in the table."
        }
      },
      "required": [
        "gridDefaultCellConfigs",
        "rowCount",
        "columnCount"
      ]
    },
    "ValueTableLayoutV2": {
      "description": "Separate from `ValueTableLayout` so new arms cannot widen `ValueTableDefinitionV2.layout`, which clients read as `v2.layout.grid` without checking the tag. The `grid` arm is the same object.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "grid",
            "flow",
            "column"
          ]
        },
        "grid": {
          "$ref": "#/definitions/ValueTableLayoutGrid"
        },
        "flow": {
          "$ref": "#/definitions/ValueTableLayoutFlow"
        },
        "column": {
          "$ref": "#/definitions/ValueTableLayoutColumn"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "grid",
        "grid": {
          "showRowHeaders": true,
          "rowHeaderWidth": 1,
          "showColumnHeaders": true,
          "showCellLabels": true,
          "gridDefaultCellConfigs": {
            "range": {
              "visualisation": {
                "type": "raw",
                "raw": {
                  "rangeColor": "string",
                  "rangeLabel": "string",
                  "noRangeColor": "string",
                  "noRangeLabel": "string"
                }
              },
              "groupBySort": {
                "type": "value",
                "value": {
                  "isDescending": true
                }
              }
            },
            "enum": {
              "visualisation": {
                "type": "raw",
                "raw": {
                  "colorMap": {
                    "key": "string"
                  }
                }
              },
              "groupBySort": {
                "type": "custom",
                "custom": {
                  "order": [
                    "string"
                  ]
                }
              }
            },
            "numeric": {
              "visualisation": {
                "type": "raw",
                "raw": {
                  "thresholds": [
                    {
                      "value": 1,
                      "color": "string",
                      "label": "string",
                      "latch": {
                        "enabled": true
                      }
                    }
                  ]
                }
              },
              "numberFormat": {
                "sigFigs": 1,
                "displayOption": "SCIENTIFIC",
                "fixedDecimalPlaces": 1,
                "decimalPlaces": {
                  "type": "fixed",
                  "fixed": {
                    "places": 1
                  }
                }
              },
              "groupBySort": {
                "type": "value",
                "value": {
                  "isDescending": true
                }
              }
            },
            "staleness": {
              "visualisation": {
                "type": "raw",
                "raw": {
                  "thresholds": [
                    {
                      "value": 1,
                      "color": "string",
                      "label": "string",
                      "latch": {
                        "enabled": true
                      }
                    }
                  ]
                }
              },
              "groupBySort": {
                "type": "value",
                "value": {
                  "isDescending": true
                }
              }
            },
            "numericArray": {
              "visualisation": {
                "type": "raw",
                "raw": {}
              },
              "numberFormat": {
                "sigFigs": 1,
                "displayOption": "SCIENTIFIC",
                "fixedDecimalPlaces": 1,
                "decimalPlaces": {
                  "type": "fixed",
                  "fixed": {
                    "places": 1
                  }
                }
              }
            },
            "enumArray": {
              "visualisation": {
                "type": "raw",
                "raw": {}
              }
            },
            "struct": {
              "visualisation": {
                "type": "raw",
                "raw": {}
              }
            }
          },
          "columnConfigs": [
            {
              "position": 1,
              "header": "string",
              "cellConfig": {
                "range": {
                  "visualisation": {
                    "type": "raw",
                    "raw": {
                      "rangeColor": "string",
                      "rangeLabel": "string",
                      "noRangeColor": "string",
                      "noRangeLabel": "string"
                    }
                  },
                  "groupBySort": {
                    "type": "value",
                    "value": {
                      "isDescending": true
                    }
                  }
                },
                "enum": {
                  "visualisation": {
                    "type": "raw",
                    "raw": {
                      "colorMap": {
                        "key": "string"
                      }
                    }
                  },
                  "groupBySort": {
                    "type": "custom",
                    "custom": {
                      "order": [
                        "string"
                      ]
                    }
                  }
                },
                "numeric": {
                  "visualisation": {
                    "type": "raw",
                    "raw": {
                      "thresholds": [
                        {
                          "value": 1,
                          "color": "string",
                          "label": "string",
                          "latch": {
                            "enabled": true
                          }
                        }
                      ]
                    }
                  },
                  "numberFormat": {
                    "sigFigs": 1,
                    "displayOption": "SCIENTIFIC",
                    "fixedDecimalPlaces": 1,
                    "decimalPlaces": {
                      "type": "fixed",
                      "fixed": {
                        "places": 1
                      }
                    }
                  },
                  "groupBySort": {
                    "type": "value",
                    "value": {
                      "isDescending": true
                    }
                  }
                },
                "staleness": {
                  "visualisation": {
                    "type": "raw",
                    "raw": {
                      "thresholds": [
                        {
                          "value": 1,
                          "color": "string",
                          "label": "string",
                          "latch": {
                            "enabled": true
                          }
                        }
                      ]
                    }
                  },
                  "groupBySort": {
                    "type": "value",
                    "value": {
                      "isDescending": true
                    }
                  }
                },
                "numericArray": {
                  "visualisation": {
                    "type": "raw",
                    "raw": {}
                  },
                  "numberFormat": {
                    "sigFigs": 1,
                    "displayOption": "SCIENTIFIC",
                    "fixedDecimalPlaces": 1,
                    "decimalPlaces": {
                      "type": "fixed",
                      "fixed": {
                        "places": 1
                      }
                    }
                  }
                },
                "enumArray": {
                  "visualisation": {
                    "type": "raw",
                    "raw": {}
                  }
                },
                "struct": {
                  "visualisation": {
                    "type": "raw",
                    "raw": {}
                  }
                }
              }
            }
          ],
          "rowConfigs": [
            {
              "position": 1,
              "header": "string",
              "cellConfig": {
                "range": {
                  "visualisation": {
                    "type": "raw",
                    "raw": {
                      "rangeColor": "string",
                      "rangeLabel": "string",
                      "noRangeColor": "string",
                      "noRangeLabel": "string"
                    }
                  },
                  "groupBySort": {
                    "type": "value",
                    "value": {
                      "isDescending": true
                    }
                  }
                },
                "enum": {
                  "visualisation": {
                    "type": "raw",
                    "raw": {
                      "colorMap": {
                        "key": "string"
                      }
                    }
                  },
                  "groupBySort": {
                    "type": "custom",
                    "custom": {
                      "order": [
                        "string"
                      ]
                    }
                  }
                },
                "numeric": {
                  "visualisation": {
                    "type": "raw",
                    "raw": {
                      "thresholds": [
                        {
                          "value": 1,
                          "color": "string",
                          "label": "string",
                          "latch": {
                            "enabled": true
                          }
                        }
                      ]
                    }
                  },
                  "numberFormat": {
                    "sigFigs": 1,
                    "displayOption": "SCIENTIFIC",
                    "fixedDecimalPlaces": 1,
                    "decimalPlaces": {
                      "type": "fixed",
                      "fixed": {
                        "places": 1
                      }
                    }
                  },
                  "groupBySort": {
                    "type": "value",
                    "value": {
                      "isDescending": true
                    }
                  }
                },
                "staleness": {
                  "visualisation": {
                    "type": "raw",
                    "raw": {
                      "thresholds": [
                        {
                          "value": 1,
                          "color": "string",
                          "label": "string",
                          "latch": {
                            "enabled": true
                          }
                        }
                      ]
                    }
                  },
                  "groupBySort": {
                    "type": "value",
                    "value": {
                      "isDescending": true
                    }
                  }
                },
                "numericArray": {
                  "visualisation": {
                    "type": "raw",
                    "raw": {}
                  },
                  "numberFormat": {
                    "sigFigs": 1,
                    "displayOption": "SCIENTIFIC",
                    "fixedDecimalPlaces": 1,
                    "decimalPlaces": {
                      "type": "fixed",
                      "fixed": {
                        "places": 1
                      }
                    }
                  }
                },
                "enumArray": {
                  "visualisation": {
                    "type": "raw",
                    "raw": {}
                  }
                },
                "struct": {
                  "visualisation": {
                    "type": "raw",
                    "raw": {}
                  }
                }
              }
            }
          ],
          "rowCount": 1,
          "columnCount": 1,
          "cells": [
            {
              "row": 1,
              "column": 1,
              "cell": {
                "variableName": "string",
                "uuid": "string",
                "config": {
                  "type": "numeric",
                  "numeric": {
                    "visualisation": {
                      "type": "raw",
                      "raw": {
                        "thresholds": [
                          {
                            "value": 1,
                            "color": "string",
                            "label": "string",
                            "latch": {
                              "enabled": true
                            }
                          }
                        ]
                      }
                    },
                    "numberFormat": {
                      "sigFigs": 1,
                      "displayOption": "SCIENTIFIC",
                      "fixedDecimalPlaces": 1,
                      "decimalPlaces": {
                        "type": "fixed",
                        "fixed": {
                          "places": 1
                        }
                      }
                    },
                    "groupBySort": {
                      "type": "value",
                      "value": {
                        "isDescending": true
                      }
                    }
                  }
                }
              }
            }
          ]
        }
      }
    },
    "ValueTableMultiCellConfig": {
      "description": "Configurations for each type of cell in a grouping of heterogenous cells, such as for a row, for a column, or for the entire grid.",
      "type": "object",
      "properties": {
        "range": {
          "$ref": "#/definitions/RangeCellConfig"
        },
        "enum": {
          "$ref": "#/definitions/EnumCellConfig"
        },
        "numeric": {
          "$ref": "#/definitions/NumericCellConfig"
        },
        "staleness": {
          "$ref": "#/definitions/StalenessCellConfig"
        },
        "numericArray": {
          "$ref": "#/definitions/NumericArrayCellConfig"
        },
        "enumArray": {
          "$ref": "#/definitions/EnumArrayCellConfig"
        },
        "struct": {
          "$ref": "#/definitions/StructCellConfig"
        }
      }
    },
    "ValueTableStalenessConfig": {
      "description": "Configuration for showing staleness of values while streaming",
      "type": "object",
      "properties": {
        "hideStaleness": {
          "type": "boolean",
          "description": "If true, will not show any indication of staleness. Defaults to false"
        }
      }
    },
    "ValueToColorMap": {
      "description": "Color interpolations for numeric and enum values.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "numeric",
            "numericPreset",
            "enum"
          ]
        },
        "numeric": {
          "type": "object",
          "additionalProperties": {
            "type": "number",
            "format": "double"
          },
          "x-map-key": "HexColor"
        },
        "numericPreset": {
          "$ref": "#/definitions/NumericPresetColorRange"
        },
        "enum": {
          "type": "object",
          "additionalProperties": {
            "type": "string",
            "x-alias": "HexColor"
          }
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "numeric",
        "numeric": {
          "key": 1
        }
      }
    },
    "Valve": {
      "description": "The valve variation to render, with variation-specific configuration.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "standard",
            "relief",
            "check"
          ]
        },
        "standard": {
          "$ref": "#/definitions/StandardValve"
        },
        "relief": {
          "$ref": "#/definitions/ReliefValve"
        },
        "check": {
          "$ref": "#/definitions/CheckValve"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "standard",
        "standard": {
          "normalPosition": {
            "type": "normallyOpen",
            "normallyOpen": {}
          },
          "feedback": {
            "stateMappings": [
              {
                "state": "OPEN",
                "condition": {
                  "allOf": [
                    {
                      "variableName": "string",
                      "predicate": {
                        "type": "number",
                        "number": {
                          "type": "equals",
                          "equals": 1
                        }
                      }
                    }
                  ]
                }
              }
            ]
          },
          "commanding": {
            "actions": [
              {
                "label": "string",
                "action": {
                  "type": "sendCommands",
                  "sendCommands": {
                    "commands": [
                      {
                        "variableName": "string",
                        "value": {
                          "type": "floatValue",
                          "floatValue": 1
                        }
                      }
                    ]
                  }
                },
                "confirmation": {
                  "title": "string",
                  "description": "string",
                  "confirmLabel": "string"
                }
              }
            ]
          }
        }
      }
    },
    "ValveCommanding": {
      "type": "object",
      "properties": {
        "actions": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/VizActionOption"
          },
          "description": "Up to 32 choices in menu order. Clicking opens the menu; explicit selection executes only that choice's batch. All choices remain available regardless of feedback state."
        }
      }
    },
    "ValveFeedback": {
      "type": "object",
      "properties": {
        "stateMappings": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/ValveStateRule"
          },
          "description": "Up to 8 rules evaluated in menu order; first match wins. Missing, non-finite, stale, or unmatched feedback renders unknown."
        }
      }
    },
    "ValveInputPredicate": {
      "type": "object",
      "properties": {
        "variableName": {
          "type": "string",
          "x-alias": "ChannelVariableName",
          "description": "Workbook channel variable providing numeric valve feedback."
        },
        "predicate": {
          "$ref": "#/definitions/ValuePredicate"
        }
      },
      "required": [
        "variableName",
        "predicate"
      ]
    },
    "ValveNormalPosition": {
      "description": "The valve's position when not powered.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "normallyOpen",
            "normallyClosed"
          ]
        },
        "normallyOpen": {
          "$ref": "#/definitions/NormallyOpenValvePosition"
        },
        "normallyClosed": {
          "$ref": "#/definitions/NormallyClosedValvePosition"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "normallyOpen",
        "normallyOpen": {}
      }
    },
    "ValveState": {
      "type": "string",
      "enum": [
        "OPEN",
        "CLOSED"
      ]
    },
    "ValveStateCondition": {
      "description": "Conjunction of one or more input predicates. All predicates must match at the same evaluation timestamp for the condition to match.",
      "type": "object",
      "properties": {
        "allOf": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/ValveInputPredicate"
          },
          "description": "Must contain between 1 and 8 predicates."
        }
      }
    },
    "ValveStateRule": {
      "type": "object",
      "properties": {
        "state": {
          "$ref": "#/definitions/ValveState"
        },
        "condition": {
          "$ref": "#/definitions/ValveStateCondition"
        }
      },
      "required": [
        "state",
        "condition"
      ]
    },
    "ValveVizDefinition": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "v1"
          ]
        },
        "v1": {
          "$ref": "#/definitions/ValveVizDefinitionV1"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "v1",
        "v1": {
          "title": "string",
          "valve": {
            "type": "standard",
            "standard": {
              "normalPosition": {
                "type": "normallyOpen",
                "normallyOpen": {}
              },
              "feedback": {
                "stateMappings": [
                  {
                    "state": "OPEN",
                    "condition": {
                      "allOf": [
                        {
                          "variableName": "string",
                          "predicate": {
                            "type": "number",
                            "number": {
                              "type": "equals",
                              "equals": 1
                            }
                          }
                        }
                      ]
                    }
                  }
                ]
              },
              "commanding": {
                "actions": [
                  {
                    "label": "string",
                    "action": {
                      "type": "sendCommands",
                      "sendCommands": {
                        "commands": [
                          {
                            "variableName": "string",
                            "value": {
                              "type": "floatValue",
                              "floatValue": 1
                            }
                          }
                        ]
                      }
                    },
                    "confirmation": {
                      "title": "string",
                      "description": "string",
                      "confirmLabel": "string"
                    }
                  }
                ]
              }
            }
          },
          "rotationDegrees": 1
        }
      }
    },
    "ValveVizDefinitionV1": {
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "description": "The label displayed on the valve."
        },
        "valve": {
          "$ref": "#/definitions/Valve"
        },
        "rotationDegrees": {
          "type": "integer",
          "format": "int32",
          "description": "Clockwise rotation in degrees. Multiples of 90; absent means no rotation."
        }
      },
      "required": [
        "valve"
      ]
    },
    "VariableStaticOrChannel": {
      "description": "Variable to store either a static numerical value or channel string name.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "staticNumeric"
          ]
        },
        "staticNumeric": {
          "type": "number",
          "format": "double"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "staticNumeric",
        "staticNumeric": 1
      }
    },
    "Vec3d": {
      "description": "A three-dimensional Cartesian vector.",
      "type": "object",
      "properties": {
        "x": {
          "type": "number",
          "format": "double"
        },
        "y": {
          "type": "number",
          "format": "double"
        },
        "z": {
          "type": "number",
          "format": "double"
        }
      },
      "required": [
        "x",
        "y",
        "z"
      ]
    },
    "VerticalTank": {
      "type": "object",
      "properties": {}
    },
    "VideoPanelDataSource": {
      "description": "Enhanced video panel data source to be compatible with multiple assets",
      "type": "object",
      "properties": {
        "runRid": {
          "type": "string",
          "format": "rid",
          "x-alias": "RunRid"
        },
        "assetRid": {
          "type": "string",
          "format": "rid",
          "x-alias": "AssetRid"
        },
        "refName": {
          "type": "string",
          "x-alias": "DataSourceRefName"
        }
      },
      "required": [
        "assetRid",
        "refName"
      ]
    },
    "VideoVizDefinition": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "v1",
            "v2"
          ]
        },
        "v1": {
          "$ref": "#/definitions/VideoVizDefinitionV1"
        },
        "v2": {
          "$ref": "#/definitions/VideoVizDefinitionV2"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "v1",
        "v1": {
          "events": [
            {
              "displayName": "string",
              "eventUuid": "string",
              "isPinned": true
            }
          ],
          "comparisonRunGroups": [
            {
              "uuid": "string",
              "name": "string",
              "offset": {
                "value": 1,
                "unit": "DAYS"
              },
              "offsetAnchor": {
                "type": "run",
                "run": {}
              },
              "runs": [
                {
                  "runRid": "string",
                  "enabled": true,
                  "offsetOverride": {
                    "value": 1,
                    "unit": "DAYS"
                  }
                }
              ],
              "color": "string"
            }
          ],
          "title": "string",
          "refName": "string",
          "datasource": {
            "runRid": "string",
            "assetRid": "string",
            "refName": "string"
          }
        }
      }
    },
    "VideoVizDefinitionV1": {
      "type": "object",
      "properties": {
        "events": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Event"
          },
          "x-deprecated": "Please use the workbook's eventRefs field instead."
        },
        "comparisonRunGroups": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/ComparisonRunGroup"
          }
        },
        "title": {
          "type": "string"
        },
        "refName": {
          "type": "string",
          "x-alias": "DataSourceRefName",
          "x-deprecated": "Datasource field will be preferred over refName field to support multiple assets."
        },
        "datasource": {
          "$ref": "#/definitions/VideoPanelDataSource"
        }
      }
    },
    "VideoVizDefinitionV2": {
      "description": "Stores a video as a variable rather than the deprecated video datasource rid.",
      "type": "object",
      "properties": {
        "title": {
          "type": "string"
        },
        "variable": {
          "type": "string",
          "x-alias": "ChannelVariableName"
        },
        "annotations": {
          "type": "array",
          "items": {
            "type": "string",
            "x-alias": "ChannelVariableName"
          },
          "description": "Workbook variables bound to this panel's image-annotation overlay: struct-typed channels whose samples are messages drawn over the video image."
        }
      },
      "required": [
        "variable"
      ]
    },
    "VizAction": {
      "description": "The action a visualization performs when activated by the user.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "sendCommands"
          ]
        },
        "sendCommands": {
          "$ref": "#/definitions/SendCommandsAction"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "sendCommands",
        "sendCommands": {
          "commands": [
            {
              "variableName": "string",
              "value": {
                "type": "floatValue",
                "floatValue": 1
              }
            }
          ]
        }
      }
    },
    "VizActionOption": {
      "description": "A labeled action the user can select from a visualization's action menu.",
      "type": "object",
      "properties": {
        "label": {
          "type": "string",
          "description": "Menu label; must be non-empty and at most 128 characters."
        },
        "action": {
          "$ref": "#/definitions/VizAction"
        },
        "confirmation": {
          "allOf": [
            {
              "$ref": "#/definitions/CommandConfirmation"
            }
          ],
          "description": "If present, require explicit confirmation after selection and before execution."
        }
      },
      "required": [
        "label",
        "action"
      ]
    },
    "VizCommand": {
      "type": "object",
      "properties": {
        "variableName": {
          "type": "string",
          "x-alias": "ChannelVariableName",
          "description": "Workbook channel variable naming the commandable series. Must resolve to a physical series (VariableLocator.series); looked up in the workbook's channel-variable map at activation time."
        },
        "value": {
          "$ref": "#/definitions/CommandValue"
        }
      },
      "required": [
        "variableName",
        "value"
      ]
    },
    "VizDefinition": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "boundary",
            "burstDisc",
            "button",
            "cartesian",
            "checklist",
            "endNode",
            "frequency",
            "geo",
            "geo3d",
            "heatExchanger",
            "histogram",
            "image",
            "instrument",
            "log",
            "markdown",
            "numberInput",
            "orifice",
            "plotly",
            "procedure",
            "pump",
            "regulator",
            "shape",
            "tank",
            "thrustChamber",
            "timeSeries",
            "timeSeriesTable",
            "valueTable",
            "valve",
            "video"
          ]
        },
        "boundary": {
          "$ref": "#/definitions/BoundaryVizDefinition"
        },
        "burstDisc": {
          "$ref": "#/definitions/BurstDiscVizDefinition"
        },
        "button": {
          "$ref": "#/definitions/ButtonVizDefinition"
        },
        "cartesian": {
          "$ref": "#/definitions/CartesianChartDefinition"
        },
        "checklist": {
          "$ref": "#/definitions/ChecklistChartDefinition"
        },
        "endNode": {
          "$ref": "#/definitions/EndNodeVizDefinition"
        },
        "frequency": {
          "$ref": "#/definitions/FrequencyChartDefinition"
        },
        "geo": {
          "$ref": "#/definitions/GeoVizDefinition"
        },
        "geo3d": {
          "$ref": "#/definitions/Geo3dDefinition"
        },
        "heatExchanger": {
          "$ref": "#/definitions/HeatExchangerVizDefinition"
        },
        "histogram": {
          "$ref": "#/definitions/HistogramChartDefinition"
        },
        "image": {
          "$ref": "#/definitions/ImageVizDefinition"
        },
        "instrument": {
          "$ref": "#/definitions/InstrumentVizDefinition"
        },
        "log": {
          "$ref": "#/definitions/LogPanelDefinition"
        },
        "markdown": {
          "$ref": "#/definitions/MarkdownPanelDefinition"
        },
        "numberInput": {
          "$ref": "#/definitions/NumberInputVizDefinition"
        },
        "orifice": {
          "$ref": "#/definitions/OrificeVizDefinition"
        },
        "plotly": {
          "$ref": "#/definitions/PlotlyPanelDefinition"
        },
        "procedure": {
          "$ref": "#/definitions/ProcedureVizDefinition"
        },
        "pump": {
          "$ref": "#/definitions/PumpVizDefinition"
        },
        "regulator": {
          "$ref": "#/definitions/RegulatorVizDefinition"
        },
        "shape": {
          "$ref": "#/definitions/ShapeVizDefinition"
        },
        "tank": {
          "$ref": "#/definitions/TankVizDefinition"
        },
        "thrustChamber": {
          "$ref": "#/definitions/ThrustChamberVizDefinition"
        },
        "timeSeries": {
          "$ref": "#/definitions/TimeSeriesChartDefinition"
        },
        "timeSeriesTable": {
          "$ref": "#/definitions/TimeSeriesTablePanelDefinition"
        },
        "valueTable": {
          "$ref": "#/definitions/ValueTableDefinition"
        },
        "valve": {
          "$ref": "#/definitions/ValveVizDefinition"
        },
        "video": {
          "$ref": "#/definitions/VideoVizDefinition"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "boundary",
        "boundary": {
          "type": "v1",
          "v1": {
            "title": "string",
            "type": {
              "type": "source",
              "source": {}
            },
            "fillColor": "string"
          }
        }
      }
    },
    "ComparisonRun": {
      "type": "object",
      "properties": {
        "runRid": {
          "type": "string",
          "format": "rid",
          "x-alias": "RunRid"
        },
        "enabled": {
          "type": "boolean"
        },
        "offsetOverride": {
          "$ref": "#/definitions/comparisonrun.api.Offset"
        }
      },
      "required": [
        "runRid",
        "enabled"
      ]
    },
    "ComparisonRunGroup": {
      "type": "object",
      "properties": {
        "uuid": {
          "type": "string",
          "format": "uuid"
        },
        "name": {
          "type": "string"
        },
        "offset": {
          "$ref": "#/definitions/comparisonrun.api.Offset"
        },
        "offsetAnchor": {
          "$ref": "#/definitions/OffsetAnchor"
        },
        "runs": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/ComparisonRun"
          }
        },
        "color": {
          "type": "string",
          "x-alias": "HexColor"
        }
      },
      "required": [
        "uuid",
        "name",
        "offset",
        "offsetAnchor"
      ]
    },
    "comparisonrun.api.Offset": {
      "type": "object",
      "properties": {
        "value": {
          "type": "integer",
          "format": "int64"
        },
        "unit": {
          "$ref": "#/definitions/TimeUnit"
        }
      },
      "required": [
        "value",
        "unit"
      ]
    },
    "OffsetAnchor": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "run",
            "series"
          ]
        },
        "run": {
          "$ref": "#/definitions/OffsetRunAnchor"
        },
        "series": {
          "$ref": "#/definitions/OffsetSeriesAnchor"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "run",
        "run": {}
      }
    },
    "OffsetRunAnchor": {
      "type": "object",
      "properties": {}
    },
    "OffsetSeriesAnchor": {
      "type": "object",
      "properties": {
        "seriesVariable": {
          "type": "string",
          "x-alias": "ChannelVariableName"
        }
      },
      "required": [
        "seriesVariable"
      ]
    },
    "Abs": {
      "description": "Computes the absolute value of each point in the series.",
      "type": "object",
      "properties": {
        "x": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericSeries"
            }
          ],
          "description": "Input numeric series."
        }
      },
      "required": [
        "x"
      ]
    },
    "AbsoluteThreshold": {
      "description": "Threshold defined as a real number corresponding the unit of a series.",
      "type": "object",
      "properties": {
        "value": {
          "allOf": [
            {
              "$ref": "#/definitions/DoubleConstant"
            }
          ],
          "description": "Allowed spread, in the series' own unit."
        }
      },
      "required": [
        "value"
      ]
    },
    "AbsoluteTimestampSeries": {
      "description": "Replaces values in a series with the absolute timestamps.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/Series"
        },
        "timeUnit": {
          "allOf": [
            {
              "$ref": "#/definitions/TimeUnit"
            }
          ],
          "description": "The time unit used to define the output values. Throws an error if nanosecond or finer."
        }
      },
      "required": [
        "input",
        "timeUnit"
      ]
    },
    "Acos": {
      "description": "Computes the arccosine of each value, returning radians.",
      "type": "object",
      "properties": {
        "x": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericSeries"
            }
          ],
          "description": "Input numeric series (values in [-1, 1])."
        }
      },
      "required": [
        "x"
      ]
    },
    "Add": {
      "description": "Adds two numeric series pointwise.",
      "type": "object",
      "properties": {
        "left": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericSeries"
            }
          ],
          "description": "Left-hand operand."
        },
        "right": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericSeries"
            }
          ],
          "description": "Right-hand operand."
        }
      },
      "required": [
        "left",
        "right"
      ]
    },
    "AfterPersistenceWindow": {
      "description": "The first point in the output range will be the first point after the condition has been true for the min duration and min points.",
      "type": "object",
      "properties": {}
    },
    "AggregateEnumSeries": {
      "description": "Aggregates values with duplicate timestamps in the input series values into a single value using the specified aggregation function.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/EnumSeries"
        },
        "function": {
          "$ref": "#/definitions/EnumAggregationFunction"
        }
      },
      "required": [
        "input",
        "function"
      ]
    },
    "AggregateNumericSeries": {
      "description": "DEPRECATED. Use a dedicated group-by-and-aggregate nodes instead.\n\nAggregates values with duplicate timestamps in the input series values into a single value using the specified aggregation function.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/NumericSeries"
        },
        "function": {
          "$ref": "#/definitions/NumericAggregationFunction"
        },
        "groupByTags": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/StringConstant"
          },
          "uniqueItems": true,
          "description": "Tags to group by for the aggregation. If left empty, the tags to group by will be equivalent to those in the input series. If specified, the result will be grouped ONLY by the specified tags. The tags specified here MUST be a (non-strict) subset of the input series's group by tags."
        },
        "aggregateByAllGroupings": {
          "type": "boolean",
          "description": "This field's purpose is to distinguish between the two flavors of groupByTags being empty. It has no effect when groupByTags is non-empty. When true and groupByTags is empty, aggregate across all series in the input. When false and groupByTags is empty, the result will be grouped by the same tags as the input series."
        },
        "interpolationConfiguration": {
          "allOf": [
            {
              "$ref": "#/definitions/InterpolationConfiguration"
            }
          ],
          "description": "If provided, interpolates values at timestamps where the input series has values before aggregating. If not provided, only aggregates when timestamps match exactly (existing behavior).",
          "x-deprecated": "Setting interpolation on this node is deprecated."
        }
      },
      "required": [
        "input",
        "function"
      ]
    },
    "AggregateUnderRangesSeries": {
      "description": "Aggregates the input series under the ranges in the provided ranges series, and outputs a new series with one point at the start of each range, where the value is the aggregation result. If a range has no points, no point will be produced for it. If a range has no start, the point produced for it will be at the start of the compute request range.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/NumericSeries"
        },
        "ranges": {
          "$ref": "#/definitions/RangeSeries"
        },
        "operation": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericAggregationFunction"
            }
          ],
          "x-deprecated": "Use a dedicated group-by-and-aggregate node instead (coming in a follow-up PR). This field is retained as required for backwards compatibility with existing callers."
        }
      },
      "required": [
        "input",
        "ranges",
        "operation"
      ]
    },
    "AggregationBuilder": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "rollingTime",
            "rollingPoints",
            "groupBy"
          ]
        },
        "rollingTime": {
          "$ref": "#/definitions/RollingTimeAggregationBuilder"
        },
        "rollingPoints": {
          "$ref": "#/definitions/RollingPointsAggregationBuilder"
        },
        "groupBy": {
          "$ref": "#/definitions/GroupByAggregationBuilder"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "rollingTime",
        "rollingTime": {
          "input": {
            "type": "raw",
            "raw": {
              "name": "string"
            }
          },
          "window": {
            "type": "reference",
            "reference": {
              "name": "string"
            }
          }
        }
      }
    },
    "Alignment": {
      "description": "Specifies how to set the timestamp grid for multi-input operations.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "driverSeries",
            "union"
          ]
        },
        "driverSeries": {
          "$ref": "#/definitions/DriverSeries"
        },
        "union": {
          "$ref": "#/definitions/Union"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "driverSeries",
        "driverSeries": {}
      }
    },
    "AlignmentConfiguration": {
      "type": "object",
      "properties": {
        "interpolationConfiguration": {
          "allOf": [
            {
              "$ref": "#/definitions/InterpolationConfiguration"
            }
          ],
          "description": "The interpolation rules to use when aligning the non-driver series."
        },
        "driverSeries": {
          "allOf": [
            {
              "$ref": "#/definitions/AlignmentDriverSeries"
            }
          ],
          "description": "The series whose timestamps drive alignment."
        }
      },
      "required": [
        "interpolationConfiguration",
        "driverSeries"
      ]
    },
    "AlignmentDriverSeries": {
      "type": "string",
      "enum": [
        "FIRST",
        "SECOND"
      ]
    },
    "AllowNegativeValues": {
      "type": "object",
      "properties": {}
    },
    "AnchorAlignedDataset": {
      "description": "Aligns each anchored portion of the input dataset onto a common anchor timestamp while preserving grouping tags. Without a `reference` the selected anchor becomes timestamp zero, so the output is in a relative time domain; with a `reference` the anchors are aligned onto the referenced portion's anchor and the output stays in the input's absolute time domain. Currently run boundary, event, and range anchors are supported, and every storage-backed leaf of the input must resolve to run-backed branches.",
      "type": "object",
      "properties": {
        "input": {
          "allOf": [
            {
              "$ref": "#/definitions/Dataset"
            }
          ],
          "description": "The dataset to align."
        },
        "anchor": {
          "allOf": [
            {
              "$ref": "#/definitions/DatasetAnchor"
            }
          ],
          "description": "Selects the timestamp each anchored portion of the input is aligned by."
        },
        "reference": {
          "allOf": [
            {
              "$ref": "#/definitions/AnchorReference"
            }
          ],
          "description": "When present, each anchor is aligned onto the referenced anchor timestamp instead of onto timestamp zero, so output remains in the input's absolute time domain and the referenced portion is unshifted. When absent, the selected anchor becomes timestamp zero."
        }
      },
      "required": [
        "input",
        "anchor"
      ]
    },
    "AnchorReference": {
      "description": "Selects the anchor timestamp every other anchor is aligned onto.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "earliestAnchor"
          ]
        },
        "earliestAnchor": {
          "allOf": [
            {
              "$ref": "#/definitions/EarliestAnchorReference"
            }
          ],
          "description": "Aligns every anchor onto the earliest anchor resolved from the input, so the earliest-anchored run is unshifted and every other run shifts backwards onto it."
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "earliestAnchor",
        "earliestAnchor": {}
      }
    },
    "AndSeries": {
      "description": "Combines two boolean series point-wise using logical AND, producing true where both inputs are true and false otherwise.",
      "type": "object",
      "properties": {
        "left": {
          "$ref": "#/definitions/BooleanSeries"
        },
        "right": {
          "$ref": "#/definitions/BooleanSeries"
        }
      },
      "required": [
        "left",
        "right"
      ]
    },
    "ApproximateThresholdOperator": {
      "type": "string",
      "enum": [
        "EQUAL_TO",
        "NOT_EQUAL_TO"
      ]
    },
    "ApproximateThresholdRanges": {
      "description": "Produces a list of ranges for which the threshold condition is satisfied.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/NumericSeries"
        },
        "threshold": {
          "$ref": "#/definitions/DoubleConstant"
        },
        "tolerance": {
          "$ref": "#/definitions/DoubleConstant"
        },
        "operator": {
          "$ref": "#/definitions/ApproximateThresholdOperator"
        },
        "persistenceWindowConfiguration": {
          "$ref": "#/definitions/PersistenceWindowConfiguration"
        }
      },
      "required": [
        "input",
        "threshold",
        "tolerance",
        "operator"
      ]
    },
    "ArithmeticSeries": {
      "type": "object",
      "properties": {
        "inputs": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/NumericSeries"
          },
          "x-map-key": "LocalVariableName"
        },
        "expression": {
          "type": "string"
        },
        "interpolationConfiguration": {
          "allOf": [
            {
              "$ref": "#/definitions/InterpolationConfiguration"
            }
          ],
          "description": "Defaults to forward fill interpolation with a 1s interpolation radius",
          "x-deprecated": "Setting interpolation on this node is deprecated."
        }
      },
      "required": [
        "expression"
      ]
    },
    "ArraySeries": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "numeric1d",
            "enum1d"
          ]
        },
        "numeric1d": {
          "$ref": "#/definitions/Numeric1dArraySeries"
        },
        "enum1d": {
          "$ref": "#/definitions/Enum1dArraySeries"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "numeric1d",
        "numeric1d": {
          "type": "channel",
          "channel": {
            "type": "dataSource",
            "dataSource": {
              "dataSourceRid": {
                "type": "literal",
                "literal": "string"
              },
              "channel": {
                "type": "literal",
                "literal": "string"
              },
              "tags": {
                "key": {
                  "type": "literal",
                  "literal": "string"
                }
              },
              "tagFilters": {
                "type": "single",
                "single": {
                  "key": {
                    "type": "literal",
                    "literal": "string"
                  },
                  "values": [
                    {
                      "type": "literal",
                      "literal": "string"
                    }
                  ],
                  "operator": "IN"
                }
              },
              "tagsToGroupBy": [
                "string"
              ],
              "groupByTags": [
                {
                  "type": "literal",
                  "literal": "string"
                }
              ]
            }
          }
        }
      }
    },
    "Asin": {
      "description": "Computes the arcsine of each value, returning radians.",
      "type": "object",
      "properties": {
        "x": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericSeries"
            }
          ],
          "description": "Input numeric series (values in [-1, 1])."
        }
      },
      "required": [
        "x"
      ]
    },
    "Asset": {
      "description": "Asset reference for `Dataset.asset`. The `rid` field accepts either a literal asset RID or a `StringConstant` reference resolved from `Context`.",
      "type": "object",
      "properties": {
        "rid": {
          "allOf": [
            {
              "$ref": "#/definitions/StringConstant"
            }
          ],
          "description": "Resource identifier of an asset"
        }
      },
      "required": [
        "rid"
      ]
    },
    "AssetChannel": {
      "type": "object",
      "properties": {
        "assetRid": {
          "$ref": "#/definitions/StringConstant"
        },
        "dataScopeName": {
          "allOf": [
            {
              "$ref": "#/definitions/StringConstant"
            }
          ],
          "description": "Used to disambiguate when multiple data scopes within this asset contain channels with the same name."
        },
        "channel": {
          "$ref": "#/definitions/StringConstant"
        },
        "additionalTags": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/StringConstant"
          },
          "x-deprecated": "Use additionalTagFilters"
        },
        "additionalTagFilters": {
          "allOf": [
            {
              "$ref": "#/definitions/TagFilters"
            }
          ],
          "description": "Tags to filter the channel by, in addition to tag filters defined for a given Asset data scope. Throws on collisions with tag keys already defined for the given Asset data scope. Only returns points that match both sets of tag filters. For log series, include arg filters here in addition to tag filters."
        },
        "tagsToGroupBy": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "uniqueItems": true,
          "x-deprecated": "Use groupByTags instead. Throws if both tagsToGroupBy and groupByTags are specified."
        },
        "groupByTags": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/StringConstant"
          },
          "uniqueItems": true,
          "description": "Tags that the channel should be grouped by. If this is non-empty a grouped result will be returned with an entry for each grouping. Only one of tagsToGroupBy and groupByTags should be specified."
        }
      },
      "required": [
        "assetRid",
        "dataScopeName",
        "channel"
      ]
    },
    "AssetsSearchTarget": {
      "description": "Search assets. Each match expands to one grouping per data scope on that asset.",
      "type": "object",
      "properties": {
        "query": {
          "allOf": [
            {
              "$ref": "#/definitions/ResourceSearchQuery"
            }
          ],
          "description": "Predicate tree used to filter matching assets."
        }
      },
      "required": [
        "query"
      ]
    },
    "Atan2": {
      "description": "Computes the two-argument arctangent atan2(y, x) using signs to determine the quadrant.",
      "type": "object",
      "properties": {
        "y": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericSeries"
            }
          ],
          "description": "Y-coordinate series."
        },
        "x": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericSeries"
            }
          ],
          "description": "X-coordinate series."
        }
      },
      "required": [
        "y",
        "x"
      ]
    },
    "Average": {
      "description": "A average that gives the same weight to each observation inside the time window",
      "type": "object",
      "properties": {}
    },
    "BandPassConfiguration": {
      "type": "object",
      "properties": {
        "lowPassbandFrequency": {
          "$ref": "#/definitions/DoubleConstant"
        },
        "highPassbandFrequency": {
          "$ref": "#/definitions/DoubleConstant"
        }
      },
      "required": [
        "lowPassbandFrequency",
        "highPassbandFrequency"
      ]
    },
    "BandStopConfiguration": {
      "type": "object",
      "properties": {
        "lowStopbandFrequency": {
          "$ref": "#/definitions/DoubleConstant"
        },
        "highStopbandFrequency": {
          "$ref": "#/definitions/DoubleConstant"
        }
      },
      "required": [
        "lowStopbandFrequency",
        "highStopbandFrequency"
      ]
    },
    "BinaryArithmeticOperation": {
      "type": "string",
      "enum": [
        "ATAN2"
      ],
      "x-enum-descriptions": {
        "ATAN2": "Calculates the angle measure between the x-axis and a ray from the origin to a point (input2, input1) in radians. Note the order of arguments."
      }
    },
    "BinaryArithmeticSeries": {
      "description": "Applies a point-wise transformation to a pair of series.",
      "type": "object",
      "properties": {
        "input1": {
          "$ref": "#/definitions/NumericSeries"
        },
        "input2": {
          "$ref": "#/definitions/NumericSeries"
        },
        "operation": {
          "$ref": "#/definitions/BinaryArithmeticOperation"
        },
        "interpolationConfiguration": {
          "allOf": [
            {
              "$ref": "#/definitions/InterpolationConfiguration"
            }
          ],
          "description": "Defaults to forward fill interpolation with a 1s interpolation radius",
          "x-deprecated": "Setting interpolation on this node is deprecated."
        }
      },
      "required": [
        "input1",
        "input2",
        "operation"
      ]
    },
    "BitAnd": {
      "description": "Applies a bitwise AND between each value (cast to int64) and the operand.",
      "type": "object",
      "properties": {
        "input": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericSeries"
            }
          ],
          "description": "Input numeric series (values cast to int64)."
        },
        "operand": {
          "allOf": [
            {
              "$ref": "#/definitions/IntegerConstant"
            }
          ],
          "description": "The value to AND with each point."
        }
      },
      "required": [
        "input",
        "operand"
      ]
    },
    "BitAndFunction": {
      "type": "object",
      "properties": {
        "operand": {
          "type": "integer",
          "format": "int64"
        }
      },
      "required": [
        "operand"
      ]
    },
    "BitOperationFunction": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "and",
            "or",
            "xor",
            "shiftRight",
            "shiftLeft",
            "bitTest"
          ]
        },
        "and": {
          "$ref": "#/definitions/BitAndFunction"
        },
        "or": {
          "$ref": "#/definitions/BitOrFunction"
        },
        "xor": {
          "$ref": "#/definitions/BitXorFunction"
        },
        "shiftRight": {
          "$ref": "#/definitions/BitShiftRightFunction"
        },
        "shiftLeft": {
          "$ref": "#/definitions/BitShiftLeftFunction"
        },
        "bitTest": {
          "$ref": "#/definitions/BitTestFunction"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "and",
        "and": {
          "operand": 1
        }
      }
    },
    "BitOperationSeries": {
      "description": "Casts input series values to long before applying the bitwise operation.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/NumericSeries"
        },
        "function": {
          "$ref": "#/definitions/BitOperationFunction"
        }
      },
      "required": [
        "input",
        "function"
      ]
    },
    "BitOr": {
      "description": "Applies a bitwise OR between each value (cast to int64) and the operand.",
      "type": "object",
      "properties": {
        "input": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericSeries"
            }
          ],
          "description": "Input numeric series (values cast to int64)."
        },
        "operand": {
          "allOf": [
            {
              "$ref": "#/definitions/IntegerConstant"
            }
          ],
          "description": "The value to OR with each point."
        }
      },
      "required": [
        "input",
        "operand"
      ]
    },
    "BitOrFunction": {
      "type": "object",
      "properties": {
        "operand": {
          "type": "integer",
          "format": "int64"
        }
      },
      "required": [
        "operand"
      ]
    },
    "BitShiftLeft": {
      "description": "Left-shifts the bits in each value (cast to int64) by the given number of positions.",
      "type": "object",
      "properties": {
        "input": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericSeries"
            }
          ],
          "description": "Input numeric series (values cast to int64)."
        },
        "operand": {
          "allOf": [
            {
              "$ref": "#/definitions/IntegerConstant"
            }
          ],
          "description": "Number of positions to shift left."
        }
      },
      "required": [
        "input",
        "operand"
      ]
    },
    "BitShiftLeftFunction": {
      "description": "Shifts the bits in each value left according to the given operand.",
      "type": "object",
      "properties": {
        "operand": {
          "type": "integer",
          "format": "int32"
        }
      },
      "required": [
        "operand"
      ]
    },
    "BitShiftRight": {
      "description": "Right-shifts the bits in each value (cast to int64) by the given number of positions.",
      "type": "object",
      "properties": {
        "input": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericSeries"
            }
          ],
          "description": "Input numeric series (values cast to int64)."
        },
        "operand": {
          "allOf": [
            {
              "$ref": "#/definitions/IntegerConstant"
            }
          ],
          "description": "Number of positions to shift right."
        }
      },
      "required": [
        "input",
        "operand"
      ]
    },
    "BitShiftRightFunction": {
      "description": "Right shifts the bits in each value right according to the given operand.",
      "type": "object",
      "properties": {
        "operand": {
          "type": "integer",
          "format": "int32"
        }
      },
      "required": [
        "operand"
      ]
    },
    "BitTest": {
      "description": "Returns the bit at the specified index for each value (cast to int64), where index 0 is the least significant bit.",
      "type": "object",
      "properties": {
        "input": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericSeries"
            }
          ],
          "description": "Input numeric series (values cast to int64)."
        },
        "index": {
          "allOf": [
            {
              "$ref": "#/definitions/IntegerConstant"
            }
          ],
          "description": "Zero-based bit index, where 0 is the least significant bit."
        }
      },
      "required": [
        "input",
        "index"
      ]
    },
    "BitTestFunction": {
      "description": "Returns the bit at the specified index, where the right-most bit has index 0.",
      "type": "object",
      "properties": {
        "index": {
          "type": "integer",
          "format": "int32"
        }
      },
      "required": [
        "index"
      ]
    },
    "BitXor": {
      "description": "Applies a bitwise XOR between each value (cast to int64) and the operand.",
      "type": "object",
      "properties": {
        "input": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericSeries"
            }
          ],
          "description": "Input numeric series (values cast to int64)."
        },
        "operand": {
          "allOf": [
            {
              "$ref": "#/definitions/IntegerConstant"
            }
          ],
          "description": "The value to XOR with each point."
        }
      },
      "required": [
        "input",
        "operand"
      ]
    },
    "BitXorFunction": {
      "type": "object",
      "properties": {
        "operand": {
          "type": "integer",
          "format": "int64"
        }
      },
      "required": [
        "operand"
      ]
    },
    "BooleanRanges": {
      "description": "Produces ranges spanning the regions where a boolean input is true.\n\nThe condition is evaluated point-wise at each aligned timestamp; the numeric series it compares are aligned against each other the same way arithmetic between them would be.",
      "type": "object",
      "properties": {
        "input": {
          "allOf": [
            {
              "$ref": "#/definitions/BooleanSeries"
            }
          ],
          "description": "The condition whose true regions become ranges."
        },
        "minPoints": {
          "allOf": [
            {
              "$ref": "#/definitions/IntegerConstant"
            }
          ],
          "description": "Minimum number of matching points. Defaults to 1."
        },
        "minDuration": {
          "allOf": [
            {
              "$ref": "#/definitions/compute.api.Duration"
            }
          ],
          "description": "Minimum matching duration. Defaults to one nanosecond."
        },
        "rangeStart": {
          "allOf": [
            {
              "$ref": "#/definitions/RangeStart"
            }
          ],
          "description": "Selects whether the output begins at the first match or after persistence is satisfied."
        }
      },
      "required": [
        "input"
      ]
    },
    "BooleanSeries": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "greaterThan",
            "lessThan",
            "equalTo",
            "notEqualTo",
            "greaterThanOrEqualTo",
            "lessThanOrEqualTo",
            "and",
            "or"
          ]
        },
        "greaterThan": {
          "$ref": "#/definitions/GreaterThanSeries"
        },
        "lessThan": {
          "$ref": "#/definitions/LessThanSeries"
        },
        "equalTo": {
          "$ref": "#/definitions/EqualToSeries"
        },
        "notEqualTo": {
          "$ref": "#/definitions/NotEqualToSeries"
        },
        "greaterThanOrEqualTo": {
          "$ref": "#/definitions/GreaterThanOrEqualToSeries"
        },
        "lessThanOrEqualTo": {
          "$ref": "#/definitions/LessThanOrEqualToSeries"
        },
        "and": {
          "$ref": "#/definitions/AndSeries"
        },
        "or": {
          "$ref": "#/definitions/OrSeries"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "greaterThan",
        "greaterThan": {
          "left": {
            "type": "abs",
            "abs": {}
          },
          "right": {
            "type": "abs",
            "abs": {}
          }
        }
      }
    },
    "BuiltInCurveFit": {
      "description": "A closed-form curve fit (exponential, logarithmic, or power) of the enclosing target (`y`) against the chosen independent variable (`x`): either sample time (a `time` variable) or another series (a `numeric` variable).",
      "type": "object",
      "properties": {
        "independentVariable": {
          "allOf": [
            {
              "$ref": "#/definitions/CurveFitVariable"
            }
          ],
          "description": "The `x` axis the target is fit against — either relative sample time or another series."
        }
      },
      "required": [
        "independentVariable"
      ]
    },
    "BuiltinConstant": {
      "description": "A system-defined constant referenceable by name. The server resolves the symbol to its numeric value during query resolution.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "math",
            "physical"
          ]
        },
        "math": {
          "$ref": "#/definitions/MathConstant"
        },
        "physical": {
          "$ref": "#/definitions/PhysicalConstant"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "math",
        "math": "PI"
      }
    },
    "CategoricalEqualityRangesV2": {
      "description": "Produces ranges where all categorical inputs are equal or are not all equal.",
      "type": "object",
      "properties": {
        "inputs": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/EnumSeries"
          },
          "description": "The series compared against each other. At least two are required."
        },
        "minPoints": {
          "allOf": [
            {
              "$ref": "#/definitions/IntegerConstant"
            }
          ],
          "description": "Minimum number of matching points. Defaults to 1."
        },
        "minDuration": {
          "allOf": [
            {
              "$ref": "#/definitions/compute.api.Duration"
            }
          ],
          "description": "Minimum matching duration. Defaults to one nanosecond."
        },
        "rangeStart": {
          "allOf": [
            {
              "$ref": "#/definitions/RangeStart"
            }
          ],
          "description": "Selects whether the output begins at the first match or after persistence is satisfied."
        },
        "equalityOperator": {
          "$ref": "#/definitions/EqualityOperator"
        }
      },
      "required": [
        "equalityOperator"
      ]
    },
    "CategoricalOnChangeRangesV2": {
      "description": "Produces a zero-duration range whenever a categorical input changes value.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/EnumSeries"
        }
      },
      "required": [
        "input"
      ]
    },
    "CategoricalStaleRangesV2": {
      "description": "Produces ranges where a categorical input has no data for at least a duration.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/EnumSeries"
        },
        "threshold": {
          "allOf": [
            {
              "$ref": "#/definitions/compute.api.Duration"
            }
          ],
          "description": "Minimum gap without data that produces an output range."
        }
      },
      "required": [
        "input",
        "threshold"
      ]
    },
    "CategoryFilterRangesV2": {
      "description": "Produces ranges where a categorical input matches a set of values.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/EnumSeries"
        },
        "values": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/StringConstant"
          },
          "description": "Category labels matched against each input point."
        },
        "minPoints": {
          "allOf": [
            {
              "$ref": "#/definitions/IntegerConstant"
            }
          ],
          "description": "Minimum number of matching points. Defaults to 1."
        },
        "minDuration": {
          "allOf": [
            {
              "$ref": "#/definitions/compute.api.Duration"
            }
          ],
          "description": "Minimum matching duration. Defaults to one nanosecond."
        },
        "rangeStart": {
          "allOf": [
            {
              "$ref": "#/definitions/RangeStart"
            }
          ],
          "description": "Selects whether the output begins at the first match or after persistence is satisfied."
        },
        "operator": {
          "$ref": "#/definitions/EnumFilterOperator"
        }
      },
      "required": [
        "input",
        "operator"
      ]
    },
    "ChannelSeries": {
      "description": "Deprecated: prefer SelectSeries-based nodes with an explicit dataset (or `VariableValue.series` when binding a series to a variable), which select from an arbitrary dataset and let the consuming node decide the series type.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "dataSource",
            "asset",
            "run"
          ]
        },
        "dataSource": {
          "$ref": "#/definitions/DataSourceChannel"
        },
        "asset": {
          "$ref": "#/definitions/AssetChannel"
        },
        "run": {
          "$ref": "#/definitions/RunChannel"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "dataSource",
        "dataSource": {
          "dataSourceRid": {
            "type": "literal",
            "literal": "string"
          },
          "channel": {
            "type": "literal",
            "literal": "string"
          },
          "tags": {
            "key": {
              "type": "literal",
              "literal": "string"
            }
          },
          "tagFilters": {
            "type": "single",
            "single": {
              "key": {
                "type": "literal",
                "literal": "string"
              },
              "values": [
                {
                  "type": "literal",
                  "literal": "string"
                }
              ],
              "operator": "IN"
            }
          },
          "tagsToGroupBy": [
            "string"
          ],
          "groupByTags": [
            {
              "type": "literal",
              "literal": "string"
            }
          ]
        }
      }
    },
    "CombineStructSeries": {
      "description": "Combines named input series into one struct-valued series. Each map key becomes a field name in the resulting struct; a downstream UDF receives the struct as a JSON object keyed by these names and parses it itself. Alignment uses the interpolation configuration before producing row-aligned values.",
      "type": "object",
      "properties": {
        "inputs": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/Series"
          },
          "description": "Input series keyed by struct field name."
        },
        "interpolationConfiguration": {
          "allOf": [
            {
              "$ref": "#/definitions/InterpolationConfiguration"
            }
          ],
          "description": "Optional interpolation rules used when aligning input series before combining them.",
          "x-deprecated": "Setting interpolation on this node is deprecated."
        }
      }
    },
    "CombinedDataset": {
      "description": "Combines multiple datasets into a single dataset by taking the union of all points from each input (akin to SQL {@code UNION ALL}). Duplicate timestamps are preserved rather than merged; callers that need aggregation should wrap the selected series downstream.",
      "type": "object",
      "properties": {
        "inputs": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Dataset"
          },
          "description": "The datasets to combine."
        }
      }
    },
    "ComputeNode": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "enum",
            "numeric",
            "log",
            "ranges",
            "array",
            "struct",
            "curveFit",
            "curveV2",
            "video",
            "raw"
          ]
        },
        "enum": {
          "$ref": "#/definitions/EnumSeries"
        },
        "numeric": {
          "$ref": "#/definitions/NumericSeries"
        },
        "log": {
          "$ref": "#/definitions/LogSeries"
        },
        "ranges": {
          "$ref": "#/definitions/RangeSeries"
        },
        "array": {
          "$ref": "#/definitions/ArraySeries"
        },
        "struct": {
          "$ref": "#/definitions/StructSeries"
        },
        "curveFit": {
          "allOf": [
            {
              "$ref": "#/definitions/CurveFit"
            }
          ],
          "description": "Deprecated: use `curveV2` (CurveFitV2) instead."
        },
        "curveV2": {
          "$ref": "#/definitions/CurveFitV2"
        },
        "video": {
          "$ref": "#/definitions/Reference"
        },
        "raw": {
          "allOf": [
            {
              "$ref": "#/definitions/Reference"
            }
          ],
          "x-deprecated": "wrap raw references in a typed compute node."
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "enum",
        "enum": {
          "type": "aggregate",
          "aggregate": {
            "function": "MIN"
          }
        }
      }
    },
    "compute.api.ComputeNodeWithContext": {
      "type": "object",
      "properties": {
        "seriesNode": {
          "$ref": "#/definitions/ComputeNode"
        },
        "context": {
          "$ref": "#/definitions/Context"
        }
      },
      "required": [
        "seriesNode",
        "context"
      ]
    },
    "ConstantNumericSeries": {
      "description": "A synthetic series that produces a constant value across the entire time range.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "double"
          ]
        },
        "double": {
          "allOf": [
            {
              "$ref": "#/definitions/DoubleConstant"
            }
          ],
          "description": "Create from a floating-point constant."
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "double",
        "double": {
          "type": "literal",
          "literal": 1
        }
      }
    },
    "ContainsSeries": {
      "description": "Maps each log line to 1.0 when `operator` matches it and 0.0 otherwise.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/LogSeries"
        },
        "operator": {
          "$ref": "#/definitions/LogFilterOperator"
        }
      },
      "required": [
        "input",
        "operator"
      ]
    },
    "Context": {
      "type": "object",
      "properties": {
        "variables": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/VariableValue"
          },
          "x-map-key": "VariableName"
        },
        "functionVariables": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/FunctionVariables"
          },
          "x-map-key": "FunctionReference",
          "x-deprecated": "This field is deprecated and will be removed in a future version."
        },
        "datasetReferences": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/Dataset"
          },
          "x-map-key": "DatasetReferenceName",
          "description": "Named datasets looked up by `DatasetReference` nodes in the compute tree."
        },
        "defaultFillStrategy": {
          "allOf": [
            {
              "$ref": "#/definitions/FillStrategy"
            }
          ],
          "description": "Default fill strategy applied at every multi-input alignment boundary where no per-node interpolationConfiguration is specified. When absent, falls back to the server-configured default (forward fill with a 1 second fill limit)."
        },
        "defaultAlignmentStrategy": {
          "allOf": [
            {
              "$ref": "#/definitions/Alignment"
            }
          ],
          "description": "Default alignment strategy applied at every multi-input alignment boundary where no per-node alignment strategy is specified. When absent, falls back to the server default (driver-series alignment)."
        },
        "applyDataScopeOffsets": {
          "type": "boolean",
          "description": "When true, dataset resolution applies each data scope's persisted offset as a time shift, and the client must not pre-apply those offsets itself. When absent or false, scope offsets are left to the client, preserving behavior for legacy clients that inject equivalent timeShift nodes into the compute request. Read from the context in scope at resolution time."
        },
        "resolveAssetsThroughDatasets": {
          "type": "boolean",
          "description": "When true, `Dataset.asset`, the asset-typed sources of `Dataset.run`, and asset or run search expand through each asset's mirrored derived dataset instead of its data scopes. Branches then carry the dataset's declared channel-search split tag keys in place of the reserved `DATA_SCOPE` tag, so callers must filter and group on those keys; the definition's own time shifts apply regardless of `applyDataScopeOffsets`; and an asset with no mirrored dataset resolves to no data. When absent or false, assets expand from their data scopes as before."
        }
      }
    },
    "Cos": {
      "description": "Computes the trigonometric cosine of each value (input in radians).",
      "type": "object",
      "properties": {
        "x": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericSeries"
            }
          ],
          "description": "Input numeric series (radians)."
        }
      },
      "required": [
        "x"
      ]
    },
    "Count": {
      "description": "The number of points inside the time window.",
      "type": "object",
      "properties": {}
    },
    "CumulativeSumSeries": {
      "description": "Calculates the running total of the series values.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/NumericSeries"
        },
        "startTimestamp": {
          "$ref": "#/definitions/TimestampConstant"
        }
      },
      "required": [
        "input",
        "startTimestamp"
      ]
    },
    "CurveFit": {
      "description": "Deprecated: use CurveFitV2 instead.",
      "type": "object",
      "properties": {
        "curveFitPlotType": {
          "$ref": "#/definitions/CurveFitPlotType"
        },
        "curveFitDetails": {
          "$ref": "#/definitions/CurveFitDetails"
        },
        "curveFitOptions": {
          "$ref": "#/definitions/CurveFitOptions"
        }
      },
      "required": [
        "curveFitPlotType",
        "curveFitDetails",
        "curveFitOptions"
      ]
    },
    "CurveFitBoundsConfiguration": {
      "type": "object",
      "properties": {
        "min": {
          "$ref": "#/definitions/DoubleConstant"
        },
        "max": {
          "$ref": "#/definitions/DoubleConstant"
        }
      }
    },
    "CurveFitDetails": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "exponential",
            "logarithmic",
            "polynomial",
            "power"
          ]
        },
        "exponential": {
          "$ref": "#/definitions/ExponentialCurve"
        },
        "logarithmic": {
          "$ref": "#/definitions/LogarithmicCurve"
        },
        "polynomial": {
          "$ref": "#/definitions/PolynomialCurve"
        },
        "power": {
          "$ref": "#/definitions/PowerCurve"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "exponential",
        "exponential": {}
      }
    },
    "CurveFitOptions": {
      "type": "object",
      "properties": {
        "startTime": {
          "$ref": "#/definitions/TimestampConstant"
        },
        "endTime": {
          "$ref": "#/definitions/TimestampConstant"
        }
      },
      "required": [
        "startTime",
        "endTime"
      ]
    },
    "CurveFitPlotType": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "timeSeries",
            "scatter"
          ]
        },
        "timeSeries": {
          "$ref": "#/definitions/TimeSeriesCurveFit"
        },
        "scatter": {
          "$ref": "#/definitions/ScatterCurveFit"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "timeSeries",
        "timeSeries": {
          "series": {
            "type": "abs",
            "abs": {}
          },
          "options": {
            "timeUnit": "DAYS"
          }
        }
      }
    },
    "CurveFitRange": {
      "type": "object",
      "properties": {
        "startTime": {
          "$ref": "#/definitions/TimestampConstant"
        },
        "endTime": {
          "$ref": "#/definitions/TimestampConstant"
        }
      },
      "required": [
        "startTime",
        "endTime"
      ]
    },
    "CurveFitSeriesVariable": {
      "type": "object",
      "properties": {
        "series": {
          "$ref": "#/definitions/NumericSeries"
        },
        "boundsConfig": {
          "allOf": [
            {
              "$ref": "#/definitions/CurveFitBoundsConfiguration"
            }
          ],
          "description": "Optional inclusive bounds selecting which variable samples are fit. Samples outside the bounds are excluded."
        }
      },
      "required": [
        "series"
      ]
    },
    "CurveFitTarget": {
      "description": "The series a curve is fit against (the `y` of the fit). Modeled as a union so additional target types can be added in the future; today the only arm is a numeric series.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "numeric"
          ]
        },
        "numeric": {
          "$ref": "#/definitions/CurveFitSeriesVariable"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "numeric",
        "numeric": {
          "series": {
            "type": "abs",
            "abs": {}
          },
          "boundsConfig": {
            "min": {
              "type": "literal",
              "literal": 1
            },
            "max": {
              "type": "literal",
              "literal": 1
            }
          }
        }
      }
    },
    "CurveFitTimeVariable": {
      "type": "object",
      "properties": {
        "timeUnit": {
          "allOf": [
            {
              "$ref": "#/definitions/TimeUnit"
            }
          ],
          "description": "The unit of the time variable in the formula expression. If not specified, the time unit is assumed to be seconds."
        }
      }
    },
    "CurveFitV2": {
      "type": "object",
      "properties": {
        "target": {
          "allOf": [
            {
              "$ref": "#/definitions/CurveFitTarget"
            }
          ],
          "description": "Target to fit the equation against."
        },
        "fitRange": {
          "allOf": [
            {
              "$ref": "#/definitions/CurveFitRange"
            }
          ],
          "description": "The range to fit the curve over"
        },
        "curveToFit": {
          "allOf": [
            {
              "$ref": "#/definitions/CurveFitV2Details"
            }
          ],
          "description": "The curve type to fit against the target series."
        }
      },
      "required": [
        "target",
        "fitRange",
        "curveToFit"
      ]
    },
    "CurveFitV2Details": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "exponential",
            "logarithmic",
            "polynomial",
            "power",
            "custom"
          ]
        },
        "exponential": {
          "$ref": "#/definitions/BuiltInCurveFit"
        },
        "logarithmic": {
          "$ref": "#/definitions/BuiltInCurveFit"
        },
        "polynomial": {
          "$ref": "#/definitions/PolynomialCurveFit"
        },
        "power": {
          "$ref": "#/definitions/BuiltInCurveFit"
        },
        "custom": {
          "$ref": "#/definitions/CustomCurveFit"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "exponential",
        "exponential": {
          "independentVariable": {
            "type": "numeric",
            "numeric": {
              "series": {
                "type": "abs",
                "abs": {}
              },
              "boundsConfig": {
                "min": {
                  "type": "literal",
                  "literal": 1
                },
                "max": {
                  "type": "literal",
                  "literal": 1
                }
              }
            }
          }
        }
      }
    },
    "CurveFitVariable": {
      "description": "A series a curve fit reads from: another numeric series, or the target's own sample timestamps. Used both as the named formula inputs of a custom fit and as the independent (`x`) axis of a built-in fit.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "numeric",
            "time"
          ]
        },
        "numeric": {
          "$ref": "#/definitions/CurveFitSeriesVariable"
        },
        "time": {
          "$ref": "#/definitions/CurveFitTimeVariable"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "numeric",
        "numeric": {
          "series": {
            "type": "abs",
            "abs": {}
          },
          "boundsConfig": {
            "min": {
              "type": "literal",
              "literal": 1
            },
            "max": {
              "type": "literal",
              "literal": 1
            }
          }
        }
      }
    },
    "CustomCurveFit": {
      "type": "object",
      "properties": {
        "formula": {
          "allOf": [
            {
              "$ref": "#/definitions/StringConstant"
            }
          ],
          "description": "A mathematical expression in terms of variable and parameter names, e.g. `a * x + b * sin(x)`. Variable names must match keys in the `variables` map; parameter names must match keys in the `parameters` map."
        },
        "variables": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/CurveFitVariable"
          },
          "x-map-key": "LocalVariableName",
          "description": "Named input series referenced in the formula. Keys must match the variable names used in the formula expression."
        },
        "parameters": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/DoubleConstant"
          },
          "description": "Named fitting parameters and their initial guesses. Keys must match the parameter names used in the formula expression; values are the starting points passed to the optimizer. The target the curve is fit against is the `y` of the enclosing curve fit (the timeSeries series values, or the scatter `y` series)."
        }
      },
      "required": [
        "formula"
      ]
    },
    "DataSourceChannel": {
      "type": "object",
      "properties": {
        "dataSourceRid": {
          "$ref": "#/definitions/StringConstant"
        },
        "channel": {
          "$ref": "#/definitions/StringConstant"
        },
        "tags": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/StringConstant"
          },
          "x-deprecated": "Use tagFilters"
        },
        "tagFilters": {
          "allOf": [
            {
              "$ref": "#/definitions/TagFilters"
            }
          ],
          "description": "Tags to filter the channel by. Only returns points from the channel where tag values match the provided expression. For log series, include arg filters here in addition to tag filters."
        },
        "tagsToGroupBy": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "uniqueItems": true,
          "x-deprecated": "Use groupByTags instead. Throws if both tagsToGroupBy and groupByTags are specified."
        },
        "groupByTags": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/StringConstant"
          },
          "uniqueItems": true,
          "description": "Tags that the channel should be grouped by. If this is non-empty a grouped result will be returned with an entry for each grouping. Only one of tagsToGroupBy and groupByTags should be specified."
        }
      },
      "required": [
        "dataSourceRid",
        "channel"
      ]
    },
    "Dataset": {
      "description": "A logical bundle of named series. For the time being, columns are each a time series (series name + tags). A dataset is either rooted in persisted data (asset or dataset) or defined as a transformation of another dataset.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "asset",
            "run",
            "saved",
            "search",
            "combine",
            "tag",
            "filter",
            "timeShift",
            "alignByAnchor",
            "withSeries",
            "dropSeries",
            "reference",
            "withDimensions"
          ]
        },
        "asset": {
          "allOf": [
            {
              "$ref": "#/definitions/Asset"
            }
          ],
          "description": "Single asset. Expands to one grouping per data scope on the asset. Groupings are tagged by `assetRid` and `dataScope` so callers can safely compose multiple assets with `combine`."
        },
        "run": {
          "allOf": [
            {
              "$ref": "#/definitions/Run"
            }
          ],
          "description": "Single run. Expands to one grouping per data source attached to the run: asset-typed sources contribute one grouping per data scope on the asset; dataset-typed sources contribute one grouping per dataset. Groupings are tagged by `runRid` and `dataScope`; asset-typed groupings additionally carry `assetRid` so callers can safely compose multiple runs with `combine`."
        },
        "saved": {
          "$ref": "#/definitions/SavedDataset"
        },
        "search": {
          "$ref": "#/definitions/SearchDataset"
        },
        "combine": {
          "$ref": "#/definitions/CombinedDataset"
        },
        "tag": {
          "$ref": "#/definitions/TaggedDataset"
        },
        "filter": {
          "$ref": "#/definitions/FilteredDataset"
        },
        "timeShift": {
          "$ref": "#/definitions/TimeShiftedDataset"
        },
        "alignByAnchor": {
          "$ref": "#/definitions/AnchorAlignedDataset"
        },
        "withSeries": {
          "$ref": "#/definitions/WithSeriesDataset"
        },
        "dropSeries": {
          "$ref": "#/definitions/DropSeriesDataset"
        },
        "reference": {
          "$ref": "#/definitions/DatasetReference"
        },
        "withDimensions": {
          "$ref": "#/definitions/DimensionsDataset"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "asset",
        "asset": {
          "rid": {
            "type": "literal",
            "literal": "string"
          }
        }
      }
    },
    "DatasetAnchor": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "run"
          ]
        },
        "run": {
          "allOf": [
            {
              "$ref": "#/definitions/IntervalAnchor"
            }
          ],
          "description": "Uses the start or end of each run as its anchor. The input dataset must resolve exclusively to run-backed branches."
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "run",
        "run": {
          "type": "intervalStart",
          "intervalStart": {}
        }
      }
    },
    "DatasetReference": {
      "description": "References a named dataset in `Context.datasetReferences`.",
      "type": "object",
      "properties": {
        "name": {
          "allOf": [
            {
              "$ref": "#/definitions/StringConstant"
            }
          ],
          "description": "Name of the dataset reference to resolve from the context."
        }
      },
      "required": [
        "name"
      ]
    },
    "DerivativeSeries": {
      "description": "Calculates the rate of change between subsequent points.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/NumericSeries"
        },
        "timeUnit": {
          "allOf": [
            {
              "$ref": "#/definitions/TimeUnit"
            }
          ],
          "description": "Time unit used to calculate the derivative. Defaults to seconds if not specified."
        },
        "negativeValuesConfiguration": {
          "allOf": [
            {
              "$ref": "#/definitions/NegativeValueConfiguration"
            }
          ],
          "description": "Defines the strategy for handling negative output values. Defaults to allowNegativeValues if not specified."
        }
      },
      "required": [
        "input"
      ]
    },
    "DerivedSeries": {
      "description": "Represents a derived series within a compute graph. This is a series that is derived from a function within a module.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "function"
          ]
        },
        "function": {
          "$ref": "#/definitions/FunctionDerivedSeries"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "function",
        "function": {
          "moduleName": {
            "type": "literal",
            "literal": "string"
          },
          "functionName": {
            "type": "literal",
            "literal": "string"
          },
          "versionReference": {
            "type": "pinned",
            "pinned": {
              "version": {
                "type": "literal",
                "literal": "string"
              }
            }
          },
          "functionArgs": {
            "key": {
              "type": "variable",
              "variable": "string"
            }
          }
        }
      }
    },
    "DetrendType": {
      "description": "The type of detrending to apply to the signal. When absent, will default to the detrend behavior for that function.",
      "type": "string",
      "enum": [
        "CONSTANT",
        "LINEAR",
        "NO_OP"
      ],
      "x-enum-descriptions": {
        "CONSTANT": "Removes the mean value of the signal.",
        "LINEAR": "Removes a best-fit linear trend from the signal.",
        "NO_OP": "Does not perform any detrending."
      }
    },
    "Dimension": {
      "description": "A value derived per asset or run, injected as a tag.",
      "type": "object",
      "properties": {
        "tagKey": {
          "allOf": [
            {
              "$ref": "#/definitions/StringConstant"
            }
          ],
          "description": "The tag key to inject the value under. Defaults to the key derived by `value`."
        },
        "value": {
          "allOf": [
            {
              "$ref": "#/definitions/DimensionValue"
            }
          ],
          "description": "The value to inject."
        }
      },
      "required": [
        "value"
      ]
    },
    "DimensionValue": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "stringProperty",
            "identity"
          ]
        },
        "stringProperty": {
          "allOf": [
            {
              "$ref": "#/definitions/StringPropertyDimension"
            }
          ],
          "description": "The value of a string property on the asset or run."
        },
        "identity": {
          "allOf": [
            {
              "$ref": "#/definitions/IdentityDimension"
            }
          ],
          "description": "The value of an asset's primary key under one of its types."
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "stringProperty",
        "stringProperty": {
          "propertyName": {
            "type": "literal",
            "literal": "string"
          }
        }
      }
    },
    "DimensionsDataset": {
      "description": "Injects one tag per dimension onto every series of the underlying dataset, valued from the asset or run the series belongs to. This makes resource metadata usable as a grouping, filtering and aggregation dimension with `selectTags`, tag predicates and `groupByTags`. Group by the dimension together with `ASSET_RID` (or `RUN_RID`) to keep each resource separate, or by the dimension alone to pivot so that resources sharing a value fall into one group.\n\nDimensions are only supported on asset and run branches. Any other branch, such as a saved dataset or a derived series from `withSeries`, gets the reserved value `NOMINAL_ABSENT` for every dimension. To group derived series by a dimension, apply `withDimensions` to the `withSeries` input instead, so that the series they are computed from carry the dimension tags. A dimension tag replaces a series tag with the same key.",
      "type": "object",
      "properties": {
        "input": {
          "allOf": [
            {
              "$ref": "#/definitions/Dataset"
            }
          ],
          "description": "The underlying dataset to tag."
        },
        "dimensions": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Dimension"
          },
          "description": "The dimensions to inject. Must not be empty, must have at most 10 entries, and every dimension must have a distinct tag key. A tag key must not be a `ReservedTagKey`, start with `EVENT_LABEL_PREFIX:`, or start with `NOMINAL_`."
        }
      },
      "required": [
        "input"
      ]
    },
    "Divide": {
      "description": "Divides left by right pointwise.",
      "type": "object",
      "properties": {
        "left": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericSeries"
            }
          ],
          "description": "Numerator."
        },
        "right": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericSeries"
            }
          ],
          "description": "Denominator."
        }
      },
      "required": [
        "left",
        "right"
      ]
    },
    "DoubleConstant": {
      "description": "A floating-point constant that can be a literal value, a named variable reference, or a named builtin constant.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "literal",
            "variable",
            "builtin"
          ]
        },
        "literal": {
          "type": "number",
          "format": "double",
          "description": "Create from a literal floating-point value."
        },
        "variable": {
          "type": "string",
          "x-alias": "VariableName",
          "description": "Create from a named reference name."
        },
        "builtin": {
          "allOf": [
            {
              "$ref": "#/definitions/BuiltinConstant"
            }
          ],
          "description": "Create from a named builtin constant; the server resolves the numeric value."
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "literal",
        "literal": 1
      }
    },
    "DriverSeries": {
      "description": "Uses the driver series timestamps as the alignment grid.",
      "type": "object",
      "properties": {}
    },
    "DropSeriesDataset": {
      "description": "Removes series from the base dataset by name: raw and derived series alike are no longer selectable under those names. Dropping a name absent from `input` has no effect. Combined with `WithSeriesDataset`, which can expose a series under another name, this renames a series: `dropSeries(withSeries(input, [newName = select(oldName)]), [oldName])`.",
      "type": "object",
      "properties": {
        "input": {
          "allOf": [
            {
              "$ref": "#/definitions/Dataset"
            }
          ],
          "description": "The base dataset to drop series from."
        },
        "names": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/StringConstant"
          },
          "description": "Names of the series to drop."
        }
      },
      "required": [
        "input"
      ]
    },
    "compute.api.Duration": {
      "description": "A length of time. Can be constructed from literal values in various units or composed via arithmetic. Used for window sizes, time shifts, persistence thresholds, and resampling intervals.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "reference",
            "nanoseconds",
            "milliseconds",
            "seconds",
            "minutes",
            "hours",
            "days",
            "add",
            "subtract",
            "negate"
          ]
        },
        "reference": {
          "$ref": "#/definitions/Reference"
        },
        "nanoseconds": {
          "$ref": "#/definitions/DurationNanoseconds"
        },
        "milliseconds": {
          "$ref": "#/definitions/DurationMilliseconds"
        },
        "seconds": {
          "$ref": "#/definitions/DurationSeconds"
        },
        "minutes": {
          "$ref": "#/definitions/DurationMinutes"
        },
        "hours": {
          "$ref": "#/definitions/DurationHours"
        },
        "days": {
          "$ref": "#/definitions/DurationDays"
        },
        "add": {
          "$ref": "#/definitions/DurationAdd"
        },
        "subtract": {
          "$ref": "#/definitions/DurationSubtract"
        },
        "negate": {
          "$ref": "#/definitions/DurationNegate"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "reference",
        "reference": {
          "name": "string"
        }
      }
    },
    "DurationAdd": {
      "description": "The sum of two durations.",
      "type": "object",
      "properties": {
        "left": {
          "allOf": [
            {
              "$ref": "#/definitions/compute.api.Duration"
            }
          ],
          "description": "First duration."
        },
        "right": {
          "allOf": [
            {
              "$ref": "#/definitions/compute.api.Duration"
            }
          ],
          "description": "Second duration."
        }
      },
      "required": [
        "left",
        "right"
      ]
    },
    "DurationConstant": {
      "description": "A duration constant that can be a literal value or a named variable reference.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "literal",
            "variable"
          ]
        },
        "literal": {
          "allOf": [
            {
              "$ref": "#/definitions/run.api.Duration"
            }
          ],
          "description": "Create from a literal duration value."
        },
        "variable": {
          "type": "string",
          "x-alias": "VariableName",
          "description": "Create from a named reference name."
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "literal",
        "literal": {
          "seconds": 1,
          "nanos": 1
        }
      }
    },
    "DurationDays": {
      "description": "Constructs a duration from a number of days.",
      "type": "object",
      "properties": {
        "days": {
          "allOf": [
            {
              "$ref": "#/definitions/IntegerConstant"
            }
          ],
          "description": "The number of days."
        }
      },
      "required": [
        "days"
      ]
    },
    "DurationFilterRanges": {
      "description": "Filters a list of ranges down to only those satisfying a threshold condition on the range's duration.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/RangeSeries"
        },
        "threshold": {
          "$ref": "#/definitions/DurationConstant"
        },
        "operator": {
          "$ref": "#/definitions/ThresholdOperator"
        },
        "unboundedBehavior": {
          "$ref": "#/definitions/UnboundedBehavior"
        }
      },
      "required": [
        "input",
        "threshold",
        "operator"
      ]
    },
    "DurationFilterRangesV2": {
      "description": "Filters ranges by duration using an authored Duration expression.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/RangeSeries"
        },
        "duration": {
          "allOf": [
            {
              "$ref": "#/definitions/compute.api.Duration"
            }
          ],
          "description": "The duration each input range is compared against."
        },
        "unboundedBehavior": {
          "allOf": [
            {
              "$ref": "#/definitions/UnboundedBehavior"
            }
          ],
          "description": "How a range with an open start or end is measured. Defaults to treating the missing bound as the edge of the compute request window."
        },
        "comparison": {
          "$ref": "#/definitions/ThresholdOperator"
        }
      },
      "required": [
        "input",
        "duration",
        "comparison"
      ]
    },
    "DurationHours": {
      "description": "Constructs a duration from a number of hours.",
      "type": "object",
      "properties": {
        "hours": {
          "allOf": [
            {
              "$ref": "#/definitions/IntegerConstant"
            }
          ],
          "description": "The number of hours."
        }
      },
      "required": [
        "hours"
      ]
    },
    "DurationMilliseconds": {
      "description": "Constructs a duration from a number of milliseconds.",
      "type": "object",
      "properties": {
        "milliseconds": {
          "allOf": [
            {
              "$ref": "#/definitions/IntegerConstant"
            }
          ],
          "description": "The number of milliseconds."
        }
      },
      "required": [
        "milliseconds"
      ]
    },
    "DurationMinutes": {
      "description": "Constructs a duration from a number of minutes.",
      "type": "object",
      "properties": {
        "minutes": {
          "allOf": [
            {
              "$ref": "#/definitions/IntegerConstant"
            }
          ],
          "description": "The number of minutes."
        }
      },
      "required": [
        "minutes"
      ]
    },
    "DurationNanoseconds": {
      "description": "Constructs a duration from a number of nanoseconds. Limited to values within the 32-bit integer range (~2.1 billion ns, or ~2.1 seconds). For larger durations, use DurationSeconds or DurationMilliseconds.",
      "type": "object",
      "properties": {
        "nanoseconds": {
          "allOf": [
            {
              "$ref": "#/definitions/IntegerConstant"
            }
          ],
          "description": "The number of nanoseconds."
        }
      },
      "required": [
        "nanoseconds"
      ]
    },
    "DurationNegate": {
      "description": "Negates a duration (reverses its sign).",
      "type": "object",
      "properties": {
        "input": {
          "allOf": [
            {
              "$ref": "#/definitions/compute.api.Duration"
            }
          ],
          "description": "The duration to negate."
        }
      },
      "required": [
        "input"
      ]
    },
    "DurationSeconds": {
      "description": "Constructs a duration from a number of seconds.",
      "type": "object",
      "properties": {
        "seconds": {
          "allOf": [
            {
              "$ref": "#/definitions/IntegerConstant"
            }
          ],
          "description": "The number of seconds."
        }
      },
      "required": [
        "seconds"
      ]
    },
    "DurationSubtract": {
      "description": "The difference of two durations (left minus right).",
      "type": "object",
      "properties": {
        "left": {
          "allOf": [
            {
              "$ref": "#/definitions/compute.api.Duration"
            }
          ],
          "description": "Duration to subtract from."
        },
        "right": {
          "allOf": [
            {
              "$ref": "#/definitions/compute.api.Duration"
            }
          ],
          "description": "Duration to subtract."
        }
      },
      "required": [
        "left",
        "right"
      ]
    },
    "EarliestAnchorReference": {
      "description": "Selects the earliest anchor resolved from the input.",
      "type": "object",
      "properties": {}
    },
    "Enum1dArraySelectTagsSeries": {
      "description": "Subsets the tag dimensions of the input enum 1d array series to the given tag keys. Preserves the input series' cardinality: points that share the selected keys but differ on dropped keys remain distinct.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/Enum1dArraySeries"
        },
        "tagKeys": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/StringConstant"
          },
          "uniqueItems": true
        }
      },
      "required": [
        "input"
      ]
    },
    "Enum1dArraySeries": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "channel",
            "raw",
            "derived",
            "selectEnum1dArray",
            "extractFromStruct",
            "toStartOfInterval",
            "timeShift",
            "filterByTag",
            "selectTags"
          ]
        },
        "channel": {
          "$ref": "#/definitions/ChannelSeries"
        },
        "raw": {
          "$ref": "#/definitions/Reference"
        },
        "derived": {
          "$ref": "#/definitions/DerivedSeries"
        },
        "selectEnum1dArray": {
          "$ref": "#/definitions/SelectSeries"
        },
        "extractFromStruct": {
          "$ref": "#/definitions/ExtractEnum1dArrayFromStructSeries"
        },
        "toStartOfInterval": {
          "$ref": "#/definitions/Enum1dArrayToStartOfIntervalSeries"
        },
        "timeShift": {
          "$ref": "#/definitions/Enum1dArrayTimeShiftSeries"
        },
        "filterByTag": {
          "$ref": "#/definitions/Enum1dArrayTagFilterSeries"
        },
        "selectTags": {
          "$ref": "#/definitions/Enum1dArraySelectTagsSeries"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "channel",
        "channel": {
          "type": "dataSource",
          "dataSource": {
            "dataSourceRid": {
              "type": "literal",
              "literal": "string"
            },
            "channel": {
              "type": "literal",
              "literal": "string"
            },
            "tags": {
              "key": {
                "type": "literal",
                "literal": "string"
              }
            },
            "tagFilters": {
              "type": "single",
              "single": {
                "key": {
                  "type": "literal",
                  "literal": "string"
                },
                "values": [
                  {
                    "type": "literal",
                    "literal": "string"
                  }
                ],
                "operator": "IN"
              }
            },
            "tagsToGroupBy": [
              "string"
            ],
            "groupByTags": [
              {
                "type": "literal",
                "literal": "string"
              }
            ]
          }
        }
      }
    },
    "Enum1dArrayTagFilterSeries": {
      "description": "Applies a tag predicate to the enum 1d array series produced by input.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/Enum1dArraySeries"
        },
        "predicate": {
          "$ref": "#/definitions/TagPredicate"
        }
      },
      "required": [
        "input",
        "predicate"
      ]
    },
    "Enum1dArrayTimeShiftSeries": {
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/Enum1dArraySeries"
        },
        "duration": {
          "$ref": "#/definitions/DurationConstant"
        }
      },
      "required": [
        "input",
        "duration"
      ]
    },
    "Enum1dArrayToStartOfIntervalSeries": {
      "description": "Snaps each point's timestamp to the start of its enclosing fixed-size time bucket. Buckets are epoch-aligned: a point at timestamp `t` (nanoseconds) is rewritten to `floor(t / window) * window`. Values and tag groupings are preserved; aggregation of points that collide on the snapped timestamp is the responsibility of downstream nodes.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/Enum1dArraySeries"
        },
        "window": {
          "$ref": "#/definitions/compute.api.Duration"
        }
      },
      "required": [
        "input",
        "window"
      ]
    },
    "EnumAggregation": {
      "description": "Aggregates an input series using an enum aggregation operator. Rolling aggregation builders are not supported; only the group-by shape is accepted at resolution time. `Min` and `Max` require a categorical input series. `Udf` also accepts a numeric input, which reaches the function as `Vec<f64>`; a categorical input reaches it as `Vec<String>`.",
      "type": "object",
      "properties": {
        "input": {
          "allOf": [
            {
              "$ref": "#/definitions/AggregationBuilder"
            }
          ],
          "description": "The aggregation shape to apply the operator over. Only the group-by shape is supported; rolling builders are rejected at resolution time. The Python `enum_aggregation(...)` sugar form is categorical-only. Numeric builders expose the UDF-only `enum_udf(...)` and `rust_enum_udf(...)` terminals instead."
        },
        "operator": {
          "allOf": [
            {
              "$ref": "#/definitions/EnumAggregationOperator"
            }
          ],
          "description": "The enum reduction applied to each group (min, max, or a user-defined function)."
        }
      },
      "required": [
        "input",
        "operator"
      ]
    },
    "EnumAggregationFunction": {
      "description": "Aggregates duplicate timestamps on a single enum series. For aggregating across tag groupings, use `EnumSeries.enumAggregation` with `aggregation.AggregationBuilder.groupBy`.",
      "type": "string",
      "enum": [
        "MIN",
        "MAX"
      ]
    },
    "EnumAggregationOperator": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "min",
            "max",
            "udf"
          ]
        },
        "min": {
          "$ref": "#/definitions/Empty"
        },
        "max": {
          "$ref": "#/definitions/Empty"
        },
        "udf": {
          "$ref": "#/definitions/EnumAggregationUdf"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "min",
        "min": {}
      }
    },
    "EnumAggregationUdf": {
      "description": "A user-defined enum aggregation. The supported ABI is a Rust function with one vector input and a `String` return value. Numeric input series use `Vec<f64>` and enum input series use `Vec<String>`.",
      "type": "object",
      "properties": {
        "source": {
          "$ref": "#/definitions/UdfSource"
        }
      },
      "required": [
        "source"
      ]
    },
    "EnumConstantResampleInterpolationConfiguration": {
      "description": "Fills all empty resample intervals with a single constant value.\n\nIf a resampled time interval (bucket) contains no data points from the input, it will be assigned the specified 'constant' as a default value. This applies to gaps at the start of the series, between data points, and at the end.",
      "type": "object",
      "properties": {
        "constant": {
          "$ref": "#/definitions/StringConstant"
        }
      },
      "required": [
        "constant"
      ]
    },
    "EnumCountDuplicateSeries": {
      "description": "Counts the number of points along each timestamp in the input series.",
      "type": "object",
      "properties": {
        "inputs": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/EnumSeries"
          }
        }
      }
    },
    "EnumFilterOperator": {
      "type": "string",
      "enum": [
        "IS_IN",
        "IS_NOT_IN",
        "MATCHES_ANY_REGEX"
      ],
      "x-enum-descriptions": {
        "IS_IN": "True when the value is contained in the set.",
        "IS_NOT_IN": "True when the value is not contained in the set.",
        "MATCHES_ANY_REGEX": "True when the value matches at least one pattern in the set. Values are RE2 regular expressions, anchored to the entire string."
      }
    },
    "EnumFilterRanges": {
      "description": "Produces a list of ranges for which the filter condition is satisfied.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/EnumSeries"
        },
        "operator": {
          "$ref": "#/definitions/EnumFilterOperator"
        },
        "values": {
          "allOf": [
            {
              "$ref": "#/definitions/StringSetConstant"
            }
          ],
          "description": "The set of literal values (for IS_IN / IS_NOT_IN) or RE2 regex patterns (for MATCHES_ANY_REGEX) to match against."
        },
        "persistenceWindowConfiguration": {
          "$ref": "#/definitions/PersistenceWindowConfiguration"
        }
      },
      "required": [
        "input",
        "operator",
        "values"
      ]
    },
    "EnumFilterTransformationSeries": {
      "description": "Outputs categorical input values that fall within the supplied ranges.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/EnumSeries"
        },
        "filter": {
          "allOf": [
            {
              "$ref": "#/definitions/RangeSeries"
            }
          ],
          "description": "Keeps only input points whose timestamp falls inside one of these ranges."
        }
      },
      "required": [
        "input",
        "filter"
      ]
    },
    "EnumNthPointDownsampleSeries": {
      "description": "Keeps every Nth row of the timestamp-ordered input, per series. No grid arithmetic, no interpolation, no boundary handling. Output count is ceil(input_count / n) per series. Caller is responsible for choosing n consistent with the input's sample rate; output spacing is only uniform when the input is.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/EnumSeries"
        },
        "n": {
          "allOf": [
            {
              "$ref": "#/definitions/IntegerConstant"
            }
          ],
          "description": "Keep every Nth point starting from the earliest in each series. Must be >= 1."
        }
      },
      "required": [
        "input",
        "n"
      ]
    },
    "EnumResampleConfiguration": {
      "type": "object",
      "properties": {
        "interval": {
          "allOf": [
            {
              "$ref": "#/definitions/DurationConstant"
            }
          ],
          "description": "Interval between resampled points"
        },
        "interpolation": {
          "allOf": [
            {
              "$ref": "#/definitions/EnumResampleInterpolationConfiguration"
            }
          ],
          "description": "Interpolation strategy to use (defaults to forward fill)."
        }
      },
      "required": [
        "interval"
      ]
    },
    "EnumResampleInterpolationConfiguration": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "forwardFillResampleInterpolationConfiguration",
            "constantResampleInterpolationConfiguration"
          ]
        },
        "forwardFillResampleInterpolationConfiguration": {
          "$ref": "#/definitions/ForwardFillResampleInterpolationConfiguration"
        },
        "constantResampleInterpolationConfiguration": {
          "$ref": "#/definitions/EnumConstantResampleInterpolationConfiguration"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "forwardFillResampleInterpolationConfiguration",
        "forwardFillResampleInterpolationConfiguration": {}
      }
    },
    "EnumResampleSeries": {
      "description": "Resamples the input series to a new resolution using interpolation. Outputs data for timestamps corresponding to the defined frequency. Based on interpolation strategy, determines range of timestamps to output data for and interpolates values where necessary.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/EnumSeries"
        },
        "resampleConfiguration": {
          "allOf": [
            {
              "$ref": "#/definitions/EnumResampleConfiguration"
            }
          ],
          "description": "The interval at which to resample the series and interpolation strategy"
        }
      },
      "required": [
        "input",
        "resampleConfiguration"
      ]
    },
    "EnumResampleSeriesV2": {
      "description": "Resamples categorical points at the authored interval using forward-fill interpolation.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/EnumSeries"
        },
        "interval": {
          "allOf": [
            {
              "$ref": "#/definitions/compute.api.Duration"
            }
          ],
          "description": "Interval at which to resample."
        }
      },
      "required": [
        "input",
        "interval"
      ]
    },
    "EnumSelectTagsSeries": {
      "description": "Subsets the tag dimensions of the input enum series to the given tag keys. Preserves the input series' cardinality: points that share the selected keys but differ on dropped keys remain distinct.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/EnumSeries"
        },
        "tagKeys": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/StringConstant"
          },
          "uniqueItems": true
        }
      },
      "required": [
        "input"
      ]
    },
    "EnumSeries": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "aggregate",
            "raw",
            "channel",
            "derived",
            "resample",
            "resampleV2",
            "nthPointDownsample",
            "timeRangeFilter",
            "timeShift",
            "timeShiftV2",
            "union",
            "filterTransformation",
            "valueMap",
            "select1dArrayIndex",
            "extractFromStruct",
            "eventAggregation",
            "enumAggregation",
            "selectEnum",
            "selectCategoricalProperty",
            "filterByTag",
            "selectTags",
            "scalarUdf",
            "toStartOfInterval"
          ]
        },
        "aggregate": {
          "allOf": [
            {
              "$ref": "#/definitions/AggregateEnumSeries"
            }
          ],
          "x-deprecated": "AggregateEnumSeries is deprecated. Use `enumAggregation` with `aggregation.GroupByAggregationBuilder` instead."
        },
        "raw": {
          "$ref": "#/definitions/Reference"
        },
        "channel": {
          "$ref": "#/definitions/ChannelSeries"
        },
        "derived": {
          "$ref": "#/definitions/DerivedSeries"
        },
        "resample": {
          "$ref": "#/definitions/EnumResampleSeries"
        },
        "resampleV2": {
          "$ref": "#/definitions/EnumResampleSeriesV2"
        },
        "nthPointDownsample": {
          "$ref": "#/definitions/EnumNthPointDownsampleSeries"
        },
        "timeRangeFilter": {
          "$ref": "#/definitions/EnumTimeRangeFilterSeries"
        },
        "timeShift": {
          "$ref": "#/definitions/EnumTimeShiftSeries"
        },
        "timeShiftV2": {
          "$ref": "#/definitions/EnumTimeShiftSeriesV2"
        },
        "union": {
          "$ref": "#/definitions/EnumUnionSeries"
        },
        "filterTransformation": {
          "$ref": "#/definitions/EnumFilterTransformationSeries"
        },
        "valueMap": {
          "$ref": "#/definitions/ValueMapSeries"
        },
        "select1dArrayIndex": {
          "$ref": "#/definitions/SelectIndexFrom1dEnumArraySeries"
        },
        "extractFromStruct": {
          "$ref": "#/definitions/ExtractEnumFromStructSeries"
        },
        "eventAggregation": {
          "$ref": "#/definitions/EventsEnumSeries"
        },
        "enumAggregation": {
          "$ref": "#/definitions/EnumAggregation"
        },
        "selectEnum": {
          "$ref": "#/definitions/SelectSeries"
        },
        "selectCategoricalProperty": {
          "$ref": "#/definitions/SelectProperty"
        },
        "filterByTag": {
          "$ref": "#/definitions/EnumTagFilterSeries"
        },
        "selectTags": {
          "$ref": "#/definitions/EnumSelectTagsSeries"
        },
        "scalarUdf": {
          "$ref": "#/definitions/ScalarUdfSeries"
        },
        "toStartOfInterval": {
          "$ref": "#/definitions/EnumToStartOfIntervalSeries"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "aggregate",
        "aggregate": {
          "function": "MIN"
        }
      }
    },
    "EnumSeriesEqualityRanges": {
      "description": "Produces a list of ranges for which provided enum series are all equal (or are not all equal).",
      "type": "object",
      "properties": {
        "input": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/EnumSeries"
          }
        },
        "equalityOperator": {
          "$ref": "#/definitions/EqualityOperator"
        },
        "persistenceWindowConfiguration": {
          "$ref": "#/definitions/PersistenceWindowConfiguration"
        },
        "interpolationConfiguration": {
          "allOf": [
            {
              "$ref": "#/definitions/InterpolationConfiguration"
            }
          ],
          "description": "Defaults to forward fill interpolation with a 1s interpolation radius",
          "x-deprecated": "Setting interpolation on this node is deprecated."
        }
      },
      "required": [
        "equalityOperator"
      ]
    },
    "EnumTagFilterSeries": {
      "description": "Applies a tag predicate to the enum series produced by input.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/EnumSeries"
        },
        "predicate": {
          "$ref": "#/definitions/TagPredicate"
        }
      },
      "required": [
        "input",
        "predicate"
      ]
    },
    "EnumTimeRangeFilterSeries": {
      "description": "Filters the series to points within the specified time range.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/EnumSeries"
        },
        "startTime": {
          "allOf": [
            {
              "$ref": "#/definitions/TimestampConstant"
            }
          ],
          "description": "Represents the start time (inclusive) of the time range."
        },
        "endTime": {
          "allOf": [
            {
              "$ref": "#/definitions/TimestampConstant"
            }
          ],
          "description": "Represents the end time (inclusive) of the time range."
        }
      },
      "required": [
        "input"
      ]
    },
    "EnumTimeShiftSeries": {
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/EnumSeries"
        },
        "duration": {
          "$ref": "#/definitions/DurationConstant"
        }
      },
      "required": [
        "input",
        "duration"
      ]
    },
    "EnumTimeShiftSeriesV2": {
      "description": "Shifts the timestamps in the input series by the resolved duration.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/EnumSeries"
        },
        "duration": {
          "allOf": [
            {
              "$ref": "#/definitions/compute.api.Duration"
            }
          ],
          "description": "Duration to shift the input series by."
        }
      },
      "required": [
        "input",
        "duration"
      ]
    },
    "EnumToNumericSeries": {
      "description": "Maps an enumerated series to a numeric series by mapping each string value to a double.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/EnumSeries"
        },
        "mapping": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/DoubleConstant"
          },
          "description": "The mapping from enum values to doubles."
        },
        "defaultValue": {
          "allOf": [
            {
              "$ref": "#/definitions/DoubleConstant"
            }
          ],
          "description": "The value to use for enum values not present in the mapping. If not specified, points with unmapped enum values will be dropped."
        }
      },
      "required": [
        "input"
      ]
    },
    "EnumToStartOfIntervalSeries": {
      "description": "Snaps each point's timestamp to the start of its enclosing fixed-size time bucket. Buckets are epoch-aligned: a point at timestamp `t` (nanoseconds) is rewritten to `floor(t / window) * window`. Values and tag groupings are preserved; aggregation of points that collide on the snapped timestamp is the responsibility of downstream nodes.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/EnumSeries"
        },
        "window": {
          "$ref": "#/definitions/compute.api.Duration"
        }
      },
      "required": [
        "input",
        "window"
      ]
    },
    "EnumUnionOperation": {
      "type": "string",
      "enum": [
        "THROW",
        "MAX",
        "MIN"
      ],
      "x-enum-descriptions": {
        "THROW": "Throws an exception if two series contain points with a duplicate timestamp.",
        "MAX": "Aggregates duplicates by String MAX.",
        "MIN": "Aggregates duplicates by String MIN."
      }
    },
    "EnumUnionSeries": {
      "description": "Combines multiple enum series together and outputs a single series. The strategy to merge input values with the same timestamp together is specified in the operation field.",
      "type": "object",
      "properties": {
        "input": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/EnumSeries"
          }
        },
        "operation": {
          "allOf": [
            {
              "$ref": "#/definitions/EnumUnionOperation"
            }
          ],
          "description": "The strategy to merge points with duplicate timestamps."
        }
      },
      "required": [
        "operation"
      ]
    },
    "EqualToSeries": {
      "description": "Compares two numeric series point-wise, producing true where left == right and false otherwise.",
      "type": "object",
      "properties": {
        "left": {
          "$ref": "#/definitions/NumericSeries"
        },
        "right": {
          "$ref": "#/definitions/NumericSeries"
        }
      },
      "required": [
        "left",
        "right"
      ]
    },
    "EqualityOperator": {
      "type": "string",
      "enum": [
        "ALL_EQUAL",
        "NOT_ALL_EQUAL"
      ]
    },
    "EventAnchor": {
      "description": "Uses the start timestamp of the event at the configured zero-based index from this query whose event time lies in the anchor window [start, end), or [start, +infinity) when the end is absent. The window is the run bounds for a run anchor. Shares the wire shape of `numeric.EventTimeShift`, which tagByIntervals time shifts use; a separate type so dataset anchors evolve independently.",
      "type": "object",
      "properties": {
        "query": {
          "$ref": "#/definitions/ComputeEventQuery"
        },
        "index": {
          "allOf": [
            {
              "$ref": "#/definitions/IntegerConstant"
            }
          ],
          "description": "Zero-based event index after sorting. Defaults to zero and must be non-negative."
        },
        "sortOrder": {
          "allOf": [
            {
              "$ref": "#/definitions/EventSortOrder"
            }
          ],
          "description": "Ordering by event start timestamp before selecting the index. Defaults to ASC."
        }
      },
      "required": [
        "query"
      ]
    },
    "EventIntervalSource": {
      "description": "Intervals come from an event query. Each event defines [timestamp, timestamp+duration).",
      "type": "object",
      "properties": {
        "query": {
          "$ref": "#/definitions/ComputeEventQuery"
        },
        "tagBy": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/EventTagSource"
          },
          "description": "Non-empty ordered list of tag sources. Each contributes a tag key-value pair per event interval."
        }
      },
      "required": [
        "query"
      ]
    },
    "EventLabelTag": {
      "type": "object",
      "properties": {
        "label": {
          "$ref": "#/definitions/StringConstant"
        }
      },
      "required": [
        "label"
      ]
    },
    "EventLevelTag": {
      "type": "object",
      "properties": {}
    },
    "EventPropertyTag": {
      "type": "object",
      "properties": {
        "propertyName": {
          "$ref": "#/definitions/StringConstant"
        }
      },
      "required": [
        "propertyName"
      ]
    },
    "EventSortOrder": {
      "type": "string",
      "enum": [
        "ASC",
        "DESC"
      ]
    },
    "EventTagSource": {
      "description": "A dimension contributing a tag key-value pair per event interval.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "intervalIndex",
            "level",
            "property",
            "label",
            "rangeStartTimestamp"
          ]
        },
        "intervalIndex": {
          "$ref": "#/definitions/IntervalIndexTag"
        },
        "level": {
          "$ref": "#/definitions/EventLevelTag"
        },
        "property": {
          "$ref": "#/definitions/EventPropertyTag"
        },
        "label": {
          "$ref": "#/definitions/EventLabelTag"
        },
        "rangeStartTimestamp": {
          "$ref": "#/definitions/IntervalStartTimestampTag"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "intervalIndex",
        "intervalIndex": {}
      }
    },
    "EventTimeShift": {
      "description": "Shift by the start timestamp of the event at the configured zero-based index from this query whose event time lies in the anchor window [start, end), or [start, +infinity) when the end is absent. The window is the tagging interval for tagByIntervals and the run bounds for a run anchor. The query may differ from the query that produced a tagging interval.",
      "type": "object",
      "properties": {
        "query": {
          "$ref": "#/definitions/ComputeEventQuery"
        },
        "index": {
          "allOf": [
            {
              "$ref": "#/definitions/IntegerConstant"
            }
          ],
          "description": "Zero-based event index after sorting. Defaults to zero and must be non-negative."
        },
        "sortOrder": {
          "allOf": [
            {
              "$ref": "#/definitions/EventSortOrder"
            }
          ],
          "description": "Ordering by event start timestamp before selecting the index. Defaults to ASC."
        }
      },
      "required": [
        "query"
      ]
    },
    "EventsEnumSeries": {
      "description": "Queries events and emits an enum series where each data point corresponds to an event and the enum value is derived from a single event field (property, label, etc).",
      "type": "object",
      "properties": {
        "query": {
          "$ref": "#/definitions/ComputeEventQuery"
        },
        "valueSource": {
          "$ref": "#/definitions/EventsEnumValueSource"
        }
      },
      "required": [
        "query",
        "valueSource"
      ]
    },
    "EventsEnumValueSource": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "property",
            "level"
          ]
        },
        "property": {
          "allOf": [
            {
              "$ref": "#/definitions/StringConstant"
            }
          ],
          "description": "Name of the event property whose value should be used as the enum value."
        },
        "level": {
          "allOf": [
            {
              "$ref": "#/definitions/Empty"
            }
          ],
          "description": "The event level (INFO, FLAG, VIOLATION, SUCCESS). This field corresponds to the event type."
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "property",
        "property": {
          "type": "literal",
          "literal": "string"
        }
      }
    },
    "EventsSearchRanges": {
      "description": "Produces a range series with a range for each event matching the query. Throws if there are more than 1,000 results.",
      "type": "object",
      "properties": {
        "query": {
          "$ref": "#/definitions/ComputeEventQuery"
        }
      },
      "required": [
        "query"
      ]
    },
    "EveryNthPerSeriesSampling": {
      "description": "Returns every Nth timestamp-ordered point from each distinct series.",
      "type": "object",
      "properties": {
        "n": {
          "allOf": [
            {
              "$ref": "#/definitions/IntegerConstant"
            }
          ],
          "description": "Keep every Nth point starting from the earliest in each series. Must be > 1."
        }
      },
      "required": [
        "n"
      ]
    },
    "ExcludeNegativeValues": {
      "type": "object",
      "properties": {}
    },
    "ExponentialCurve": {
      "type": "object",
      "properties": {}
    },
    "ExtractEnum1dArrayFromStructSeries": {
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/StructSeries"
        },
        "fieldPath": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/StringConstant"
          }
        }
      },
      "required": [
        "input"
      ]
    },
    "ExtractEnumFromStructSeries": {
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/StructSeries"
        },
        "fieldPath": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/StringConstant"
          },
          "description": "Path segments that are joined to locate a nested enum field. Use dots to traverse objects (e.g. `a.b.c`) and 0-based brackets to index into arrays (e.g. `items[0].value`). A bare numeric name like `0` refers to an object key named \"0\"; use `[0]` to index into an array. Rows where the path is invalid or resolves to a nested object rather than a scalar are filtered out."
        }
      },
      "required": [
        "input"
      ]
    },
    "ExtractNumeric1dArrayFromStructSeries": {
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/StructSeries"
        },
        "fieldPath": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/StringConstant"
          }
        }
      },
      "required": [
        "input"
      ]
    },
    "ExtractNumericFromStructSeries": {
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/StructSeries"
        },
        "fieldPath": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/StringConstant"
          },
          "description": "Path segments that are joined to locate a nested numeric field. Use dots to traverse objects (e.g. `a.b.c`) and 0-based brackets to index into arrays (e.g. `items[0].value`). A bare numeric name like `0` refers to an object key named \"0\"; use [0] to index into an array. Rows where the path is invalid or the value cannot be converted to the specified type are filtered out."
        },
        "dataType": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericDataType"
            }
          ],
          "description": "The type the numeric data will be cast to, defaults to FLOAT64"
        }
      },
      "required": [
        "input"
      ]
    },
    "ExtractStructFromStructSeries": {
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/StructSeries"
        },
        "fieldPath": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/StringConstant"
          },
          "description": "Path segments that are joined to locate a nested struct field. Use dots to traverse objects (e.g. `a.b.c`) and 0-based brackets to index into arrays (e.g. `items[0].value`). A bare numeric name like `0` refers to an object key named \"0\"; use [0] to index into an array. Returns an empty struct when the path does not resolve to a valid JSON object."
        }
      },
      "required": [
        "input"
      ]
    },
    "ExtremaRangesV2": {
      "description": "Produces ranges for the selected extrema type.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/NumericSeries"
        },
        "minimumProminence": {
          "allOf": [
            {
              "$ref": "#/definitions/DoubleConstant"
            }
          ],
          "description": "The minimum topographic prominence for an extrema to be returned."
        },
        "selection": {
          "$ref": "#/definitions/PeakType"
        }
      },
      "required": [
        "input",
        "selection"
      ]
    },
    "FftWindow": {
      "type": "string",
      "enum": [
        "BLACKMAN",
        "HANN",
        "HAMMING",
        "RECT"
      ]
    },
    "FillLimit": {
      "description": "How far forward in time a sample's value may be carried.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "duration"
          ]
        },
        "duration": {
          "$ref": "#/definitions/DurationConstant"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "duration",
        "duration": {
          "type": "literal",
          "literal": {
            "seconds": 1,
            "nanos": 1
          }
        }
      }
    },
    "FillStrategy": {
      "description": "Default strategy for filling gaps when aligning multi-input series.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "forwardFill"
          ]
        },
        "forwardFill": {
          "$ref": "#/definitions/ForwardFill"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "forwardFill",
        "forwardFill": {
          "limit": {
            "type": "duration",
            "duration": {
              "type": "literal",
              "literal": {
                "seconds": 1,
                "nanos": 1
              }
            }
          }
        }
      }
    },
    "FilterByExpressionSeries": {
      "description": "Keeps points from the base series where the boolean expression evaluates to true. Only outputs timestamps where all input series have an entry for that timestamp, or a value can be filled using the interpolation configuration.",
      "type": "object",
      "properties": {
        "base": {
          "type": "string",
          "x-alias": "LocalVariableName",
          "description": "The variable name for the series that will be returned by this filter. The expression can filter points conditional on multiple series. The base defines which series' points will be returned after applying all the filters."
        },
        "inputs": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/NumericSeries"
          },
          "x-map-key": "LocalVariableName",
          "description": "A map containing all the numeric series present in the expression."
        },
        "expression": {
          "type": "string",
          "description": "An expression that evaluates to a boolean. For example - a > 5."
        },
        "interpolationConfiguration": {
          "allOf": [
            {
              "$ref": "#/definitions/InterpolationConfiguration"
            }
          ],
          "description": "Defaults to forward fill interpolation with a 1s interpolation radius",
          "x-deprecated": "Setting interpolation on this node is deprecated."
        }
      },
      "required": [
        "base",
        "expression"
      ]
    },
    "FilteredDataset": {
      "description": "Applies a conjunctive tag predicate to the series produced by the inner dataset. Resolved by threading tag filters into channel specs and folding against known tag assignments; does not add a resolved numeric node.",
      "type": "object",
      "properties": {
        "input": {
          "allOf": [
            {
              "$ref": "#/definitions/Dataset"
            }
          ],
          "description": "The underlying dataset to filter."
        },
        "predicate": {
          "allOf": [
            {
              "$ref": "#/definitions/TagPredicate"
            }
          ],
          "description": "Conjunctive tag predicate used to keep matching series."
        }
      },
      "required": [
        "input",
        "predicate"
      ]
    },
    "FirstPointMatchingCondition": {
      "description": "The first point in the output range will be the first point where the condition evaluates to true.",
      "type": "object",
      "properties": {}
    },
    "FloorDivide": {
      "description": "Divides left by right pointwise and rounds down to the nearest integer.",
      "type": "object",
      "properties": {
        "left": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericSeries"
            }
          ],
          "description": "Numerator."
        },
        "right": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericSeries"
            }
          ],
          "description": "Denominator."
        }
      },
      "required": [
        "left",
        "right"
      ]
    },
    "ForwardFill": {
      "description": "At each grid point, carries the most recent prior sample value forward. The value is held only up to the configured `limit`; grid points with no prior sample within that window are left empty.",
      "type": "object",
      "properties": {
        "limit": {
          "$ref": "#/definitions/FillLimit"
        }
      },
      "required": [
        "limit"
      ]
    },
    "ForwardFillInterpolation": {
      "type": "object",
      "properties": {
        "interpolationRadius": {
          "$ref": "#/definitions/DurationConstant"
        }
      },
      "required": [
        "interpolationRadius"
      ]
    },
    "ForwardFillResampleInterpolationConfiguration": {
      "description": "Forward fill interpolation for resampling. Rounds the earliest and latest timestamp up to the nearest interval multiple and generates timestamps at the given interval between the new earliest and latest timestamps. For every timestamp in the resampled timestamps, takes the last known value before the timestamp as the value.",
      "type": "object",
      "properties": {}
    },
    "FunctionDerivedSeries": {
      "description": "A reference to a derived series resulting from applying a function to a set of arguments.",
      "type": "object",
      "properties": {
        "moduleName": {
          "$ref": "#/definitions/StringConstant"
        },
        "functionName": {
          "$ref": "#/definitions/StringConstant"
        },
        "versionReference": {
          "$ref": "#/definitions/ModuleVersionReference"
        },
        "functionArgs": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/FunctionParameterValue"
          },
          "x-map-key": "FunctionParameterName",
          "description": "Map of function input names to their values. The function inputs must match the function's parameter names and types. An input must be specified for each of the referenced function's parameters."
        }
      },
      "required": [
        "moduleName",
        "functionName",
        "versionReference"
      ]
    },
    "FunctionParameterValue": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "variable",
            "value"
          ]
        },
        "variable": {
          "type": "string",
          "x-alias": "VariableName"
        },
        "value": {
          "$ref": "#/definitions/VariableValue"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "variable",
        "variable": "string"
      }
    },
    "FunctionVariables": {
      "type": "object",
      "properties": {
        "variables": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/VariableValue"
          },
          "x-map-key": "VariableName"
        },
        "subFunctionVariables": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/FunctionVariables"
          },
          "x-map-key": "FunctionReference"
        }
      }
    },
    "GreaterThanOrEqualToSeries": {
      "description": "Compares two numeric series point-wise, producing true where left >= right and false otherwise.",
      "type": "object",
      "properties": {
        "left": {
          "$ref": "#/definitions/NumericSeries"
        },
        "right": {
          "$ref": "#/definitions/NumericSeries"
        }
      },
      "required": [
        "left",
        "right"
      ]
    },
    "GreaterThanSeries": {
      "description": "Compares two numeric series point-wise, producing true where left > right and false otherwise.",
      "type": "object",
      "properties": {
        "left": {
          "$ref": "#/definitions/NumericSeries"
        },
        "right": {
          "$ref": "#/definitions/NumericSeries"
        }
      },
      "required": [
        "left",
        "right"
      ]
    },
    "GroupByAggregationBuilder": {
      "description": "Groups points by a tag selection and a timestamp policy and applies the operator.",
      "type": "object",
      "properties": {
        "input": {
          "allOf": [
            {
              "$ref": "#/definitions/Series"
            }
          ],
          "description": "The series to group and aggregate."
        },
        "tags": {
          "allOf": [
            {
              "$ref": "#/definitions/GroupByTags"
            }
          ],
          "description": "Selects which tag keys form the grouping key: `GroupByTags.Current()` keeps the input series' currently selected tags, or `GroupByTags.Subset([...])` restricts the grouping to a subset of them."
        },
        "timestamp": {
          "allOf": [
            {
              "$ref": "#/definitions/GroupByTimestamp"
            }
          ],
          "description": "Selects how timestamps participate in the grouping key: `GroupByTimestamp.Current()` groups on existing timestamps, and `GroupByTimestamp.Every(duration)` buckets points into fixed-size, epoch-aligned tumbling windows."
        },
        "alignment": {
          "allOf": [
            {
              "$ref": "#/definitions/GroupByAlignment"
            }
          ],
          "description": "Optionally aligns source tag groups that map to the same output tag group before aggregation. Alignment is currently supported only with `GroupByTimestamp.Current()` and built-in numeric aggregation operators."
        }
      },
      "required": [
        "input",
        "tags",
        "timestamp"
      ]
    },
    "GroupByAlignment": {
      "description": "Selects how source tag groups are aligned before aggregation.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "contextDefaults"
          ]
        },
        "contextDefaults": {
          "allOf": [
            {
              "$ref": "#/definitions/Empty"
            }
          ],
          "description": "Use the compute context's `defaultAlignmentStrategy` and `defaultFillStrategy`."
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "contextDefaults",
        "contextDefaults": {}
      }
    },
    "GroupBySubsetTags": {
      "type": "object",
      "properties": {
        "tags": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/StringConstant"
          },
          "uniqueItems": true,
          "description": "Tag keys to group by."
        }
      }
    },
    "GroupByTags": {
      "description": "Selects which tag keys form the grouping key.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "current",
            "subset"
          ]
        },
        "current": {
          "allOf": [
            {
              "$ref": "#/definitions/Empty"
            }
          ],
          "description": "Group by the tags currently selected on the input series."
        },
        "subset": {
          "allOf": [
            {
              "$ref": "#/definitions/GroupBySubsetTags"
            }
          ],
          "description": "Group by exactly the listed tag keys. Must be a (non-strict) subset of the input series's currently selected tags."
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "current",
        "current": {}
      }
    },
    "GroupByTimestamp": {
      "description": "Selects how timestamps participate in the grouping key.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "current",
            "every"
          ]
        },
        "current": {
          "allOf": [
            {
              "$ref": "#/definitions/Empty"
            }
          ],
          "description": "Use the current timestamps."
        },
        "every": {
          "allOf": [
            {
              "$ref": "#/definitions/compute.api.Duration"
            }
          ],
          "description": "Bucket timestamps into a tumbling fixed-size, epoch-aligned window. A point at timestamp `t` (nanoseconds) falls into the bucket `[floor(t / window) * window, +window)`, and one aggregated point is emitted per bucket per tag grouping at the bucket start timestamp."
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "current",
        "current": {}
      }
    },
    "GroupWithinRangesSeriesV2": {
      "description": "Aggregates the input series within each supplied range and emits one point at the range start. Empty ranges emit no point, and ranges without a start use the compute request start.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/NumericSeries"
        },
        "ranges": {
          "allOf": [
            {
              "$ref": "#/definitions/RangeSeries"
            }
          ],
          "description": "One output point is emitted per range, at the range's start."
        },
        "aggregation": {
          "$ref": "#/definitions/NumericAggregationOperator"
        }
      },
      "required": [
        "input",
        "ranges",
        "aggregation"
      ]
    },
    "HashSubsampleSampling": {
      "description": "Keeps approximately 1/N of raw points via a stateless hash of each point's timestamp.",
      "type": "object",
      "properties": {
        "n": {
          "allOf": [
            {
              "$ref": "#/definitions/IntegerConstant"
            }
          ],
          "description": "Keep approximately one out of every N points. Must be > 1."
        }
      },
      "required": [
        "n"
      ]
    },
    "HighPassConfiguration": {
      "type": "object",
      "properties": {
        "cutoffFrequency": {
          "$ref": "#/definitions/DoubleConstant"
        }
      },
      "required": [
        "cutoffFrequency"
      ]
    },
    "IdentityDimension": {
      "description": "Injects the value of a type's primary key, under a tag key equal to the primary key's property name by default. The primary key is read when the query runs, so it follows changes to the type. Only asset branches of an asset with the type have a value; every other branch, including run branches, gets the reserved value `NOMINAL_ABSENT`.",
      "type": "object",
      "properties": {
        "typeRid": {
          "allOf": [
            {
              "$ref": "#/definitions/StringConstant"
            }
          ],
          "description": "Resource identifier of the type whose primary key identifies the asset."
        }
      },
      "required": [
        "typeRid"
      ]
    },
    "IntegerConstant": {
      "description": "An integer constant that can be a literal value or a named variable reference.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "literal",
            "variable"
          ]
        },
        "literal": {
          "type": "integer",
          "format": "int32",
          "description": "Create from a literal integer value."
        },
        "variable": {
          "type": "string",
          "x-alias": "VariableName",
          "description": "Create from a named reference name."
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "literal",
        "literal": 1
      }
    },
    "IntegralSeries": {
      "description": "Calculates the running sum of the area underneath a series using the trapezoidal rule.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/NumericSeries"
        },
        "startTimestamp": {
          "$ref": "#/definitions/TimestampConstant"
        },
        "timeUnit": {
          "allOf": [
            {
              "$ref": "#/definitions/TimeUnit"
            }
          ],
          "description": "Time unit used to calculate the integral. Defaults to seconds if not specified."
        }
      },
      "required": [
        "input",
        "startTimestamp"
      ]
    },
    "InterpolationConfiguration": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "forwardFillInterpolation"
          ]
        },
        "forwardFillInterpolation": {
          "$ref": "#/definitions/ForwardFillInterpolation"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "forwardFillInterpolation",
        "forwardFillInterpolation": {
          "interpolationRadius": {
            "type": "literal",
            "literal": {
              "seconds": 1,
              "nanos": 1
            }
          }
        }
      }
    },
    "IntersectRanges": {
      "description": "Produces the intersection of the input ranges: the ranges of time covered by every input. For best performance, pass inputs in the order in which they should be evaluated, listing the ranges that are cheapest to compute first.",
      "type": "object",
      "properties": {
        "inputs": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/RangeSeries"
          }
        }
      }
    },
    "IntervalAnchor": {
      "description": "Selects which boundary of an interval to use as its anchor.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "intervalStart",
            "intervalEnd",
            "eventInInterval",
            "rangeInInterval"
          ]
        },
        "intervalStart": {
          "allOf": [
            {
              "$ref": "#/definitions/IntervalStartTimeShift"
            }
          ],
          "description": "Uses the interval's start timestamp."
        },
        "intervalEnd": {
          "allOf": [
            {
              "$ref": "#/definitions/IntervalEndTimeShift"
            }
          ],
          "description": "Uses the interval's end timestamp."
        },
        "eventInInterval": {
          "$ref": "#/definitions/EventAnchor"
        },
        "rangeInInterval": {
          "$ref": "#/definitions/RangesAnchor"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "intervalStart",
        "intervalStart": {}
      }
    },
    "IntervalEndTimeShift": {
      "description": "Shift by each tagging interval's resolved end; resolution throws if end is missing.",
      "type": "object",
      "properties": {}
    },
    "IntervalIndexTag": {
      "type": "object",
      "properties": {}
    },
    "IntervalSource": {
      "description": "Where the intervals come from and how each is labeled.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "events",
            "ranges"
          ]
        },
        "events": {
          "$ref": "#/definitions/EventIntervalSource"
        },
        "ranges": {
          "$ref": "#/definitions/RangeIntervalSource"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "events",
        "events": {
          "query": {
            "type": "searchText",
            "searchText": {
              "type": "literal",
              "literal": "string"
            }
          },
          "tagBy": [
            {
              "type": "intervalIndex",
              "intervalIndex": {}
            }
          ]
        }
      }
    },
    "IntervalStartTimeShift": {
      "description": "Shift by each tagging interval's resolved start; resolution throws if start is missing.",
      "type": "object",
      "properties": {}
    },
    "IntervalStartTimestampTag": {
      "type": "object",
      "properties": {}
    },
    "LessThanOrEqualToSeries": {
      "description": "Compares two numeric series point-wise, producing true where left <= right and false otherwise.",
      "type": "object",
      "properties": {
        "left": {
          "$ref": "#/definitions/NumericSeries"
        },
        "right": {
          "$ref": "#/definitions/NumericSeries"
        }
      },
      "required": [
        "left",
        "right"
      ]
    },
    "LessThanSeries": {
      "description": "Compares two numeric series point-wise, producing true where left < right and false otherwise.",
      "type": "object",
      "properties": {
        "left": {
          "$ref": "#/definitions/NumericSeries"
        },
        "right": {
          "$ref": "#/definitions/NumericSeries"
        }
      },
      "required": [
        "left",
        "right"
      ]
    },
    "LiteralRange": {
      "description": "A literal range of values.",
      "type": "object",
      "properties": {
        "startTimestamp": {
          "$ref": "#/definitions/TimestampConstant"
        },
        "endTimestamp": {
          "$ref": "#/definitions/TimestampConstant"
        },
        "tags": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        }
      }
    },
    "LiteralRanges": {
      "description": "A list of literal ranges.",
      "type": "object",
      "properties": {
        "literalRanges": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/LiteralRange"
          }
        }
      }
    },
    "Ln": {
      "description": "Computes the natural logarithm (base e) of each value.",
      "type": "object",
      "properties": {
        "x": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericSeries"
            }
          ],
          "description": "Input numeric series (positive values)."
        }
      },
      "required": [
        "x"
      ]
    },
    "Log10": {
      "description": "Computes the base-10 logarithm of each value.",
      "type": "object",
      "properties": {
        "x": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericSeries"
            }
          ],
          "description": "Input numeric series (positive values)."
        }
      },
      "required": [
        "x"
      ]
    },
    "LogArgFilterOperator": {
      "description": "Matches against a single log arg.",
      "type": "object",
      "properties": {
        "key": {
          "$ref": "#/definitions/StringConstant"
        },
        "operator": {
          "$ref": "#/definitions/LogRegexFilterOperator"
        }
      },
      "required": [
        "key",
        "operator"
      ]
    },
    "LogExactMatchCaseInsensitiveFilter": {
      "description": "Filters points such that the log message in each point contains an exact case-insensitive match of the provided token.",
      "type": "object",
      "properties": {
        "token": {
          "type": "string"
        }
      },
      "required": [
        "token"
      ]
    },
    "LogFilterOperator": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "regexFilter",
            "exactMatchCaseInsensitiveFilter",
            "arg",
            "and",
            "or",
            "not"
          ]
        },
        "regexFilter": {
          "$ref": "#/definitions/LogRegexFilterOperator"
        },
        "exactMatchCaseInsensitiveFilter": {
          "$ref": "#/definitions/LogExactMatchCaseInsensitiveFilter"
        },
        "arg": {
          "$ref": "#/definitions/LogArgFilterOperator"
        },
        "and": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/LogFilterOperator"
          }
        },
        "or": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/LogFilterOperator"
          }
        },
        "not": {
          "$ref": "#/definitions/LogFilterOperator"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "regexFilter",
        "regexFilter": {
          "regex": "string"
        }
      }
    },
    "LogFilterSeries": {
      "description": "Outputs only values of the log plot that satisfy the filter.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/LogSeries"
        },
        "operator": {
          "$ref": "#/definitions/LogFilterOperator"
        }
      },
      "required": [
        "input",
        "operator"
      ]
    },
    "LogRegexFilterOperator": {
      "description": "Matches a text value against the given re2 regular expression. Regular expression syntax: https://github.com/google/re2/wiki/Syntax.",
      "type": "object",
      "properties": {
        "regex": {
          "type": "string"
        }
      },
      "required": [
        "regex"
      ]
    },
    "LogSelectTagsSeries": {
      "description": "Subsets the tag dimensions of the input log series to the given tag keys. Preserves the input series' cardinality: points that share the selected keys but differ on dropped keys remain distinct.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/LogSeries"
        },
        "tagKeys": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/StringConstant"
          },
          "uniqueItems": true
        }
      },
      "required": [
        "input"
      ]
    },
    "LogSeries": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "raw",
            "channel",
            "derived",
            "selectLogs",
            "union",
            "filter",
            "timeShift",
            "toStartOfInterval",
            "filterByTag",
            "selectTags"
          ]
        },
        "raw": {
          "$ref": "#/definitions/Reference"
        },
        "channel": {
          "$ref": "#/definitions/ChannelSeries"
        },
        "derived": {
          "$ref": "#/definitions/DerivedSeries"
        },
        "selectLogs": {
          "$ref": "#/definitions/SelectSeries"
        },
        "union": {
          "$ref": "#/definitions/LogUnionSeries"
        },
        "filter": {
          "$ref": "#/definitions/LogFilterSeries"
        },
        "timeShift": {
          "$ref": "#/definitions/LogTimeShiftSeries"
        },
        "toStartOfInterval": {
          "$ref": "#/definitions/LogToStartOfIntervalSeries"
        },
        "filterByTag": {
          "$ref": "#/definitions/LogTagFilterSeries"
        },
        "selectTags": {
          "$ref": "#/definitions/LogSelectTagsSeries"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "raw",
        "raw": {
          "name": "string"
        }
      }
    },
    "LogTagFilterSeries": {
      "description": "Applies a tag predicate to the log series produced by input.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/LogSeries"
        },
        "predicate": {
          "$ref": "#/definitions/TagPredicate"
        }
      },
      "required": [
        "input",
        "predicate"
      ]
    },
    "LogTimeShiftSeries": {
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/LogSeries"
        },
        "duration": {
          "$ref": "#/definitions/DurationConstant"
        }
      },
      "required": [
        "input",
        "duration"
      ]
    },
    "LogToStartOfIntervalSeries": {
      "description": "Snaps each point's timestamp to the start of its enclosing fixed-size time bucket. Buckets are epoch-aligned: a point at timestamp `t` (nanoseconds) is rewritten to `floor(t / window) * window`. Values and tag groupings are preserved; aggregation of points that collide on the snapped timestamp is the responsibility of downstream nodes.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/LogSeries"
        },
        "window": {
          "$ref": "#/definitions/compute.api.Duration"
        }
      },
      "required": [
        "input",
        "window"
      ]
    },
    "LogUnionOperation": {
      "type": "string",
      "enum": [
        "KEEP_ALL"
      ],
      "x-enum-descriptions": {
        "KEEP_ALL": "Keeps all points if multiple series contain points with a duplicate timestamp."
      }
    },
    "LogUnionSeries": {
      "description": "Combines multiple log series together and outputs a single series. The strategy to merge input values with the same timestamp together is specified in the operation field.",
      "type": "object",
      "properties": {
        "input": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/LogSeries"
          }
        },
        "operation": {
          "allOf": [
            {
              "$ref": "#/definitions/LogUnionOperation"
            }
          ],
          "description": "The strategy to merge points with duplicate timestamps."
        }
      },
      "required": [
        "operation"
      ]
    },
    "LogarithmicCurve": {
      "type": "object",
      "properties": {}
    },
    "LowPassConfiguration": {
      "type": "object",
      "properties": {
        "cutoffFrequency": {
          "$ref": "#/definitions/DoubleConstant"
        }
      },
      "required": [
        "cutoffFrequency"
      ]
    },
    "MagnitudeScaling": {
      "type": "string",
      "enum": [
        "LINEAR",
        "MAGNITUDE_DB_10",
        "MAGNITUDE_DB_20"
      ],
      "x-enum-descriptions": {
        "LINEAR": "Linear scaling of the magnitude.",
        "MAGNITUDE_DB_10": "Scales the magnitude via 10 * log10(magnitude).",
        "MAGNITUDE_DB_20": "Scales the magnitude via 20 * log10(magnitude)."
      }
    },
    "MathConstant": {
      "description": "Math constants referenceable by name.",
      "type": "string",
      "enum": [
        "PI",
        "TAU",
        "E"
      ],
      "x-enum-descriptions": {
        "PI": "The circle constant π (dimensionless).",
        "TAU": "The circle constant τ = 2π (dimensionless).",
        "E": "Euler's number e (dimensionless)."
      }
    },
    "MaxSeries": {
      "description": "For every timestamp specified in the input series, outputs a value that is the maximum for that timestamp across all input series. Only outputs timestamps where all input series have an entry for that timestamp, subject to interpolation.",
      "type": "object",
      "properties": {
        "inputs": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/NumericSeries"
          },
          "description": "Input series across which to take the pointwise maximum"
        },
        "interpolationConfiguration": {
          "allOf": [
            {
              "$ref": "#/definitions/InterpolationConfiguration"
            }
          ],
          "description": "Defaults to forward fill interpolation with a 1s interpolation radius",
          "x-deprecated": "Setting interpolation on this node is deprecated."
        }
      }
    },
    "Maximum": {
      "description": "The maximum value of points inside the time window.",
      "type": "object",
      "properties": {}
    },
    "MeanSeries": {
      "description": "For every timestamp specified in the input series, outputs a value that is the mean for that timestamp across all input series. Only outputs timestamps where all input series have an entry for that timestamp, subject to interpolation.",
      "type": "object",
      "properties": {
        "inputs": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/NumericSeries"
          },
          "description": "Input series across which to take the pointwise mean"
        },
        "interpolationConfiguration": {
          "allOf": [
            {
              "$ref": "#/definitions/InterpolationConfiguration"
            }
          ],
          "description": "Defaults to forward fill interpolation with a 1s interpolation radius",
          "x-deprecated": "Setting interpolation on this node is deprecated."
        }
      }
    },
    "MinMaxThresholdOperator": {
      "type": "string",
      "enum": [
        "OUTSIDE_BOUNDS",
        "OUTSIDE_OR_EQUAL_TO_BOUNDS",
        "INSIDE_BOUNDS",
        "INSIDE_OR_EQUAL_TO_BOUNDS"
      ]
    },
    "MinMaxThresholdRanges": {
      "description": "Produces a list of ranges for which the threshold condition is satisfied.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/NumericSeries"
        },
        "lowerBound": {
          "$ref": "#/definitions/DoubleConstant"
        },
        "upperBound": {
          "$ref": "#/definitions/DoubleConstant"
        },
        "operator": {
          "$ref": "#/definitions/MinMaxThresholdOperator"
        },
        "persistenceWindowConfiguration": {
          "$ref": "#/definitions/PersistenceWindowConfiguration"
        }
      },
      "required": [
        "input",
        "lowerBound",
        "upperBound",
        "operator"
      ]
    },
    "MinSeries": {
      "description": "For every timestamp specified in the input series, outputs a value that is the minimum for that timestamp across all input series. Only outputs timestamps where all input series have an entry for that timestamp, subject to interpolation.",
      "type": "object",
      "properties": {
        "inputs": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/NumericSeries"
          },
          "description": "Input series across which to take the pointwise minimum"
        },
        "interpolationConfiguration": {
          "allOf": [
            {
              "$ref": "#/definitions/InterpolationConfiguration"
            }
          ],
          "description": "Defaults to forward fill interpolation with a 1s interpolation radius",
          "x-deprecated": "Setting interpolation on this node is deprecated."
        }
      }
    },
    "Minimum": {
      "description": "The minimum value of points inside the time window.",
      "type": "object",
      "properties": {}
    },
    "ModuleVersionReference": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "pinned"
          ]
        },
        "pinned": {
          "$ref": "#/definitions/PinnedModuleVersionReference"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "pinned",
        "pinned": {
          "version": {
            "type": "literal",
            "literal": "string"
          }
        }
      }
    },
    "Modulo": {
      "description": "Computes the remainder of left divided by right pointwise.",
      "type": "object",
      "properties": {
        "left": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericSeries"
            }
          ],
          "description": "Dividend."
        },
        "right": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericSeries"
            }
          ],
          "description": "Divisor."
        }
      },
      "required": [
        "left",
        "right"
      ]
    },
    "Multiply": {
      "description": "Multiplies two numeric series pointwise.",
      "type": "object",
      "properties": {
        "left": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericSeries"
            }
          ],
          "description": "Left-hand operand."
        },
        "right": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericSeries"
            }
          ],
          "description": "Right-hand operand."
        }
      },
      "required": [
        "left",
        "right"
      ]
    },
    "NamedSeries": {
      "type": "object",
      "properties": {
        "name": {
          "allOf": [
            {
              "$ref": "#/definitions/StringConstant"
            }
          ],
          "description": "Name of the new derived series."
        },
        "definition": {
          "allOf": [
            {
              "$ref": "#/definitions/Series"
            }
          ],
          "description": "Compute expression defining the series values."
        }
      },
      "required": [
        "name",
        "definition"
      ]
    },
    "Negate": {
      "description": "Negates each value in the series pointwise (multiplies by -1).",
      "type": "object",
      "properties": {
        "x": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericSeries"
            }
          ],
          "description": "Input numeric series."
        }
      },
      "required": [
        "x"
      ]
    },
    "NegativeValueConfiguration": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "allowNegativeValues",
            "setNegativeValuesToZero",
            "excludeNegativeValues"
          ]
        },
        "allowNegativeValues": {
          "allOf": [
            {
              "$ref": "#/definitions/AllowNegativeValues"
            }
          ],
          "description": "Include negative output values"
        },
        "setNegativeValuesToZero": {
          "allOf": [
            {
              "$ref": "#/definitions/SetNegativeValuesToZero"
            }
          ],
          "description": "Set negative output values to zero"
        },
        "excludeNegativeValues": {
          "allOf": [
            {
              "$ref": "#/definitions/ExcludeNegativeValues"
            }
          ],
          "description": "Exclude points with negative output values"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "allowNegativeValues",
        "allowNegativeValues": {}
      }
    },
    "NotEqualToSeries": {
      "description": "Compares two numeric series point-wise, producing true where left != right and false otherwise.",
      "type": "object",
      "properties": {
        "left": {
          "$ref": "#/definitions/NumericSeries"
        },
        "right": {
          "$ref": "#/definitions/NumericSeries"
        }
      },
      "required": [
        "left",
        "right"
      ]
    },
    "NotRanges": {
      "description": "The not ranges node will invert the ranges, filling the negative space in time.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/RangeSeries"
        }
      },
      "required": [
        "input"
      ]
    },
    "Numeric1dArraySelectTagsSeries": {
      "description": "Subsets the tag dimensions of the input numeric 1d array series to the given tag keys. Preserves the input series' cardinality: points that share the selected keys but differ on dropped keys remain distinct.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/Numeric1dArraySeries"
        },
        "tagKeys": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/StringConstant"
          },
          "uniqueItems": true
        }
      },
      "required": [
        "input"
      ]
    },
    "Numeric1dArraySeries": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "channel",
            "raw",
            "derived",
            "selectNumeric1dArray",
            "extractFromStruct",
            "toStartOfInterval",
            "timeShift",
            "filterByTag",
            "selectTags"
          ]
        },
        "channel": {
          "$ref": "#/definitions/ChannelSeries"
        },
        "raw": {
          "$ref": "#/definitions/Reference"
        },
        "derived": {
          "$ref": "#/definitions/DerivedSeries"
        },
        "selectNumeric1dArray": {
          "$ref": "#/definitions/SelectSeries"
        },
        "extractFromStruct": {
          "$ref": "#/definitions/ExtractNumeric1dArrayFromStructSeries"
        },
        "toStartOfInterval": {
          "$ref": "#/definitions/Numeric1dArrayToStartOfIntervalSeries"
        },
        "timeShift": {
          "$ref": "#/definitions/Numeric1dArrayTimeShiftSeries"
        },
        "filterByTag": {
          "$ref": "#/definitions/Numeric1dArrayTagFilterSeries"
        },
        "selectTags": {
          "$ref": "#/definitions/Numeric1dArraySelectTagsSeries"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "channel",
        "channel": {
          "type": "dataSource",
          "dataSource": {
            "dataSourceRid": {
              "type": "literal",
              "literal": "string"
            },
            "channel": {
              "type": "literal",
              "literal": "string"
            },
            "tags": {
              "key": {
                "type": "literal",
                "literal": "string"
              }
            },
            "tagFilters": {
              "type": "single",
              "single": {
                "key": {
                  "type": "literal",
                  "literal": "string"
                },
                "values": [
                  {
                    "type": "literal",
                    "literal": "string"
                  }
                ],
                "operator": "IN"
              }
            },
            "tagsToGroupBy": [
              "string"
            ],
            "groupByTags": [
              {
                "type": "literal",
                "literal": "string"
              }
            ]
          }
        }
      }
    },
    "Numeric1dArrayTagFilterSeries": {
      "description": "Applies a tag predicate to the numeric 1d array series produced by input.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/Numeric1dArraySeries"
        },
        "predicate": {
          "$ref": "#/definitions/TagPredicate"
        }
      },
      "required": [
        "input",
        "predicate"
      ]
    },
    "Numeric1dArrayTimeShiftSeries": {
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/Numeric1dArraySeries"
        },
        "duration": {
          "$ref": "#/definitions/DurationConstant"
        }
      },
      "required": [
        "input",
        "duration"
      ]
    },
    "Numeric1dArrayToStartOfIntervalSeries": {
      "description": "Snaps each point's timestamp to the start of its enclosing fixed-size time bucket. Buckets are epoch-aligned: a point at timestamp `t` (nanoseconds) is rewritten to `floor(t / window) * window`. Values and tag groupings are preserved; aggregation of points that collide on the snapped timestamp is the responsibility of downstream nodes.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/Numeric1dArraySeries"
        },
        "window": {
          "$ref": "#/definitions/compute.api.Duration"
        }
      },
      "required": [
        "input",
        "window"
      ]
    },
    "NumericAggregation": {
      "description": "Aggregates an input series using the given operator. The shape of the aggregation (rolling time window, rolling point-count window, or group by) is selected by the aggregation builder passed as `input`. The operator must be compatible with that builder's series, producing a numeric output: count reduces a series of any type, whereas SUM requires a numeric series.",
      "type": "object",
      "properties": {
        "input": {
          "allOf": [
            {
              "$ref": "#/definitions/AggregationBuilder"
            }
          ],
          "description": "The aggregation shape to apply the operator over: a rolling time window, a rolling point-count window, or a group-by."
        },
        "operator": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericAggregationOperator"
            }
          ],
          "description": "The reduction applied to each window or group (e.g. sum, mean, percentile). Must be compatible with the input series, producing a numeric output: Count works on any input series, whereas reductions like Sum require a numeric series."
        }
      },
      "required": [
        "input",
        "operator"
      ]
    },
    "NumericAggregationFunction": {
      "description": "DEPRECATED. Use `NumericAggregationOperator` instead.",
      "type": "string",
      "enum": [
        "SUM",
        "MEAN",
        "MIN",
        "MAX",
        "COUNT",
        "STANDARD_DEVIATION",
        "ROOT_MEAN_SQUARE"
      ]
    },
    "NumericAggregationOperator": {
      "description": "Unified numeric aggregation used across rolling windows, plain aggregates, range aggregates, union merges, and per-bucket summarization.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "sum",
            "average",
            "min",
            "max",
            "count",
            "standardDeviation",
            "rootMeanSquare",
            "percentile",
            "udf"
          ]
        },
        "sum": {
          "$ref": "#/definitions/Summation"
        },
        "average": {
          "$ref": "#/definitions/Average"
        },
        "min": {
          "$ref": "#/definitions/Minimum"
        },
        "max": {
          "$ref": "#/definitions/Maximum"
        },
        "count": {
          "$ref": "#/definitions/Count"
        },
        "standardDeviation": {
          "$ref": "#/definitions/StandardDeviation"
        },
        "rootMeanSquare": {
          "$ref": "#/definitions/RootMeanSquare"
        },
        "percentile": {
          "$ref": "#/definitions/Percentile"
        },
        "udf": {
          "$ref": "#/definitions/NumericAggregationUdf"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "sum",
        "sum": {}
      }
    },
    "NumericAggregationUdf": {
      "description": "A user-defined numeric aggregation. The aggregation builder controls grouping/windowing. Supported Rust entrypoints accept grouped value vectors, optionally with leading sample timestamps, and return either one numeric value or timestamped numeric point(s), e.g. `fn rms(values: Vec<f64>) -> f64`, `fn energy(timestamp_ns: Vec<i64>, values: Vec<f64>) -> f64`, `fn first(timestamp_ns: Vec<i64>, values: Vec<f64>) -> (i64, f64)`, or `fn passthrough(timestamp_ns: Vec<i64>, values: Vec<f64>) -> Vec<(i64, f64)>`. The value vector's element type follows the aggregated series: `Vec<f64>` for a numeric series, and `Vec<String>` for a categorical or struct series, where each struct row arrives as a JSON object. A UDF over a combined struct series may instead take one vector per named struct field it needs, e.g. `fn mean_product(channel0: Vec<f64>, channel1: Vec<f64>) -> f64`. Parameter names select the fields, so a subset of the struct's fields in any order is accepted.",
      "type": "object",
      "properties": {
        "source": {
          "$ref": "#/definitions/UdfSource"
        }
      },
      "required": [
        "source"
      ]
    },
    "NumericApproximateFilterSeries": {
      "description": "Outputs the values of the numeric plot value that are approximately equal to the threshold value.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/NumericSeries"
        },
        "threshold": {
          "$ref": "#/definitions/DoubleConstant"
        },
        "tolerance": {
          "$ref": "#/definitions/DoubleConstant"
        },
        "operator": {
          "$ref": "#/definitions/ApproximateThresholdOperator"
        }
      },
      "required": [
        "input",
        "threshold",
        "tolerance",
        "operator"
      ]
    },
    "NumericConstantResampleInterpolationConfiguration": {
      "description": "Fills all empty resample intervals with a single constant value.\n\nIf a resampled time interval (bucket) contains no data points from the input, it will be assigned the specified 'constant' as a default value. This applies to gaps at the start of the series, between data points, and at the end.",
      "type": "object",
      "properties": {
        "constant": {
          "$ref": "#/definitions/DoubleConstant"
        }
      },
      "required": [
        "constant"
      ]
    },
    "NumericDataType": {
      "description": "Supported numeric data types for value casting.",
      "type": "string",
      "enum": [
        "INT64",
        "FLOAT64",
        "UINT64"
      ]
    },
    "NumericEqualityRangesV2": {
      "description": "Produces ranges where all numeric inputs are equal or are not all equal.",
      "type": "object",
      "properties": {
        "inputs": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/NumericSeries"
          },
          "description": "The series compared against each other. At least two are required."
        },
        "tolerance": {
          "allOf": [
            {
              "$ref": "#/definitions/DoubleConstant"
            }
          ],
          "description": "Maximum spread between the inputs still counted as equal. Defaults to zero, i.e. exact equality."
        },
        "minPoints": {
          "allOf": [
            {
              "$ref": "#/definitions/IntegerConstant"
            }
          ],
          "description": "Minimum number of matching points. Defaults to 1."
        },
        "minDuration": {
          "allOf": [
            {
              "$ref": "#/definitions/compute.api.Duration"
            }
          ],
          "description": "Minimum matching duration. Defaults to one nanosecond."
        },
        "rangeStart": {
          "allOf": [
            {
              "$ref": "#/definitions/RangeStart"
            }
          ],
          "description": "Selects whether the output begins at the first match or after persistence is satisfied."
        },
        "equalityOperator": {
          "$ref": "#/definitions/EqualityOperator"
        }
      },
      "required": [
        "equalityOperator"
      ]
    },
    "NumericFilterTransformationSeries": {
      "description": "Outputs the input points whose timestamps fall within the supplied ranges.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/NumericSeries"
        },
        "filter": {
          "allOf": [
            {
              "$ref": "#/definitions/RangeSeries"
            }
          ],
          "description": "Keeps input points whose timestamps fall inside any of these ranges."
        }
      },
      "required": [
        "input",
        "filter"
      ]
    },
    "NumericFilterWhereSeries": {
      "description": "Outputs numeric input values where the provided Boolean expression evaluates to true.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/NumericSeries"
        },
        "condition": {
          "allOf": [
            {
              "$ref": "#/definitions/BooleanSeries"
            }
          ],
          "description": "Condition evaluated point-wise at each input timestamp. A point is only kept where the condition is true."
        }
      },
      "required": [
        "input",
        "condition"
      ]
    },
    "NumericHistogramBucketStrategy": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "bucketCount",
            "bucketWidthAndOffset"
          ]
        },
        "bucketCount": {
          "allOf": [
            {
              "$ref": "#/definitions/IntegerConstant"
            }
          ],
          "description": "The number of buckets to use in the histogram. Width is automatically calculated from the range of the input series, with the lower and upper bounds of the histogram being multiples of the width."
        },
        "bucketWidthAndOffset": {
          "$ref": "#/definitions/NumericHistogramBucketWidthAndOffset"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "bucketCount",
        "bucketCount": {
          "type": "literal",
          "literal": 1
        }
      }
    },
    "NumericHistogramBucketWidthAndOffset": {
      "type": "object",
      "properties": {
        "width": {
          "allOf": [
            {
              "$ref": "#/definitions/DoubleConstant"
            }
          ],
          "description": "The width of each bucket. If offset is not specified, the left and right bounds of each bucket are multiples of the width. If offset is specified, the left and right bounds of each bucket are shifted right by the offset value."
        },
        "offset": {
          "allOf": [
            {
              "$ref": "#/definitions/DoubleConstant"
            }
          ],
          "description": "The rightward shift to apply to the left and right bounds of each bucket. If not specified, the offset will be 0. The offset must be non-negative."
        }
      },
      "required": [
        "width"
      ]
    },
    "NumericIfElseSeries": {
      "description": "Selects between two numeric series point-wise based on a boolean condition series. For every aligned timestamp, emits the value from `trueValue` where `condition` is true, and the value from `falseValue` otherwise.",
      "type": "object",
      "properties": {
        "condition": {
          "allOf": [
            {
              "$ref": "#/definitions/BooleanSeries"
            }
          ],
          "description": "Boolean series evaluated at each point to choose between the `trueValue` and `falseValue` branches."
        },
        "trueValue": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericSeries"
            }
          ],
          "description": "Value emitted at points where `condition` is true."
        },
        "falseValue": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericSeries"
            }
          ],
          "description": "Value emitted at points where `condition` is false."
        }
      },
      "required": [
        "condition",
        "trueValue",
        "falseValue"
      ]
    },
    "NumericLargestTriangleThreeBucketsSeries": {
      "description": "Applies Largest-Triangle-Three-Buckets to a numeric time series for visualization-oriented downsampling. The algorithm preserves the first and last points, partitions the remaining input points based on the requested output count, and selects points that preserve the visual shape of the series. Results are selected input timestamp/value points, not fixed-width bucket aggregate rows.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/NumericSeries"
        },
        "maxPointsToReturn": {
          "allOf": [
            {
              "$ref": "#/definitions/IntegerConstant"
            }
          ],
          "description": "Maximum number of selected points to return. Must be positive and no greater than 10,000."
        }
      },
      "required": [
        "input",
        "maxPointsToReturn"
      ]
    },
    "NumericNanFilter": {
      "description": "Removes points where the value is NaN from the input series.",
      "type": "object",
      "properties": {
        "input": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericSeries"
            }
          ],
          "description": "Input numeric series."
        }
      },
      "required": [
        "input"
      ]
    },
    "NumericNthPointDownsampleSeries": {
      "description": "Keeps every Nth row of the timestamp-ordered input, per series. No grid arithmetic, no interpolation, no boundary handling. Output count is ceil(input_count / n) per series. Caller is responsible for choosing n consistent with the input's sample rate; output spacing is only uniform when the input is.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/NumericSeries"
        },
        "n": {
          "allOf": [
            {
              "$ref": "#/definitions/IntegerConstant"
            }
          ],
          "description": "Keep every Nth point starting from the earliest in each series. Must be >= 1."
        }
      },
      "required": [
        "input",
        "n"
      ]
    },
    "NumericResampleConfiguration": {
      "type": "object",
      "properties": {
        "interval": {
          "allOf": [
            {
              "$ref": "#/definitions/DurationConstant"
            }
          ],
          "description": "Interval between resampled points"
        },
        "interpolation": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericResampleInterpolationConfiguration"
            }
          ],
          "description": "Interpolation strategy to use (defaults to forward fill)."
        }
      },
      "required": [
        "interval"
      ]
    },
    "NumericResampleInterpolationConfiguration": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "forwardFillResampleInterpolationConfiguration",
            "constantResampleInterpolationConfiguration"
          ]
        },
        "forwardFillResampleInterpolationConfiguration": {
          "$ref": "#/definitions/ForwardFillResampleInterpolationConfiguration"
        },
        "constantResampleInterpolationConfiguration": {
          "$ref": "#/definitions/NumericConstantResampleInterpolationConfiguration"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "forwardFillResampleInterpolationConfiguration",
        "forwardFillResampleInterpolationConfiguration": {}
      }
    },
    "NumericResampleSeries": {
      "description": "Resamples the input series to a new resolution using interpolation. Outputs data for timestamps corresponding to the defined frequency. Based on interpolation strategy, determines range of timestamps to output data for and interpolates values where necessary.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/NumericSeries"
        },
        "resampleConfiguration": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericResampleConfiguration"
            }
          ],
          "description": "The interpolation strategy and interval at which to resample the series"
        }
      },
      "required": [
        "input",
        "resampleConfiguration"
      ]
    },
    "NumericResampleSeriesV2": {
      "description": "Resamples the input series at the authored interval using forward-fill.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/NumericSeries"
        },
        "interval": {
          "allOf": [
            {
              "$ref": "#/definitions/compute.api.Duration"
            }
          ],
          "description": "Interval at which to resample."
        }
      },
      "required": [
        "input",
        "interval"
      ]
    },
    "NumericSelectTagsSeries": {
      "description": "Subsets the tag dimensions of the input numeric series to the given tag keys. Preserves the input series' cardinality: points that share the selected keys but differ on dropped keys remain distinct.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/NumericSeries"
        },
        "tagKeys": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/StringConstant"
          },
          "uniqueItems": true
        }
      },
      "required": [
        "input"
      ]
    },
    "NumericSeries": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "abs",
            "negate",
            "cos",
            "sin",
            "tan",
            "acos",
            "asin",
            "ln",
            "log10",
            "sqrt",
            "add",
            "subtract",
            "multiply",
            "divide",
            "floorDivide",
            "power",
            "modulo",
            "atan2",
            "max",
            "mean",
            "min",
            "sum",
            "union",
            "product",
            "constant",
            "selectNewestPoints",
            "selectNumeric",
            "selectNumericProperty",
            "selectOldestPoints",
            "bitAnd",
            "bitOr",
            "bitXor",
            "bitShiftRight",
            "bitShiftLeft",
            "bitTest",
            "ifElse",
            "numericAggregation",
            "countDuplicate",
            "cumulativeSum",
            "derivative",
            "integral",
            "zScore",
            "raw",
            "derived",
            "resample",
            "resampleV2",
            "nthPointDownsample",
            "largestTriangleThreeBuckets",
            "signalFilter",
            "timeDifference",
            "absoluteTimestamp",
            "timeRangeFilter",
            "timeShift",
            "timeShiftV2",
            "unitConversion",
            "unitOverride",
            "valueDifference",
            "filterTransformation",
            "filterWhere",
            "thresholdFilter",
            "approximateFilter",
            "dropNan",
            "select1dArrayIndex",
            "aggregateUnderRanges",
            "rangeDuration",
            "groupWithinRangesV2",
            "filterByExpression",
            "scalarUdf",
            "enumToNumeric",
            "contains",
            "refprop",
            "refpropV2",
            "extractFromStruct",
            "tagByIntervals",
            "filterByTag",
            "selectTags",
            "toStartOfInterval",
            "phaseUnwrap",
            "aggregate",
            "rollingOperation",
            "bitOperation",
            "channel",
            "offset",
            "scale",
            "arithmetic",
            "unaryArithmetic",
            "binaryArithmetic"
          ]
        },
        "abs": {
          "$ref": "#/definitions/Abs"
        },
        "negate": {
          "$ref": "#/definitions/Negate"
        },
        "cos": {
          "$ref": "#/definitions/Cos"
        },
        "sin": {
          "$ref": "#/definitions/Sin"
        },
        "tan": {
          "$ref": "#/definitions/Tan"
        },
        "acos": {
          "$ref": "#/definitions/Acos"
        },
        "asin": {
          "$ref": "#/definitions/Asin"
        },
        "ln": {
          "$ref": "#/definitions/Ln"
        },
        "log10": {
          "$ref": "#/definitions/Log10"
        },
        "sqrt": {
          "$ref": "#/definitions/Sqrt"
        },
        "add": {
          "$ref": "#/definitions/Add"
        },
        "subtract": {
          "$ref": "#/definitions/Subtract"
        },
        "multiply": {
          "$ref": "#/definitions/Multiply"
        },
        "divide": {
          "$ref": "#/definitions/Divide"
        },
        "floorDivide": {
          "$ref": "#/definitions/FloorDivide"
        },
        "power": {
          "$ref": "#/definitions/Power"
        },
        "modulo": {
          "$ref": "#/definitions/Modulo"
        },
        "atan2": {
          "$ref": "#/definitions/Atan2"
        },
        "max": {
          "$ref": "#/definitions/MaxSeries"
        },
        "mean": {
          "$ref": "#/definitions/MeanSeries"
        },
        "min": {
          "$ref": "#/definitions/MinSeries"
        },
        "sum": {
          "$ref": "#/definitions/SumSeries"
        },
        "union": {
          "$ref": "#/definitions/NumericUnionSeries"
        },
        "product": {
          "$ref": "#/definitions/ProductSeries"
        },
        "constant": {
          "$ref": "#/definitions/ConstantNumericSeries"
        },
        "selectNewestPoints": {
          "$ref": "#/definitions/SelectNewestPointsSeries"
        },
        "selectNumeric": {
          "$ref": "#/definitions/SelectSeries"
        },
        "selectNumericProperty": {
          "$ref": "#/definitions/SelectProperty"
        },
        "selectOldestPoints": {
          "$ref": "#/definitions/SelectOldestPointsSeries"
        },
        "bitAnd": {
          "$ref": "#/definitions/BitAnd"
        },
        "bitOr": {
          "$ref": "#/definitions/BitOr"
        },
        "bitXor": {
          "$ref": "#/definitions/BitXor"
        },
        "bitShiftRight": {
          "$ref": "#/definitions/BitShiftRight"
        },
        "bitShiftLeft": {
          "$ref": "#/definitions/BitShiftLeft"
        },
        "bitTest": {
          "$ref": "#/definitions/BitTest"
        },
        "ifElse": {
          "$ref": "#/definitions/NumericIfElseSeries"
        },
        "numericAggregation": {
          "$ref": "#/definitions/NumericAggregation"
        },
        "countDuplicate": {
          "$ref": "#/definitions/EnumCountDuplicateSeries"
        },
        "cumulativeSum": {
          "$ref": "#/definitions/CumulativeSumSeries"
        },
        "derivative": {
          "$ref": "#/definitions/DerivativeSeries"
        },
        "integral": {
          "$ref": "#/definitions/IntegralSeries"
        },
        "zScore": {
          "$ref": "#/definitions/ZscoreSeries"
        },
        "raw": {
          "$ref": "#/definitions/Reference"
        },
        "derived": {
          "$ref": "#/definitions/DerivedSeries"
        },
        "resample": {
          "$ref": "#/definitions/NumericResampleSeries"
        },
        "resampleV2": {
          "$ref": "#/definitions/NumericResampleSeriesV2"
        },
        "nthPointDownsample": {
          "$ref": "#/definitions/NumericNthPointDownsampleSeries"
        },
        "largestTriangleThreeBuckets": {
          "$ref": "#/definitions/NumericLargestTriangleThreeBucketsSeries"
        },
        "signalFilter": {
          "$ref": "#/definitions/SignalFilterSeries"
        },
        "timeDifference": {
          "$ref": "#/definitions/TimeDifferenceSeries"
        },
        "absoluteTimestamp": {
          "$ref": "#/definitions/AbsoluteTimestampSeries"
        },
        "timeRangeFilter": {
          "$ref": "#/definitions/NumericTimeRangeFilterSeries"
        },
        "timeShift": {
          "$ref": "#/definitions/NumericTimeShiftSeries"
        },
        "timeShiftV2": {
          "$ref": "#/definitions/NumericTimeShiftSeriesV2"
        },
        "unitConversion": {
          "$ref": "#/definitions/UnitConversionSeries"
        },
        "unitOverride": {
          "$ref": "#/definitions/UnitOverrideSeries"
        },
        "valueDifference": {
          "$ref": "#/definitions/ValueDifferenceSeries"
        },
        "filterTransformation": {
          "$ref": "#/definitions/NumericFilterTransformationSeries"
        },
        "filterWhere": {
          "$ref": "#/definitions/NumericFilterWhereSeries"
        },
        "thresholdFilter": {
          "$ref": "#/definitions/NumericThresholdFilterSeries"
        },
        "approximateFilter": {
          "$ref": "#/definitions/NumericApproximateFilterSeries"
        },
        "dropNan": {
          "$ref": "#/definitions/NumericNanFilter"
        },
        "select1dArrayIndex": {
          "$ref": "#/definitions/SelectIndexFrom1dNumericArraySeries"
        },
        "aggregateUnderRanges": {
          "$ref": "#/definitions/AggregateUnderRangesSeries"
        },
        "rangeDuration": {
          "$ref": "#/definitions/RangeDurationSeries"
        },
        "groupWithinRangesV2": {
          "$ref": "#/definitions/GroupWithinRangesSeriesV2"
        },
        "filterByExpression": {
          "$ref": "#/definitions/FilterByExpressionSeries"
        },
        "scalarUdf": {
          "$ref": "#/definitions/ScalarUdfSeries"
        },
        "enumToNumeric": {
          "$ref": "#/definitions/EnumToNumericSeries"
        },
        "contains": {
          "$ref": "#/definitions/ContainsSeries"
        },
        "refprop": {
          "$ref": "#/definitions/RefpropSeries"
        },
        "refpropV2": {
          "$ref": "#/definitions/RefpropSeriesV2"
        },
        "extractFromStruct": {
          "$ref": "#/definitions/ExtractNumericFromStructSeries"
        },
        "tagByIntervals": {
          "$ref": "#/definitions/TagByIntervalsSeries"
        },
        "filterByTag": {
          "$ref": "#/definitions/NumericTagFilterSeries"
        },
        "selectTags": {
          "$ref": "#/definitions/NumericSelectTagsSeries"
        },
        "toStartOfInterval": {
          "$ref": "#/definitions/NumericToStartOfIntervalSeries"
        },
        "phaseUnwrap": {
          "$ref": "#/definitions/PhaseUnwrapSeries"
        },
        "aggregate": {
          "allOf": [
            {
              "$ref": "#/definitions/AggregateNumericSeries"
            }
          ],
          "x-deprecated": "AggregateNumericSeries is deprecated. Use `numericAggregation` with `aggregation.GroupByAggregationBuilder` instead."
        },
        "rollingOperation": {
          "allOf": [
            {
              "$ref": "#/definitions/RollingOperationSeries"
            }
          ],
          "x-deprecated": "RollingOperationSeries is deprecated. Use `numericAggregation` with `aggregation.RollingTimeAggregationBuilder` instead."
        },
        "bitOperation": {
          "allOf": [
            {
              "$ref": "#/definitions/BitOperationSeries"
            }
          ],
          "x-deprecated": "BitOperationSeries is deprecated in favor of individual nodes for each operation."
        },
        "channel": {
          "allOf": [
            {
              "$ref": "#/definitions/ChannelSeries"
            }
          ],
          "x-deprecated": "Deprecated in favor of the SelectSeries node"
        },
        "offset": {
          "allOf": [
            {
              "$ref": "#/definitions/OffsetSeries"
            }
          ],
          "x-deprecated": "OffsetSeries is deprecated in favor of add with a constant."
        },
        "scale": {
          "allOf": [
            {
              "$ref": "#/definitions/ScaleSeries"
            }
          ],
          "x-deprecated": "ScaleSeries is deprecated in favor of multiply with a constant."
        },
        "arithmetic": {
          "allOf": [
            {
              "$ref": "#/definitions/ArithmeticSeries"
            }
          ],
          "x-deprecated": "ArithmeticSeries is deprecated in favor of individual nodes for each operation."
        },
        "unaryArithmetic": {
          "allOf": [
            {
              "$ref": "#/definitions/UnaryArithmeticSeries"
            }
          ],
          "x-deprecated": "UnaryArithmeticSeries is deprecated in favor of individual nodes for each operation."
        },
        "binaryArithmetic": {
          "allOf": [
            {
              "$ref": "#/definitions/BinaryArithmeticSeries"
            }
          ],
          "x-deprecated": "BinaryArithmeticSeries is deprecated in favor of individual nodes for each operation."
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "abs",
        "abs": {}
      }
    },
    "NumericStaleRangesV2": {
      "description": "Produces ranges where a numeric input has no data for at least a duration.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/NumericSeries"
        },
        "threshold": {
          "allOf": [
            {
              "$ref": "#/definitions/compute.api.Duration"
            }
          ],
          "description": "Minimum gap without data that produces an output range."
        }
      },
      "required": [
        "input",
        "threshold"
      ]
    },
    "NumericTagFilterSeries": {
      "description": "Applies a tag predicate to the numeric series produced by input.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/NumericSeries"
        },
        "predicate": {
          "$ref": "#/definitions/TagPredicate"
        }
      },
      "required": [
        "input",
        "predicate"
      ]
    },
    "NumericThresholdFilterSeries": {
      "description": "Outputs only the values of the numeric plot value that satisfy the threshold condition.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/NumericSeries"
        },
        "threshold": {
          "$ref": "#/definitions/DoubleConstant"
        },
        "operator": {
          "$ref": "#/definitions/ThresholdOperator"
        }
      },
      "required": [
        "input",
        "threshold",
        "operator"
      ]
    },
    "NumericTimeRangeFilterSeries": {
      "description": "Filters the series to points within the specified time range.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/NumericSeries"
        },
        "startTime": {
          "allOf": [
            {
              "$ref": "#/definitions/TimestampConstant"
            }
          ],
          "description": "Represents the start time (inclusive) of the time range."
        },
        "endTime": {
          "allOf": [
            {
              "$ref": "#/definitions/TimestampConstant"
            }
          ],
          "description": "Represents the end time (inclusive) of the time range."
        }
      },
      "required": [
        "input"
      ]
    },
    "NumericTimeShiftSeries": {
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/NumericSeries"
        },
        "duration": {
          "$ref": "#/definitions/DurationConstant"
        }
      },
      "required": [
        "input",
        "duration"
      ]
    },
    "NumericTimeShiftSeriesV2": {
      "description": "Shifts the timestamps in the input series by the resolved duration.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/NumericSeries"
        },
        "duration": {
          "allOf": [
            {
              "$ref": "#/definitions/compute.api.Duration"
            }
          ],
          "description": "Duration to shift the input series by."
        }
      },
      "required": [
        "input",
        "duration"
      ]
    },
    "NumericToStartOfIntervalSeries": {
      "description": "Snaps each point's timestamp to the start of its enclosing fixed-size time bucket. Buckets are epoch-aligned: a point at timestamp `t` (nanoseconds) is rewritten to `floor(t / window) * window`. Values and tag groupings are preserved; aggregation of points that collide on the snapped timestamp is the responsibility of downstream nodes.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/NumericSeries"
        },
        "window": {
          "$ref": "#/definitions/compute.api.Duration"
        }
      },
      "required": [
        "input",
        "window"
      ]
    },
    "NumericUnionOperation": {
      "description": "DEPRECATED: apply aggregations as a separate step over the unioned output.",
      "type": "string",
      "enum": [
        "MIN",
        "MAX",
        "MEAN",
        "SUM",
        "COUNT",
        "STANDARD_DEVIATION",
        "ROOT_MEAN_SQUARE",
        "THROW"
      ],
      "x-enum-descriptions": {
        "MIN": "Combines multiple points by taking the minimum value",
        "MAX": "Combines multiple points by taking the maximum value",
        "MEAN": "Combines multiple points by taking the mean of the values",
        "SUM": "Combines multiple points by taking the sum of the values",
        "COUNT": "Combines multiple points by taking the count of the values",
        "STANDARD_DEVIATION": "Combines multiple points by taking the standard deviation of the values",
        "ROOT_MEAN_SQUARE": "Combines multiple points by taking the root mean square of the values",
        "THROW": "Throws a DuplicateTimestamp error if two series contain points with a duplicate timestamp."
      }
    },
    "NumericUnionSeries": {
      "description": "Combines multiple numeric series together and outputs a single series. By default, points from the inputs are concatenated (SQL {@code UNION ALL}) and duplicate timestamps across inputs are preserved. To aggregate values that share a timestamp, do a separate aggregation step next.",
      "type": "object",
      "properties": {
        "input": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/NumericSeries"
          },
          "description": "Input series to union"
        },
        "operation": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericUnionOperation"
            }
          ],
          "description": "The strategy to merge points with duplicate timestamps.",
          "x-deprecated": "Apply aggregations as a separate step over the unioned output."
        }
      }
    },
    "OffsetSeries": {
      "description": "For every timestamp specified in the input series, offset it by a constant factor.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/NumericSeries"
        },
        "scalar": {
          "allOf": [
            {
              "$ref": "#/definitions/DoubleConstant"
            }
          ],
          "description": "The constant to add to each point"
        }
      },
      "required": [
        "input",
        "scalar"
      ]
    },
    "OnChangeRanges": {
      "description": "Produces a list of ranges for each point that has a different value to the previous point. A range will have identical start and end times.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/Series"
        }
      },
      "required": [
        "input"
      ]
    },
    "OrSeries": {
      "description": "Combines two boolean series point-wise using logical OR, producing true where either input is true and false otherwise.",
      "type": "object",
      "properties": {
        "left": {
          "$ref": "#/definitions/BooleanSeries"
        },
        "right": {
          "$ref": "#/definitions/BooleanSeries"
        }
      },
      "required": [
        "left",
        "right"
      ]
    },
    "OutputFrequencyType": {
      "type": "string",
      "enum": [
        "LINEAR",
        "ANGULAR",
        "NORMALIZED_LINEAR",
        "NORMALIZED_ANGULAR"
      ],
      "x-enum-descriptions": {
        "LINEAR": "Frequency in Hertz.",
        "ANGULAR": "Frequency in radians per second.",
        "NORMALIZED_LINEAR": "Normalized frequency, in the range [0, 0.5] for real-valued signals.",
        "NORMALIZED_ANGULAR": "Normalized angular frequency, in the range [0, π] for real-valued signals."
      }
    },
    "OutputPhaseUnit": {
      "type": "string",
      "enum": [
        "RADIANS",
        "DEGREES"
      ]
    },
    "OutputRangeStart": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "firstPointMatchingCondition",
            "afterPersistenceWindow"
          ]
        },
        "firstPointMatchingCondition": {
          "allOf": [
            {
              "$ref": "#/definitions/FirstPointMatchingCondition"
            }
          ],
          "description": "The first point in the output range will be the first point where the condition evaluates to true."
        },
        "afterPersistenceWindow": {
          "allOf": [
            {
              "$ref": "#/definitions/AfterPersistenceWindow"
            }
          ],
          "description": "The output range will contain points where the condition has been true for at least the min duration and min points."
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "firstPointMatchingCondition",
        "firstPointMatchingCondition": {}
      }
    },
    "PaddedRanges": {
      "description": "Expands ranges durations by adding temporal padding to the start, end, or both sides. Note that if the input ranges contain a RangeValue, it will be dropped.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/RangeSeries"
        },
        "padding": {
          "$ref": "#/definitions/DurationConstant"
        },
        "paddingConfiguration": {
          "allOf": [
            {
              "$ref": "#/definitions/RangePaddingConfiguration"
            }
          ],
          "description": "Configuration for how to apply padding to the ranges. Defaults to PAD_START_AND_END if not specified."
        }
      },
      "required": [
        "input",
        "padding"
      ]
    },
    "PaddedRangesV2": {
      "description": "Expands ranges using an authored Duration expression and a selected padding direction.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/RangeSeries"
        },
        "duration": {
          "allOf": [
            {
              "$ref": "#/definitions/compute.api.Duration"
            }
          ],
          "description": "How far to extend each range on every padded side."
        },
        "paddingConfiguration": {
          "$ref": "#/definitions/RangePaddingConfiguration"
        }
      },
      "required": [
        "input",
        "duration",
        "paddingConfiguration"
      ]
    },
    "PeakRanges": {
      "description": "Produces a list of ranges for each point that is greater than its neighbors. Peaks at edges are discarded, and continuous, multivalue, flat peaks will return all values.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/NumericSeries"
        },
        "returnsPeaks": {
          "type": "boolean",
          "description": "True if returning peaks, else troughs.",
          "x-deprecated": "No longer used, use returnType instead"
        },
        "returnType": {
          "allOf": [
            {
              "$ref": "#/definitions/PeakType"
            }
          ],
          "description": "Optional for backcompatibility."
        },
        "minimumProminence": {
          "allOf": [
            {
              "$ref": "#/definitions/DoubleConstant"
            }
          ],
          "description": "The minimum topographic prominence for an extrema to be returned. Prominence is the minimum vertical distance needed to travel from an extrema to one of greater magnitude."
        }
      },
      "required": [
        "input"
      ]
    },
    "PeakType": {
      "type": "string",
      "enum": [
        "PEAK",
        "TROUGH",
        "BOTH"
      ]
    },
    "PercentageThreshold": {
      "description": "Threshold defined as the percentage of a given value.",
      "type": "object",
      "properties": {
        "value": {
          "allOf": [
            {
              "$ref": "#/definitions/DoubleConstant"
            }
          ],
          "description": "Allowed spread, as a percentage of the window's mean value."
        }
      },
      "required": [
        "value"
      ]
    },
    "Percentile": {
      "description": "The value at the specified percentile.",
      "type": "object",
      "properties": {
        "percentile": {
          "allOf": [
            {
              "$ref": "#/definitions/DoubleConstant"
            }
          ],
          "description": "Percentile to compute, in range [0, 1]. E.g. 0.5 for median, 0.95 for p95."
        }
      },
      "required": [
        "percentile"
      ]
    },
    "PeriodogramMethod": {
      "type": "string",
      "enum": [
        "WELCH_BLACKMAN",
        "WELCH_HANN",
        "WELCH_HAMMING",
        "WELCH_RECT"
      ]
    },
    "PersistenceWindowConfiguration": {
      "description": "Configures how long a condition has to be true for to output a time range, and what to use as the start of the output range. For a point to be included in the output time range, both the minPoints and minDuration conditions must be satisfied.",
      "type": "object",
      "properties": {
        "minPoints": {
          "allOf": [
            {
              "$ref": "#/definitions/IntegerConstant"
            }
          ],
          "description": "The minimum number of points for which this condition be must satisfied to include the time range in the output. Must be non-negative. If not present, will default to 1."
        },
        "minDuration": {
          "allOf": [
            {
              "$ref": "#/definitions/DurationConstant"
            }
          ],
          "description": "The minimum number of points for which this condition must be satisfied to include the time range in the output. Must be non-negative. If not present, will default to 1 nanosecond."
        },
        "outputRangeStart": {
          "allOf": [
            {
              "$ref": "#/definitions/OutputRangeStart"
            }
          ],
          "description": "Which point to use as the start of the output range. Defaults to firstPointMatchingCondition if not specified."
        }
      },
      "required": [
        "outputRangeStart"
      ]
    },
    "PhaseUnwrapSeries": {
      "description": "Removes discontinuities from a wrapping signal (e.g. phase or heading) by adding whole multiples of `period` whenever the step between consecutive samples exceeds half the period. Output length equals input length.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/NumericSeries"
        },
        "period": {
          "allOf": [
            {
              "$ref": "#/definitions/DoubleConstant"
            }
          ],
          "description": "The wrapping period of the signal (e.g. 2*pi for radians, 360 for degrees). A jump between consecutive samples greater than `period/2` in magnitude is corrected by adding/subtracting a whole multiple of `period`."
        }
      },
      "required": [
        "input",
        "period"
      ]
    },
    "PhysicalConstant": {
      "description": "Physical constants referenceable by name. The server resolves the symbol to its numeric value in SI units.",
      "type": "string",
      "enum": [
        "SPEED_OF_LIGHT",
        "AVOGADRO",
        "BOLTZMANN",
        "PLANCK",
        "ELEMENTARY_CHARGE",
        "GAS_CONSTANT",
        "STANDARD_GRAVITY",
        "STANDARD_ATMOSPHERE",
        "ABSOLUTE_ZERO_CELSIUS",
        "GRAVITATIONAL_CONSTANT",
        "STEFAN_BOLTZMANN"
      ],
      "x-enum-descriptions": {
        "SPEED_OF_LIGHT": "Speed of light in vacuum, 299792458 m/s (exact).",
        "AVOGADRO": "Avogadro constant, 6.02214076e23 mol^-1 (exact).",
        "BOLTZMANN": "Boltzmann constant, 1.380649e-23 J/K (exact).",
        "PLANCK": "Planck constant, 6.62607015e-34 J*s (exact).",
        "ELEMENTARY_CHARGE": "Elementary charge, 1.602176634e-19 C (exact).",
        "GAS_CONSTANT": "Molar gas constant, 8.31446261815324 J/(mol*K) (exact, Avogadro times Boltzmann).",
        "STANDARD_GRAVITY": "Standard acceleration of gravity, 9.80665 m/s^2 (exact by convention).",
        "STANDARD_ATMOSPHERE": "Standard atmosphere, 101325 Pa (exact by convention).",
        "ABSOLUTE_ZERO_CELSIUS": "Absolute zero expressed in degrees Celsius, -273.15 (exact).",
        "GRAVITATIONAL_CONSTANT": "Newtonian constant of gravitation, 6.67430e-11 m^3/(kg*s^2) (CODATA 2022, measured).",
        "STEFAN_BOLTZMANN": "Stefan-Boltzmann constant, 5.670374419e-8 W/(m^2*K^4) (exact derived)."
      }
    },
    "PinnedModuleVersionReference": {
      "type": "object",
      "properties": {
        "version": {
          "$ref": "#/definitions/StringConstant"
        }
      },
      "required": [
        "version"
      ]
    },
    "PolynomialCurve": {
      "type": "object",
      "properties": {
        "degree": {
          "allOf": [
            {
              "$ref": "#/definitions/IntegerConstant"
            }
          ],
          "description": "The highest allowable degree of the fit polynomial."
        },
        "intercept": {
          "allOf": [
            {
              "$ref": "#/definitions/DoubleConstant"
            }
          ],
          "description": "The y-value at the point x (or t) = 0. If omitted, the y-intercept will also be fit to the data."
        }
      },
      "required": [
        "degree"
      ]
    },
    "PolynomialCurveFit": {
      "description": "A polynomial fit of the enclosing target (`y`) against the chosen independent variable (`x`).",
      "type": "object",
      "properties": {
        "independentVariable": {
          "allOf": [
            {
              "$ref": "#/definitions/CurveFitVariable"
            }
          ],
          "description": "The `x` axis the target is fit against — either relative sample time or another series."
        },
        "degree": {
          "allOf": [
            {
              "$ref": "#/definitions/IntegerConstant"
            }
          ],
          "description": "The highest allowable degree of the fit polynomial."
        },
        "intercept": {
          "allOf": [
            {
              "$ref": "#/definitions/DoubleConstant"
            }
          ],
          "description": "The y-value at the point x (or t) = 0. If omitted, the y-intercept will also be fit to the data."
        }
      },
      "required": [
        "independentVariable",
        "degree"
      ]
    },
    "Power": {
      "description": "Raises base to the power of exponent pointwise.",
      "type": "object",
      "properties": {
        "base": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericSeries"
            }
          ],
          "description": "Base values."
        },
        "exponent": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericSeries"
            }
          ],
          "description": "Exponent values."
        }
      },
      "required": [
        "base",
        "exponent"
      ]
    },
    "PowerCurve": {
      "type": "object",
      "properties": {}
    },
    "ProductSeries": {
      "description": "For every timestamp specified in the input series, outputs a value that is the product for that timestamp across all input series. Only outputs timestamps where all input series have an entry for that timestamp, subject to interpolation.",
      "type": "object",
      "properties": {
        "inputs": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/NumericSeries"
          },
          "description": "Input series across which to take the pointwise product"
        },
        "interpolationConfiguration": {
          "allOf": [
            {
              "$ref": "#/definitions/InterpolationConfiguration"
            }
          ],
          "description": "Defaults to forward fill interpolation with a 1s interpolation radius",
          "x-deprecated": "Setting interpolation on this node is deprecated."
        }
      }
    },
    "RangeAggregationOperation": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "sum",
            "rootMeanSquare",
            "average",
            "min",
            "max",
            "standardDeviation",
            "count",
            "all"
          ]
        },
        "sum": {
          "$ref": "#/definitions/Summation"
        },
        "rootMeanSquare": {
          "$ref": "#/definitions/RootMeanSquare"
        },
        "average": {
          "$ref": "#/definitions/Average"
        },
        "min": {
          "$ref": "#/definitions/Minimum"
        },
        "max": {
          "$ref": "#/definitions/Maximum"
        },
        "standardDeviation": {
          "$ref": "#/definitions/StandardDeviation"
        },
        "count": {
          "$ref": "#/definitions/Count"
        },
        "all": {
          "$ref": "#/definitions/Empty"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "sum",
        "sum": {}
      }
    },
    "RangeDurationSeries": {
      "description": "Outputs a numeric series with one point per range: timestamp = range start, value = range duration.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/RangeSeries"
        },
        "unboundedRangeBehavior": {
          "allOf": [
            {
              "$ref": "#/definitions/UnboundedRangeBehavior"
            }
          ],
          "description": "How to handle ranges with a missing start or end."
        },
        "timeUnit": {
          "allOf": [
            {
              "$ref": "#/definitions/TimeUnit"
            }
          ],
          "description": "The time unit of the duration. Defaults to seconds if not specified."
        }
      },
      "required": [
        "input",
        "unboundedRangeBehavior"
      ]
    },
    "RangeIntervalSource": {
      "description": "Intervals come from a range series. Must resolve to literal ranges.",
      "type": "object",
      "properties": {
        "ranges": {
          "$ref": "#/definitions/RangeSeries"
        },
        "tagBy": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/RangeTagSource"
          },
          "description": "Non-empty ordered list of tag sources. Each contributes a tag key-value pair per range interval."
        }
      },
      "required": [
        "ranges"
      ]
    },
    "RangeMap": {
      "type": "object",
      "properties": {
        "start": {
          "allOf": [
            {
              "$ref": "#/definitions/DoubleConstant"
            }
          ],
          "description": "Inclusive start value. If not specified, the start is the prior range's end value, or negative infinity."
        },
        "end": {
          "allOf": [
            {
              "$ref": "#/definitions/DoubleConstant"
            }
          ],
          "description": "Exclusive end value. If not specified, the end value is the next range's start value, or positive infinity."
        },
        "output": {
          "allOf": [
            {
              "$ref": "#/definitions/StringConstant"
            }
          ],
          "description": "The value to map to if the input value is within the range."
        }
      },
      "required": [
        "output"
      ]
    },
    "RangePaddingConfiguration": {
      "type": "string",
      "enum": [
        "PAD_START",
        "PAD_END",
        "PAD_START_AND_END"
      ]
    },
    "RangeSeries": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "approximateThreshold",
            "booleanRanges",
            "thresholdRangesV2",
            "durationFilter",
            "durationFilterV2",
            "enumFilter",
            "categoryFilterRangesV2",
            "categoricalOnChangeRangesV2",
            "categoricalStaleRangesV2",
            "categoricalEqualityRangesV2",
            "enumSeriesEqualityRangesNode",
            "eventsSearch",
            "intersectRange",
            "literalRanges",
            "minMaxThreshold",
            "not",
            "onChange",
            "peak",
            "extremaRangesV2",
            "rangeNumericAggregation",
            "raw",
            "derived",
            "seriesCrossoverRangesNode",
            "seriesEqualityRangesNode",
            "numericEqualityRangesV2",
            "stabilityDetection",
            "stabilityDetectionV2",
            "staleRange",
            "numericStaleRangesV2",
            "threshold",
            "unionRange",
            "paddedRanges",
            "paddedRangesV2"
          ]
        },
        "approximateThreshold": {
          "$ref": "#/definitions/ApproximateThresholdRanges"
        },
        "booleanRanges": {
          "$ref": "#/definitions/BooleanRanges"
        },
        "thresholdRangesV2": {
          "$ref": "#/definitions/ThresholdRangesV2"
        },
        "durationFilter": {
          "$ref": "#/definitions/DurationFilterRanges"
        },
        "durationFilterV2": {
          "$ref": "#/definitions/DurationFilterRangesV2"
        },
        "enumFilter": {
          "$ref": "#/definitions/EnumFilterRanges"
        },
        "categoryFilterRangesV2": {
          "$ref": "#/definitions/CategoryFilterRangesV2"
        },
        "categoricalOnChangeRangesV2": {
          "$ref": "#/definitions/CategoricalOnChangeRangesV2"
        },
        "categoricalStaleRangesV2": {
          "$ref": "#/definitions/CategoricalStaleRangesV2"
        },
        "categoricalEqualityRangesV2": {
          "$ref": "#/definitions/CategoricalEqualityRangesV2"
        },
        "enumSeriesEqualityRangesNode": {
          "$ref": "#/definitions/EnumSeriesEqualityRanges"
        },
        "eventsSearch": {
          "$ref": "#/definitions/EventsSearchRanges"
        },
        "intersectRange": {
          "$ref": "#/definitions/IntersectRanges"
        },
        "literalRanges": {
          "$ref": "#/definitions/LiteralRanges"
        },
        "minMaxThreshold": {
          "allOf": [
            {
              "$ref": "#/definitions/MinMaxThresholdRanges"
            }
          ],
          "description": "Computes ranges where the input time series matches a filter defined by lower and upper bounds, and an operator."
        },
        "not": {
          "$ref": "#/definitions/NotRanges"
        },
        "onChange": {
          "$ref": "#/definitions/OnChangeRanges"
        },
        "peak": {
          "$ref": "#/definitions/PeakRanges"
        },
        "extremaRangesV2": {
          "$ref": "#/definitions/ExtremaRangesV2"
        },
        "rangeNumericAggregation": {
          "$ref": "#/definitions/RangesNumericAggregation"
        },
        "raw": {
          "$ref": "#/definitions/Reference"
        },
        "derived": {
          "$ref": "#/definitions/DerivedSeries"
        },
        "seriesCrossoverRangesNode": {
          "$ref": "#/definitions/SeriesCrossoverRanges"
        },
        "seriesEqualityRangesNode": {
          "$ref": "#/definitions/SeriesEqualityRanges"
        },
        "numericEqualityRangesV2": {
          "$ref": "#/definitions/NumericEqualityRangesV2"
        },
        "stabilityDetection": {
          "$ref": "#/definitions/StabilityDetectionRanges"
        },
        "stabilityDetectionV2": {
          "$ref": "#/definitions/StabilityDetectionRangesV2"
        },
        "staleRange": {
          "$ref": "#/definitions/StaleRanges"
        },
        "numericStaleRangesV2": {
          "$ref": "#/definitions/NumericStaleRangesV2"
        },
        "threshold": {
          "allOf": [
            {
              "$ref": "#/definitions/ThresholdingRanges"
            }
          ],
          "description": "Computes ranges where the input time series matches a filter defined by a single threshold and an operator."
        },
        "unionRange": {
          "$ref": "#/definitions/UnionRanges"
        },
        "paddedRanges": {
          "$ref": "#/definitions/PaddedRanges"
        },
        "paddedRangesV2": {
          "$ref": "#/definitions/PaddedRangesV2"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "approximateThreshold",
        "approximateThreshold": {
          "input": {
            "type": "abs",
            "abs": {}
          },
          "threshold": {
            "type": "literal",
            "literal": 1
          },
          "tolerance": {
            "type": "literal",
            "literal": 1
          },
          "operator": "EQUAL_TO",
          "persistenceWindowConfiguration": {
            "minPoints": {
              "type": "literal",
              "literal": 1
            },
            "minDuration": {
              "type": "literal",
              "literal": {
                "seconds": 1,
                "nanos": 1
              }
            },
            "outputRangeStart": {
              "type": "firstPointMatchingCondition",
              "firstPointMatchingCondition": {}
            }
          }
        }
      }
    },
    "RangeSortOrder": {
      "description": "Sort order for selecting ranges. ASC selects from earliest to latest, DESC selects from latest to earliest.",
      "type": "string",
      "enum": [
        "ASC",
        "DESC"
      ]
    },
    "RangeStart": {
      "description": "Selects which point of a satisfied condition begins the output range.",
      "type": "string",
      "enum": [
        "CONDITION_START",
        "PERSISTENCE_START"
      ]
    },
    "RangeTagSource": {
      "description": "A dimension contributing a tag key-value pair per range interval.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "intervalIndex",
            "rangeStartTimestamp"
          ]
        },
        "intervalIndex": {
          "$ref": "#/definitions/IntervalIndexTag"
        },
        "rangeStartTimestamp": {
          "$ref": "#/definitions/IntervalStartTimestampTag"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "intervalIndex",
        "intervalIndex": {}
      }
    },
    "RangesAnchor": {
      "description": "Uses the start timestamp of the range at the configured zero-based index from `ranges` evaluated over each interval, considering only ranges whose start lies in the anchor window [start, end), or [start, +infinity) when the end is absent. The window is the run bounds for a run anchor. A range already in progress when the window opens anchors at the window start. Series in `ranges` that select no explicit dataset resolve against the aligned input dataset, and the computed range groups must carry the aligned runs' `runRid` grouping tags.",
      "type": "object",
      "properties": {
        "ranges": {
          "allOf": [
            {
              "$ref": "#/definitions/RangeSeries"
            }
          ],
          "description": "The range series evaluated per interval to locate the anchor range."
        },
        "index": {
          "allOf": [
            {
              "$ref": "#/definitions/IntegerConstant"
            }
          ],
          "description": "Zero-based range index after sorting. Defaults to zero and must be non-negative."
        },
        "sortOrder": {
          "allOf": [
            {
              "$ref": "#/definitions/RangeSortOrder"
            }
          ],
          "description": "Ordering by range start timestamp before selecting the index. Defaults to ASC."
        }
      },
      "required": [
        "ranges"
      ]
    },
    "RangesNumericAggregation": {
      "description": "Aggregates the values of a numeric series at each range specified by the input ranges.",
      "type": "object",
      "properties": {
        "ranges": {
          "$ref": "#/definitions/RangeSeries"
        },
        "input": {
          "$ref": "#/definitions/NumericSeries"
        },
        "operation": {
          "$ref": "#/definitions/RangeAggregationOperation"
        }
      },
      "required": [
        "ranges",
        "input",
        "operation"
      ]
    },
    "Reference": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "x-alias": "VariableName",
          "description": "A reference to a value not defined in the current compute scope."
        }
      },
      "required": [
        "name"
      ]
    },
    "RefpropProperty": {
      "description": "Supported properties for REFPROP calculations.",
      "type": "string",
      "enum": [
        "TEMPERATURE",
        "PRESSURE",
        "MASS_DENSITY",
        "MASS_SPECIFIC_ENTHALPY",
        "MASS_SPECIFIC_INTERNAL_ENERGY",
        "MASS_SPECIFIC_ENTROPY",
        "VISCOSITY"
      ]
    },
    "RefpropSeries": {
      "description": "Computes the output property given input properties for the substance using REFPROP. Initial implementation only expects two input properties.",
      "type": "object",
      "properties": {
        "inputs": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/NumericSeries"
          },
          "description": "A map that maps a REFPROP property to its numeric series."
        },
        "outputProperty": {
          "allOf": [
            {
              "$ref": "#/definitions/RefpropProperty"
            }
          ],
          "description": "The desired output property. This should not be one of the input properties."
        },
        "substance": {
          "allOf": [
            {
              "$ref": "#/definitions/RefpropSubstance"
            }
          ],
          "description": "The substance for REFPROP calculations."
        },
        "interpolationConfiguration": {
          "allOf": [
            {
              "$ref": "#/definitions/InterpolationConfiguration"
            }
          ],
          "x-deprecated": "Setting interpolation on this node is deprecated."
        }
      },
      "required": [
        "outputProperty",
        "substance"
      ]
    },
    "RefpropSeriesV2": {
      "description": "Computes a REFPROP output property from the supplied substance and output property.",
      "type": "object",
      "properties": {
        "inputs": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/NumericSeries"
          },
          "description": "Map of REFPROP property to its numeric series."
        },
        "substance": {
          "allOf": [
            {
              "$ref": "#/definitions/RefpropSubstance"
            }
          ],
          "description": "The substance for REFPROP calculations."
        },
        "outputProperty": {
          "allOf": [
            {
              "$ref": "#/definitions/RefpropProperty"
            }
          ],
          "description": "The desired output property. This must not be one of the input properties."
        }
      },
      "required": [
        "substance",
        "outputProperty"
      ]
    },
    "RefpropSubstance": {
      "description": "Supported substances for REFPROP calculations",
      "type": "string",
      "enum": [
        "NITROGEN",
        "OXYGEN",
        "HELIUM",
        "HYDROGEN",
        "METHANE",
        "PROPANE",
        "BUTANE",
        "WATER",
        "XENON",
        "AIR",
        "CARBON_DIOXIDE",
        "ARGON",
        "CARBON_MONOXIDE",
        "JET_A_4658",
        "JET_A_3638"
      ]
    },
    "ResourceSearchQuery": {
      "description": "Predicate tree for filtering.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "properties",
            "numericProperty",
            "numericPropertyRange",
            "labels",
            "workspace",
            "and",
            "or",
            "not"
          ]
        },
        "properties": {
          "$ref": "#/definitions/PropertiesFilter"
        },
        "numericProperty": {
          "$ref": "#/definitions/NumericPropertyPredicate"
        },
        "numericPropertyRange": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericPropertyRangePredicate"
            }
          ],
          "description": "Matches resources using an inclusive numeric property range."
        },
        "labels": {
          "$ref": "#/definitions/LabelsFilter"
        },
        "workspace": {
          "$ref": "#/definitions/StringConstant"
        },
        "and": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/ResourceSearchQuery"
          }
        },
        "or": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/ResourceSearchQuery"
          }
        },
        "not": {
          "$ref": "#/definitions/ResourceSearchQuery"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "properties",
        "properties": {
          "name": "string",
          "values": [
            "string"
          ]
        }
      }
    },
    "RollingOperationSeries": {
      "description": "DEPRECATED. Use `numericAggregation` with `aggregation.RollingTimeAggregationBuilder` instead.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/NumericSeries"
        },
        "window": {
          "$ref": "#/definitions/Window"
        },
        "operator": {
          "$ref": "#/definitions/NumericAggregationOperator"
        }
      },
      "required": [
        "input",
        "window",
        "operator"
      ]
    },
    "RollingPointsAggregationBuilder": {
      "description": "Rolling point-count aggregation: for each point in the input, aggregate the current point and the preceding N - 1 points within the same tag grouping.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/Series"
        },
        "points": {
          "$ref": "#/definitions/IntegerConstant"
        }
      },
      "required": [
        "input",
        "points"
      ]
    },
    "RollingTimeAggregationBuilder": {
      "description": "Rolling time-window aggregation: for each point in the input, aggregate the values within the preceding time window.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/Series"
        },
        "window": {
          "$ref": "#/definitions/compute.api.Duration"
        }
      },
      "required": [
        "input",
        "window"
      ]
    },
    "RootMeanSquare": {
      "description": "The root mean square of points inside the time window.",
      "type": "object",
      "properties": {}
    },
    "Run": {
      "description": "Run reference for `Dataset.run`. The `rid` field accepts either a literal run RID or a `StringConstant` reference resolved from `Context`.",
      "type": "object",
      "properties": {
        "rid": {
          "allOf": [
            {
              "$ref": "#/definitions/StringConstant"
            }
          ],
          "description": "Resource identifier of a run"
        }
      },
      "required": [
        "rid"
      ]
    },
    "RunChannel": {
      "type": "object",
      "properties": {
        "runRid": {
          "$ref": "#/definitions/StringConstant"
        },
        "assetRid": {
          "allOf": [
            {
              "$ref": "#/definitions/StringConstant"
            }
          ],
          "description": "Used to disambiguate when multiple assets within this run contain data scopes with the same name. If not specified for a run with multiple assets, an error will be thrown."
        },
        "dataScopeName": {
          "allOf": [
            {
              "$ref": "#/definitions/StringConstant"
            }
          ],
          "description": "Used to disambiguate when multiple data scopes within this run contain channels with the same name."
        },
        "channel": {
          "$ref": "#/definitions/StringConstant"
        },
        "additionalTags": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/StringConstant"
          },
          "x-deprecated": "Use additionalTagFilters"
        },
        "additionalTagFilters": {
          "allOf": [
            {
              "$ref": "#/definitions/TagFilters"
            }
          ],
          "description": "Tags to filter the channel by, in addition to tag filters defined for a given Run data scope. Throws on collisions with tag keys already defined for the given Run data scope. Only returns points that match both sets of tag filters. For log series, include arg filters here in addition to tag filters."
        },
        "tagsToGroupBy": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "uniqueItems": true,
          "x-deprecated": "Use groupByTags instead. Throws if both tagsToGroupBy and groupByTags are specified."
        },
        "groupByTags": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/StringConstant"
          },
          "uniqueItems": true,
          "description": "Tags that the channel should be grouped by. If this is non-empty a grouped result will be returned with an entry for each grouping. Only one of tagsToGroupBy and groupByTags should be specified."
        }
      },
      "required": [
        "runRid",
        "dataScopeName",
        "channel"
      ]
    },
    "RunsSearchTarget": {
      "description": "Search runs. Each matched run expands to one grouping per data source attached to the run: asset-typed data sources contribute one grouping per data scope on the asset; dataset-typed data sources contribute one grouping per dataset. Every grouping is tagged by `runRid` and `dataScope` (the asset's data scope name for asset-typed sources, or the run-local data source ref name for dataset-typed sources); asset-typed groupings additionally carry `assetRid`.",
      "type": "object",
      "properties": {
        "query": {
          "allOf": [
            {
              "$ref": "#/definitions/ResourceSearchQuery"
            }
          ],
          "description": "Predicate tree used to filter matching runs."
        }
      },
      "required": [
        "query"
      ]
    },
    "RustUdfSource": {
      "description": "Rust source code defining the UDF entrypoint and any helper functions.",
      "type": "object",
      "properties": {
        "sourceCode": {
          "type": "string",
          "description": "Rust source code to transpile into WASM. The operation consuming this source defines the entrypoint signature: scalar UDFs receive one scalar per input series, while aggregation UDFs receive grouped value vectors. If several functions appear at the top level, annotate the entrypoint with `#[main]`."
        }
      },
      "required": [
        "sourceCode"
      ]
    },
    "Sampling": {
      "description": "Options for returning a sampled subset of raw series points.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "everyNthPerSeries",
            "hashSubsample"
          ]
        },
        "everyNthPerSeries": {
          "$ref": "#/definitions/EveryNthPerSeriesSampling"
        },
        "hashSubsample": {
          "$ref": "#/definitions/HashSubsampleSampling"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "everyNthPerSeries",
        "everyNthPerSeries": {
          "n": {
            "type": "literal",
            "literal": 1
          }
        }
      }
    },
    "SavedDataset": {
      "description": "A persisted source of data, named by its RID. Can be a catalog dataset, pipeline, connection, etc.",
      "type": "object",
      "properties": {
        "rid": {
          "allOf": [
            {
              "$ref": "#/definitions/StringConstant"
            }
          ],
          "description": "A data source RID, given as a literal or as a variable resolved from `Context`. A pipeline's logic only accepts catalog datasets/pipelines, since it is persisted without context."
        }
      },
      "required": [
        "rid"
      ]
    },
    "ScalarUdfSeries": {
      "description": "Executes user-provided scalar UDF code over aligned inputs. The function must return one output for each aligned input row, with the return type matching the series type that contains this node.",
      "type": "object",
      "properties": {
        "inputs": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Series"
          },
          "description": "Input series passed to the UDF in argument order."
        },
        "source": {
          "allOf": [
            {
              "$ref": "#/definitions/UdfSource"
            }
          ],
          "description": "Language-specific source definition for the UDF."
        }
      },
      "required": [
        "source"
      ]
    },
    "ScaleSeries": {
      "description": "For every timestamp specified in the input series, multiply it by a constant factor.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/NumericSeries"
        },
        "scalar": {
          "allOf": [
            {
              "$ref": "#/definitions/DoubleConstant"
            }
          ],
          "description": "The constant to multiply each point by"
        },
        "scalarUnit": {
          "type": "string",
          "x-alias": "UnitSymbol",
          "description": "The units of the scalar to multiply by. If empty, the scalar is considered unit-less."
        }
      },
      "required": [
        "input",
        "scalar"
      ]
    },
    "Scatter": {
      "description": "A scatter plot comprised of the values from one input series on the x-axis and values from another input series on the y-axis, for all points within a requested time range.",
      "type": "object",
      "properties": {
        "x": {
          "$ref": "#/definitions/NumericSeries"
        },
        "y": {
          "$ref": "#/definitions/NumericSeries"
        }
      },
      "required": [
        "x",
        "y"
      ]
    },
    "ScatterCurveFit": {
      "description": "Fits a curve to the scatter between two series.",
      "type": "object",
      "properties": {
        "scatter": {
          "allOf": [
            {
              "$ref": "#/definitions/Scatter"
            }
          ],
          "description": "The x and y series to fit to."
        },
        "options": {
          "$ref": "#/definitions/ScatterFitOptions"
        }
      },
      "required": [
        "scatter",
        "options"
      ]
    },
    "ScatterFitOptions": {
      "type": "object",
      "properties": {
        "minX": {
          "allOf": [
            {
              "$ref": "#/definitions/DoubleConstant"
            }
          ],
          "description": "Inclusive lower bound on the x values to fit to. If omitted, does not set a bound (equivalent to setting this to the minimum x value among all points in the time range)."
        },
        "maxX": {
          "allOf": [
            {
              "$ref": "#/definitions/DoubleConstant"
            }
          ],
          "description": "Inclusive upper bound on the x values to fit to. If omitted, does not set a bound (equivalent to setting this to the maximum x value among all points in the time range)."
        },
        "minY": {
          "allOf": [
            {
              "$ref": "#/definitions/DoubleConstant"
            }
          ],
          "description": "Inclusive lower bound on the y values to fit to. If omitted, does not set a bound (equivalent to setting this to the minimum y value among all points in the time range)."
        },
        "maxY": {
          "allOf": [
            {
              "$ref": "#/definitions/DoubleConstant"
            }
          ],
          "description": "Inclusive upper bound on the y values to fit to. If omitted, does not set a bound (equivalent to setting this to the maximum y value among all points in the time range)."
        }
      }
    },
    "SearchDataset": {
      "description": "Resolves matching assets or runs from search, creating a combined dataset tagged by source rid and data scope.",
      "type": "object",
      "properties": {
        "target": {
          "allOf": [
            {
              "$ref": "#/definitions/SearchTarget"
            }
          ],
          "description": "Whether to search assets or runs and with which query."
        },
        "maxResults": {
          "type": "integer",
          "format": "int32",
          "description": "Maximum number of assets or runs returned from search. Defaults to 10000 when omitted."
        }
      },
      "required": [
        "target"
      ]
    },
    "SearchTarget": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "assets",
            "runs"
          ]
        },
        "assets": {
          "$ref": "#/definitions/AssetsSearchTarget"
        },
        "runs": {
          "$ref": "#/definitions/RunsSearchTarget"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "assets",
        "assets": {
          "query": {
            "type": "properties",
            "properties": {
              "name": "string",
              "values": [
                "string"
              ]
            }
          }
        }
      }
    },
    "SelectIndexFrom1dEnumArraySeries": {
      "description": "For each timestamp, selects a single enum value from the 1D enum array at the specified index. If the index is out of bounds for an array at a given timestamp, it is omitted.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/Enum1dArraySeries"
        },
        "index": {
          "$ref": "#/definitions/IntegerConstant"
        }
      },
      "required": [
        "input",
        "index"
      ]
    },
    "SelectIndexFrom1dNumericArraySeries": {
      "description": "For each timestamp, selects a single numeric value from the 1D numeric array at the specified index. If the index is out of bounds for an array at a given timestamp, it is omitted.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/Numeric1dArraySeries"
        },
        "index": {
          "$ref": "#/definitions/IntegerConstant"
        }
      },
      "required": [
        "input",
        "index"
      ]
    },
    "SelectNewestPointsSeries": {
      "description": "Select the most recent N points from the input series by timestamp.",
      "type": "object",
      "properties": {
        "input": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericSeries"
            }
          ],
          "description": "The input series to select the newest points from."
        },
        "numPoints": {
          "allOf": [
            {
              "$ref": "#/definitions/IntegerConstant"
            }
          ],
          "description": "The number of points to select."
        }
      },
      "required": [
        "input",
        "numPoints"
      ]
    },
    "SelectOldestPointsSeries": {
      "description": "Select the earliest N points from the input series by timestamp.",
      "type": "object",
      "properties": {
        "input": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericSeries"
            }
          ],
          "description": "The input series to select the oldest points from."
        },
        "numPoints": {
          "allOf": [
            {
              "$ref": "#/definitions/IntegerConstant"
            }
          ],
          "description": "The number of points to select."
        }
      },
      "required": [
        "input",
        "numPoints"
      ]
    },
    "SelectProperty": {
      "description": "Selects a typed property value from every asset or run branch resolved from `dataset`. Inside a `WithSeriesDataset` definition, `dataset` may be omitted to use that node's wrapping input; it is required everywhere else. Asset branches read properties directly from their asset. Run branches read properties directly from their run, never from a backing asset or dataset. Direct saved-dataset branches are unsupported.",
      "type": "object",
      "properties": {
        "propertyName": {
          "type": "string",
          "x-alias": "PropertyName"
        },
        "dataset": {
          "$ref": "#/definitions/Dataset"
        }
      },
      "required": [
        "propertyName"
      ]
    },
    "SelectSeries": {
      "description": "Selects series from a dataset (might contain multiple tag groupings). When `name` is provided, selects that single channel. When `name` is omitted, selection starts from all channels in the dataset scope; callers narrow the selection with a `filterByTag` predicate on the reserved `NOMINAL_CHANNEL` tag key and preserve per-channel identity in the response with `selectTags`. Providing both `name` and a `NOMINAL_CHANNEL` filter is rejected as an invalid request. Raw and derived channels can both be selected through the reserved tag filter.",
      "type": "object",
      "properties": {
        "name": {
          "allOf": [
            {
              "$ref": "#/definitions/StringConstant"
            }
          ],
          "description": "The identifying series name to query"
        },
        "dataset": {
          "allOf": [
            {
              "$ref": "#/definitions/Dataset"
            }
          ],
          "description": "The dataset providing the data to query. May be omitted inside a `WithSeriesDataset` series definition, in which case it defaults to that node's wrapping `input`; required everywhere else."
        },
        "sampling": {
          "allOf": [
            {
              "$ref": "#/definitions/Sampling"
            }
          ],
          "description": "Raw-series sampling options. Supported for numeric and enum raw series."
        }
      }
    },
    "Series": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "raw",
            "enum",
            "numeric",
            "log",
            "array",
            "struct",
            "video"
          ]
        },
        "raw": {
          "allOf": [
            {
              "$ref": "#/definitions/Reference"
            }
          ],
          "x-deprecated": "use typed value of series instead."
        },
        "enum": {
          "$ref": "#/definitions/EnumSeries"
        },
        "numeric": {
          "$ref": "#/definitions/NumericSeries"
        },
        "log": {
          "$ref": "#/definitions/LogSeries"
        },
        "array": {
          "$ref": "#/definitions/ArraySeries"
        },
        "struct": {
          "$ref": "#/definitions/StructSeries"
        },
        "video": {
          "$ref": "#/definitions/Reference"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "raw",
        "raw": {
          "name": "string"
        }
      }
    },
    "SeriesCrossoverRanges": {
      "description": "Produces a list of zero-duration ranges at the first point where two series cross over one another",
      "type": "object",
      "properties": {
        "inputA": {
          "$ref": "#/definitions/NumericSeries"
        },
        "inputB": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericSeries"
            }
          ],
          "description": "The series `inputA` is compared against."
        }
      },
      "required": [
        "inputA",
        "inputB"
      ]
    },
    "SeriesEqualityRanges": {
      "description": "Produces a list of ranges for which provided series are all equal (or are not all equal).",
      "type": "object",
      "properties": {
        "input": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/NumericSeries"
          }
        },
        "equalityOperator": {
          "$ref": "#/definitions/EqualityOperator"
        },
        "tolerance": {
          "$ref": "#/definitions/DoubleConstant"
        },
        "persistenceWindowConfiguration": {
          "$ref": "#/definitions/PersistenceWindowConfiguration"
        },
        "interpolationConfiguration": {
          "allOf": [
            {
              "$ref": "#/definitions/InterpolationConfiguration"
            }
          ],
          "description": "Defaults to forward fill interpolation with a 1s interpolation radius",
          "x-deprecated": "Setting interpolation on this node is deprecated."
        }
      },
      "required": [
        "equalityOperator"
      ]
    },
    "SeriesVariable": {
      "description": "A series selected from a dataset, bound to a variable. The series type (numeric, enum, ...) is decided lazily by the node consuming the variable, matching the behaviour of channel variables.",
      "type": "object",
      "properties": {
        "select": {
          "$ref": "#/definitions/SelectSeries"
        },
        "groupByTags": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/StringConstant"
          },
          "uniqueItems": true,
          "description": "Tags that the series should be grouped by. If this is non-empty a grouped result will be returned with an entry for each grouping; otherwise all matching series are merged."
        }
      },
      "required": [
        "select"
      ]
    },
    "SetNegativeValuesToZero": {
      "type": "object",
      "properties": {}
    },
    "SignalFilterConfiguration": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "lowPass",
            "highPass",
            "bandPass",
            "bandStop"
          ]
        },
        "lowPass": {
          "$ref": "#/definitions/LowPassConfiguration"
        },
        "highPass": {
          "$ref": "#/definitions/HighPassConfiguration"
        },
        "bandPass": {
          "$ref": "#/definitions/BandPassConfiguration"
        },
        "bandStop": {
          "$ref": "#/definitions/BandStopConfiguration"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "lowPass",
        "lowPass": {
          "cutoffFrequency": {
            "type": "literal",
            "literal": 1
          }
        }
      }
    },
    "SignalFilterSeries": {
      "description": "Applies IIR-based signal filtering to input series. Includes low-pass, high-pass, band-pass, and band-stop filters. Currently supports variable-order bidirectional Butterworth filters, with fixed-size padding based on SciPy output.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/NumericSeries"
        },
        "signalFilterConfiguration": {
          "allOf": [
            {
              "$ref": "#/definitions/SignalFilterConfiguration"
            }
          ],
          "description": "Filter type and cutoff frequencies."
        },
        "order": {
          "allOf": [
            {
              "$ref": "#/definitions/IntegerConstant"
            }
          ],
          "description": "Order of filter. Must be a positive integer, and is effectively doubled for bidirectional filters."
        },
        "samplingFrequency": {
          "allOf": [
            {
              "$ref": "#/definitions/DoubleConstant"
            }
          ],
          "description": "The sampling frequency of the input series. Used to calculate normalized frequency for cutoff frequencies."
        }
      },
      "required": [
        "input",
        "signalFilterConfiguration",
        "order"
      ]
    },
    "Sin": {
      "description": "Computes the trigonometric sine of each value (input in radians).",
      "type": "object",
      "properties": {
        "x": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericSeries"
            }
          ],
          "description": "Input numeric series (radians)."
        }
      },
      "required": [
        "x"
      ]
    },
    "Sqrt": {
      "description": "Computes the square root of each value.",
      "type": "object",
      "properties": {
        "x": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericSeries"
            }
          ],
          "description": "Input numeric series (non-negative values)."
        }
      },
      "required": [
        "x"
      ]
    },
    "StabilityDetectionRanges": {
      "description": "Outputs a set of ranges where the input series is stable. For each point, the min and max are calculated over the specified lookback window, including the current point. A point is considered stable if its value does not deviate from the calculated min and the max by more than the threshold and the total number of points within the window is at least the specified amount. The threshold can be either fixed values or percentages of the value. The lookback window must be strictly positive. The minimum points threshold defaults to 2.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/NumericSeries"
        },
        "windowConfiguration": {
          "$ref": "#/definitions/StabilityWindowConfiguration"
        },
        "threshold": {
          "$ref": "#/definitions/compute.api.Threshold"
        }
      },
      "required": [
        "input",
        "windowConfiguration",
        "threshold"
      ]
    },
    "StabilityDetectionRangesV2": {
      "description": "Produces ranges where a numeric input is stable within a modern duration window.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/NumericSeries"
        },
        "window": {
          "allOf": [
            {
              "$ref": "#/definitions/compute.api.Duration"
            }
          ],
          "description": "Lookback window over which the input's spread is measured."
        },
        "minPoints": {
          "allOf": [
            {
              "$ref": "#/definitions/IntegerConstant"
            }
          ],
          "description": "Minimum number of points in the window. Defaults to 2."
        },
        "threshold": {
          "$ref": "#/definitions/compute.api.Threshold"
        }
      },
      "required": [
        "input",
        "window",
        "threshold"
      ]
    },
    "StabilityWindowConfiguration": {
      "type": "object",
      "properties": {
        "minPoints": {
          "allOf": [
            {
              "$ref": "#/definitions/IntegerConstant"
            }
          ],
          "description": "The minimum number of points within the window to create a stable range. Must be non-negative. If not present, will default to 2."
        },
        "duration": {
          "$ref": "#/definitions/DurationConstant"
        }
      },
      "required": [
        "duration"
      ]
    },
    "StaleRanges": {
      "description": "Produces a list of ranges for which data does not exist for the specified duration or longer. Increases window size by the specified staleness threshold on both ends to capture edge cases of data not currently in view.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/Series"
        },
        "threshold": {
          "$ref": "#/definitions/DurationConstant"
        },
        "startTimestamp": {
          "allOf": [
            {
              "$ref": "#/definitions/TimestampConstant"
            }
          ],
          "description": "The start timestamp of the range. If not specified, staleness will automatically use view range start."
        },
        "endTimestamp": {
          "allOf": [
            {
              "$ref": "#/definitions/TimestampConstant"
            }
          ],
          "x-deprecated": "No longer used and will be removed"
        }
      },
      "required": [
        "input",
        "threshold"
      ]
    },
    "StandardDeviation": {
      "description": "The standard deviation of points inside the time window.",
      "type": "object",
      "properties": {}
    },
    "StftOptions": {
      "description": "Options for frequency analyses that are backed by short-time Fourier transforms.",
      "type": "object",
      "properties": {
        "window": {
          "allOf": [
            {
              "$ref": "#/definitions/FftWindow"
            }
          ],
          "description": "Window function type to use"
        },
        "windowSymmetry": {
          "allOf": [
            {
              "$ref": "#/definitions/WindowSymmetry"
            }
          ],
          "description": "Either DFT_EVEN or SYMMETRIC"
        },
        "samplingFrequency": {
          "type": "number",
          "format": "double",
          "description": "Sampling frequency of the series in Hz. If absent, will calculate using the input series."
        },
        "nperseg": {
          "type": "integer",
          "format": "int32",
          "description": "Number of points per window segment."
        },
        "noverlap": {
          "type": "integer",
          "format": "int32",
          "description": "Number of points of overlap between windows. Must be less than nperseg."
        },
        "nfft": {
          "type": "integer",
          "format": "int32",
          "description": "Number of points to use in the FFT. Must be greater than or equal to nperseg."
        },
        "detrend": {
          "allOf": [
            {
              "$ref": "#/definitions/DetrendType"
            }
          ],
          "description": "Detrend the points in each window segment. If absent, will use the default detrend for that function."
        }
      }
    },
    "StringConstant": {
      "description": "A string constant that can be a literal value or a named variable reference.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "literal",
            "variable"
          ]
        },
        "literal": {
          "type": "string",
          "description": "Create from a literal string value."
        },
        "variable": {
          "type": "string",
          "x-alias": "VariableName",
          "description": "Create from a named reference."
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "literal",
        "literal": "string"
      }
    },
    "StringPropertyDimension": {
      "description": "Injects the value of a string property, under a tag key equal to the property name by default. Only supported on asset and run branches: asset branches read the asset's properties, and run branches, including run branches backed by an asset, read the run's properties, matching `SelectProperty`. Values are injected as is. A branch without the property, or whose property holds a numeric value, gets the reserved value `NOMINAL_ABSENT`.",
      "type": "object",
      "properties": {
        "propertyName": {
          "allOf": [
            {
              "$ref": "#/definitions/StringConstant"
            }
          ],
          "description": "Name of the property whose value to inject. Also the default tag key."
        }
      },
      "required": [
        "propertyName"
      ]
    },
    "StringSetConstant": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "literal",
            "variable"
          ]
        },
        "literal": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "uniqueItems": true
        },
        "variable": {
          "type": "string",
          "x-alias": "VariableName"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "literal",
        "literal": [
          "string"
        ]
      }
    },
    "StringSetConstantV2": {
      "description": "A set of string constants that can be a literal set or a named variable reference.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "literal",
            "variable"
          ]
        },
        "literal": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/StringConstant"
          },
          "uniqueItems": true,
          "description": "Create from a literal set of string constants."
        },
        "variable": {
          "type": "string",
          "x-alias": "VariableName",
          "description": "Create from a named reference."
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "literal",
        "literal": [
          {
            "type": "literal",
            "literal": "string"
          }
        ]
      }
    },
    "StructSelectTagsSeries": {
      "description": "Subsets the tag dimensions of the input struct series to the given tag keys. Preserves the input series' cardinality: points that share the selected keys but differ on dropped keys remain distinct.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/StructSeries"
        },
        "tagKeys": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/StringConstant"
          },
          "uniqueItems": true
        }
      },
      "required": [
        "input"
      ]
    },
    "StructSeries": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "channel",
            "raw",
            "derived",
            "combine",
            "selectStruct",
            "extractFromStruct",
            "toStartOfInterval",
            "timeShift",
            "filterByTag",
            "selectTags"
          ]
        },
        "channel": {
          "$ref": "#/definitions/ChannelSeries"
        },
        "raw": {
          "$ref": "#/definitions/Reference"
        },
        "derived": {
          "$ref": "#/definitions/DerivedSeries"
        },
        "combine": {
          "$ref": "#/definitions/CombineStructSeries"
        },
        "selectStruct": {
          "$ref": "#/definitions/SelectSeries"
        },
        "extractFromStruct": {
          "$ref": "#/definitions/ExtractStructFromStructSeries"
        },
        "toStartOfInterval": {
          "$ref": "#/definitions/StructToStartOfIntervalSeries"
        },
        "timeShift": {
          "$ref": "#/definitions/StructTimeShiftSeries"
        },
        "filterByTag": {
          "$ref": "#/definitions/StructTagFilterSeries"
        },
        "selectTags": {
          "$ref": "#/definitions/StructSelectTagsSeries"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "channel",
        "channel": {
          "type": "dataSource",
          "dataSource": {
            "dataSourceRid": {
              "type": "literal",
              "literal": "string"
            },
            "channel": {
              "type": "literal",
              "literal": "string"
            },
            "tags": {
              "key": {
                "type": "literal",
                "literal": "string"
              }
            },
            "tagFilters": {
              "type": "single",
              "single": {
                "key": {
                  "type": "literal",
                  "literal": "string"
                },
                "values": [
                  {
                    "type": "literal",
                    "literal": "string"
                  }
                ],
                "operator": "IN"
              }
            },
            "tagsToGroupBy": [
              "string"
            ],
            "groupByTags": [
              {
                "type": "literal",
                "literal": "string"
              }
            ]
          }
        }
      }
    },
    "StructTagFilterSeries": {
      "description": "Applies a tag predicate to the struct series produced by input.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/StructSeries"
        },
        "predicate": {
          "$ref": "#/definitions/TagPredicate"
        }
      },
      "required": [
        "input",
        "predicate"
      ]
    },
    "StructTimeShiftSeries": {
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/StructSeries"
        },
        "duration": {
          "$ref": "#/definitions/DurationConstant"
        }
      },
      "required": [
        "input",
        "duration"
      ]
    },
    "StructToStartOfIntervalSeries": {
      "description": "Snaps each point's timestamp to the start of its enclosing fixed-size time bucket. Buckets are epoch-aligned: a point at timestamp `t` (nanoseconds) is rewritten to `floor(t / window) * window`. Values and tag groupings are preserved; aggregation of points that collide on the snapped timestamp is the responsibility of downstream nodes.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/StructSeries"
        },
        "window": {
          "$ref": "#/definitions/compute.api.Duration"
        }
      },
      "required": [
        "input",
        "window"
      ]
    },
    "Subtract": {
      "description": "Subtracts right from left pointwise.",
      "type": "object",
      "properties": {
        "left": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericSeries"
            }
          ],
          "description": "Left-hand operand (minuend)."
        },
        "right": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericSeries"
            }
          ],
          "description": "Right-hand operand (subtrahend)."
        }
      },
      "required": [
        "left",
        "right"
      ]
    },
    "SumSeries": {
      "description": "For every timestamp specified in the input series, outputs a value that is the sum for that timestamp across all input series. Only outputs timestamps where all input series have an entry for that timestamp, subject to interpolation.",
      "type": "object",
      "properties": {
        "inputs": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/NumericSeries"
          },
          "description": "Input series across which to take the pointwise sum"
        },
        "interpolationConfiguration": {
          "allOf": [
            {
              "$ref": "#/definitions/InterpolationConfiguration"
            }
          ],
          "description": "Defaults to forward fill interpolation with a 1s interpolation radius",
          "x-deprecated": "Setting interpolation on this node is deprecated."
        }
      }
    },
    "Summation": {
      "description": "The sum of points inside the time window.",
      "type": "object",
      "properties": {}
    },
    "TagAnd": {
      "description": "Conjunction of two tag predicates (both must hold).",
      "type": "object",
      "properties": {
        "left": {
          "$ref": "#/definitions/TagPredicate"
        },
        "right": {
          "$ref": "#/definitions/TagPredicate"
        }
      },
      "required": [
        "left",
        "right"
      ]
    },
    "TagByIntervalsSeries": {
      "description": "Injects tags derived from interval boundaries onto a numeric series. Points within an interval get tagged; points outside all intervals are dropped. Intervals come from either events or ranges. If intervals with different tag map overlap, a data point falling in multiple intervals is duplicated into each matching output group. Overlapping intervals with equal tag maps are not allowed. Optional time shift subtracts a per-interval anchor from timestamps after matching.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/NumericSeries"
        },
        "intervals": {
          "$ref": "#/definitions/IntervalSource"
        },
        "timeShift": {
          "allOf": [
            {
              "$ref": "#/definitions/TagByIntervalsTimeShift"
            }
          ],
          "description": "When set, shift each matched point's timestamp by the chosen anchor for that interval."
        }
      },
      "required": [
        "input",
        "intervals"
      ]
    },
    "TagByIntervalsTimeShift": {
      "description": "How to shift timestamps after tagging (subtract anchor from each point in the interval slice).\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "intervalStart",
            "intervalEnd",
            "eventTimeShift"
          ]
        },
        "intervalStart": {
          "$ref": "#/definitions/IntervalStartTimeShift"
        },
        "intervalEnd": {
          "$ref": "#/definitions/IntervalEndTimeShift"
        },
        "eventTimeShift": {
          "$ref": "#/definitions/EventTimeShift"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "intervalStart",
        "intervalStart": {}
      }
    },
    "TagFilter": {
      "description": "A filter on a single tag key and set of values. For an IN operator, the tag key must match at least one of the values in the set. For a NOT_IN operator, it must not match any of the values in the set.",
      "type": "object",
      "properties": {
        "key": {
          "$ref": "#/definitions/StringConstant"
        },
        "values": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/StringConstant"
          },
          "uniqueItems": true
        },
        "operator": {
          "$ref": "#/definitions/TagFilterOperator"
        }
      },
      "required": [
        "key",
        "operator"
      ]
    },
    "TagFilterOperator": {
      "type": "string",
      "enum": [
        "IN",
        "NOT_IN"
      ]
    },
    "TagFilters": {
      "description": "A set of tag filters to apply to a channel. Allows for combining filters on multiple tag keys, but throws if any one tag key is specified in more than one filter.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "single",
            "and"
          ]
        },
        "single": {
          "$ref": "#/definitions/TagFilter"
        },
        "and": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/TagFilters"
          }
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "single",
        "single": {
          "key": {
            "type": "literal",
            "literal": "string"
          },
          "values": [
            {
              "type": "literal",
              "literal": "string"
            }
          ],
          "operator": "IN"
        }
      }
    },
    "TagIn": {
      "description": "Constrains a tag key to be in the given set of values.",
      "type": "object",
      "properties": {
        "key": {
          "$ref": "#/definitions/StringConstant"
        },
        "values": {
          "$ref": "#/definitions/StringSetConstantV2"
        }
      },
      "required": [
        "key",
        "values"
      ]
    },
    "TagNotIn": {
      "description": "Constrains a tag key to not be in the given set of values.",
      "type": "object",
      "properties": {
        "key": {
          "$ref": "#/definitions/StringConstant"
        },
        "values": {
          "$ref": "#/definitions/StringSetConstantV2"
        }
      },
      "required": [
        "key",
        "values"
      ]
    },
    "TagPredicate": {
      "description": "Conjunctive tag predicate for dataset filtering. Compiles to resolved TagFilters for storage and resolution-time folding against known tag assignments (e.g. TaggedDataset, search branches).\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "in",
            "notIn",
            "and"
          ]
        },
        "in": {
          "$ref": "#/definitions/TagIn"
        },
        "notIn": {
          "$ref": "#/definitions/TagNotIn"
        },
        "and": {
          "$ref": "#/definitions/TagAnd"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "in",
        "in": {
          "key": {
            "type": "literal",
            "literal": "string"
          },
          "values": {
            "type": "literal",
            "literal": [
              {
                "type": "literal",
                "literal": "string"
              }
            ]
          }
        }
      }
    },
    "TaggedDataset": {
      "description": "Injects one ephemeral tag (key and value) onto the underlying dataset.",
      "type": "object",
      "properties": {
        "input": {
          "allOf": [
            {
              "$ref": "#/definitions/Dataset"
            }
          ],
          "description": "The underlying dataset to tag."
        },
        "key": {
          "allOf": [
            {
              "$ref": "#/definitions/StringConstant"
            }
          ],
          "description": "Tag key to inject onto each series in the dataset."
        },
        "value": {
          "allOf": [
            {
              "$ref": "#/definitions/StringConstant"
            }
          ],
          "description": "Tag value to assign to the injected key."
        }
      },
      "required": [
        "input",
        "key",
        "value"
      ]
    },
    "Tan": {
      "description": "Computes the trigonometric tangent of each value (input in radians).",
      "type": "object",
      "properties": {
        "x": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericSeries"
            }
          ],
          "description": "Input numeric series (radians)."
        }
      },
      "required": [
        "x"
      ]
    },
    "compute.api.Threshold": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "absolute",
            "percentage"
          ]
        },
        "absolute": {
          "$ref": "#/definitions/AbsoluteThreshold"
        },
        "percentage": {
          "$ref": "#/definitions/PercentageThreshold"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "absolute",
        "absolute": {
          "value": {
            "type": "literal",
            "literal": 1
          }
        }
      }
    },
    "ThresholdOperator": {
      "type": "string",
      "enum": [
        "GREATER_THAN",
        "GREATER_THAN_OR_EQUAL_TO",
        "LESS_THAN",
        "LESS_THAN_OR_EQUAL_TO",
        "EQUAL_TO",
        "NOT_EQUAL_TO"
      ]
    },
    "ThresholdRangesComparison": {
      "description": "Selects the comparison applied to a numeric threshold.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "gt",
            "ge",
            "lt",
            "le",
            "eq",
            "ne"
          ]
        },
        "gt": {
          "$ref": "#/definitions/ThresholdRangesOrderedComparison"
        },
        "ge": {
          "$ref": "#/definitions/ThresholdRangesOrderedComparison"
        },
        "lt": {
          "$ref": "#/definitions/ThresholdRangesOrderedComparison"
        },
        "le": {
          "$ref": "#/definitions/ThresholdRangesOrderedComparison"
        },
        "eq": {
          "$ref": "#/definitions/ThresholdRangesEqualityComparison"
        },
        "ne": {
          "$ref": "#/definitions/ThresholdRangesEqualityComparison"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "gt",
        "gt": {
          "threshold": {
            "type": "literal",
            "literal": 1
          }
        }
      }
    },
    "ThresholdRangesEqualityComparison": {
      "description": "An equality comparison against a numeric threshold, within an optional tolerance.",
      "type": "object",
      "properties": {
        "threshold": {
          "allOf": [
            {
              "$ref": "#/definitions/DoubleConstant"
            }
          ],
          "description": "The value each input point is compared against."
        },
        "tolerance": {
          "allOf": [
            {
              "$ref": "#/definitions/DoubleConstant"
            }
          ],
          "description": "Maximum absolute difference from the threshold still counted as equal. Defaults to zero, i.e. exact equality."
        }
      },
      "required": [
        "threshold"
      ]
    },
    "ThresholdRangesOrderedComparison": {
      "description": "An ordering comparison against a single numeric threshold.",
      "type": "object",
      "properties": {
        "threshold": {
          "allOf": [
            {
              "$ref": "#/definitions/DoubleConstant"
            }
          ],
          "description": "The value each input point is compared against."
        }
      },
      "required": [
        "threshold"
      ]
    },
    "ThresholdRangesV2": {
      "description": "Produces ranges where a numeric input satisfies a threshold comparison.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/NumericSeries"
        },
        "minPoints": {
          "allOf": [
            {
              "$ref": "#/definitions/IntegerConstant"
            }
          ],
          "description": "Minimum number of matching points. Defaults to 1."
        },
        "minDuration": {
          "allOf": [
            {
              "$ref": "#/definitions/compute.api.Duration"
            }
          ],
          "description": "Minimum matching duration. Defaults to one nanosecond."
        },
        "rangeStart": {
          "allOf": [
            {
              "$ref": "#/definitions/RangeStart"
            }
          ],
          "description": "Selects whether the output begins at the first match or after persistence is satisfied."
        },
        "comparison": {
          "$ref": "#/definitions/ThresholdRangesComparison"
        }
      },
      "required": [
        "input",
        "comparison"
      ]
    },
    "ThresholdingRanges": {
      "description": "Produces a list of ranges for which the threshold condition is satisfied.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/NumericSeries"
        },
        "threshold": {
          "$ref": "#/definitions/DoubleConstant"
        },
        "operator": {
          "$ref": "#/definitions/ThresholdOperator"
        },
        "persistenceWindowConfiguration": {
          "$ref": "#/definitions/PersistenceWindowConfiguration"
        }
      },
      "required": [
        "input",
        "threshold",
        "operator"
      ]
    },
    "TimeDifferenceSeries": {
      "description": "Outputs a new series where each value is the difference between the time of the current and previous points.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/Series"
        },
        "timeUnit": {
          "allOf": [
            {
              "$ref": "#/definitions/TimeUnit"
            }
          ],
          "description": "The time unit used to define the output values. Defaults to seconds if not specified."
        }
      },
      "required": [
        "input"
      ]
    },
    "TimeSeriesCurveFit": {
      "description": "Fits a curve to a series vs its timestamps.",
      "type": "object",
      "properties": {
        "series": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericSeries"
            }
          ],
          "description": "The series to fit. Timestamps will be used as x values and data as y values. The leftmost (earliest) timestamp will be used as the value of 0, and all other timestamps will be relative to that."
        },
        "options": {
          "$ref": "#/definitions/TimeSeriesFitOptions"
        }
      },
      "required": [
        "series",
        "options"
      ]
    },
    "TimeSeriesFitOptions": {
      "type": "object",
      "properties": {
        "timeUnit": {
          "allOf": [
            {
              "$ref": "#/definitions/TimeUnit"
            }
          ],
          "description": "Time unit used for the timestamps to fit against. Defaults to seconds if not specified."
        }
      }
    },
    "TimeShiftedDataset": {
      "description": "Transforms a dataset by adding a time offset to all its data.",
      "type": "object",
      "properties": {
        "input": {
          "allOf": [
            {
              "$ref": "#/definitions/Dataset"
            }
          ],
          "description": "The underlying dataset to time-shift."
        },
        "offset": {
          "allOf": [
            {
              "$ref": "#/definitions/compute.api.Duration"
            }
          ],
          "description": "The time shift to apply. Positive values shift data forward in time, negative values shift backward."
        }
      },
      "required": [
        "input",
        "offset"
      ]
    },
    "TimestampConstant": {
      "description": "A timestamp constant that can be a literal value or a named variable reference.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "literal",
            "variable"
          ]
        },
        "literal": {
          "allOf": [
            {
              "$ref": "#/definitions/Timestamp"
            }
          ],
          "description": "Create from a literal timestamp value."
        },
        "variable": {
          "type": "string",
          "x-alias": "VariableName",
          "description": "Create from a named reference."
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "literal",
        "literal": {
          "seconds": 1,
          "nanos": 1
        }
      }
    },
    "UdfSource": {
      "description": "Source provider for a user-defined function.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "rust"
          ]
        },
        "rust": {
          "$ref": "#/definitions/RustUdfSource"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "rust",
        "rust": {
          "sourceCode": "string"
        }
      }
    },
    "UnaryArithmeticOperation": {
      "type": "string",
      "enum": [
        "COS",
        "SIN",
        "TAN",
        "ABS",
        "ASIN",
        "ACOS",
        "LOG",
        "LN",
        "SQRT"
      ],
      "x-enum-descriptions": {
        "COS": "Calculates the trigonometric cosine (input in radians)",
        "SIN": "Calculates the trigonometric sine (input in radians)",
        "TAN": "Calculates the trigonometric tangent (input in radians)",
        "ABS": "Calculates the absolute value",
        "ASIN": "Calculates the arcsine, returning radians",
        "ACOS": "Calculates the arccosine, returning radians",
        "LOG": "Calculates the base 10 logarithm",
        "LN": "Calculates the natural logarithm (base e)",
        "SQRT": "Calculates the square root"
      }
    },
    "UnaryArithmeticSeries": {
      "description": "Applies a point-wise transformation to a series. The transformation function is applied to every individual data point.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/NumericSeries"
        },
        "operation": {
          "$ref": "#/definitions/UnaryArithmeticOperation"
        }
      },
      "required": [
        "input",
        "operation"
      ]
    },
    "UnboundedBehavior": {
      "description": "Dictates how empty range bounds should be handled by the compute node. Defaults to INFINITY.",
      "type": "string",
      "enum": [
        "INFINITY",
        "WINDOW_BOUND"
      ]
    },
    "UnboundedRangeBehavior": {
      "description": "How to handle ranges with a missing start or end.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "clampToWindow",
            "drop"
          ]
        },
        "clampToWindow": {
          "allOf": [
            {
              "$ref": "#/definitions/Empty"
            }
          ],
          "description": "Clamp a missing range start to the compute request window start and a missing range end to the compute request window end."
        },
        "drop": {
          "allOf": [
            {
              "$ref": "#/definitions/Empty"
            }
          ],
          "description": "Drop the range if it has a missing start or end."
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "clampToWindow",
        "clampToWindow": {}
      }
    },
    "Union": {
      "description": "Uses the union of all input timestamps as the alignment grid.",
      "type": "object",
      "properties": {}
    },
    "UnionRanges": {
      "type": "object",
      "properties": {
        "inputs": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/RangeSeries"
          },
          "description": "The ranges to union."
        }
      }
    },
    "UnitConversionSeries": {
      "description": "Convert the given series to a different unit.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/NumericSeries"
        },
        "outputUnit": {
          "type": "string",
          "x-alias": "UnitSymbol"
        }
      },
      "required": [
        "input",
        "outputUnit"
      ]
    },
    "UnitOverrideSeries": {
      "description": "Override the unit of the given series without changing its values. Unlike unit conversion, no compatibility with the input's current unit is required.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/NumericSeries"
        },
        "unit": {
          "type": "string",
          "x-alias": "UnitSymbol",
          "description": "The unit to report for the input series. If absent, the input's unit is cleared."
        }
      },
      "required": [
        "input"
      ]
    },
    "ValueDifferenceSeries": {
      "description": "Calculates the first discrete difference of the input series. For each point, computes the difference between the current value and the previous value (current - previous). The first point in the input series is omitted from the output since it has no previous point to compare against.\n\nThis is equivalent to pandas DataFrame.diff() with period=1. Useful for analyzing changes between consecutive data points in time series data, such as detecting value increases or decreases.\n\nExample: For input values [1.0, 1.0, 2.0, 2.5, 1.8], the output would be [0.0, 1.0, 0.5, -0.7] at the corresponding timestamps (the first timestamp is omitted).",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/NumericSeries"
        },
        "negativeValuesConfiguration": {
          "allOf": [
            {
              "$ref": "#/definitions/NegativeValueConfiguration"
            }
          ],
          "description": "Defines the strategy for handling negative output values. Defaults to allowNegativeValues if not specified."
        }
      },
      "required": [
        "input"
      ]
    },
    "ValueMapSeries": {
      "description": "Maps a continuous numeric series to a discrete enum series using the specified value ranges.",
      "type": "object",
      "properties": {
        "input": {
          "allOf": [
            {
              "$ref": "#/definitions/NumericSeries"
            }
          ],
          "description": "The input series to map to an enumerated series"
        },
        "mapping": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/RangeMap"
          },
          "description": "The output of the first capturing range will be used. Ranges are start inclusive, end exclusive, must not overlap, and increasing from lowest to highest. Ranges can be open ended to the edge of the next or prior range. The first range can be open ended to negative infinity, and the last range can be open ended to positive infinity."
        },
        "default": {
          "allOf": [
            {
              "$ref": "#/definitions/StringConstant"
            }
          ],
          "description": "The default value if not captured by any range. If not specified, points will be filtered."
        }
      },
      "required": [
        "input"
      ]
    },
    "VariableValue": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "double",
            "computeNode",
            "duration",
            "integer",
            "channel",
            "derived",
            "series",
            "string",
            "stringSet",
            "timestamp"
          ]
        },
        "double": {
          "type": "number",
          "format": "double"
        },
        "computeNode": {
          "$ref": "#/definitions/compute.api.ComputeNodeWithContext"
        },
        "duration": {
          "$ref": "#/definitions/run.api.Duration"
        },
        "integer": {
          "type": "integer",
          "format": "int32"
        },
        "channel": {
          "allOf": [
            {
              "$ref": "#/definitions/ChannelSeries"
            }
          ],
          "x-deprecated": "use series instead."
        },
        "derived": {
          "$ref": "#/definitions/DerivedSeries"
        },
        "series": {
          "$ref": "#/definitions/SeriesVariable"
        },
        "string": {
          "type": "string"
        },
        "stringSet": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "uniqueItems": true
        },
        "timestamp": {
          "$ref": "#/definitions/Timestamp"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "double",
        "double": 1
      }
    },
    "Window": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "duration"
          ]
        },
        "duration": {
          "$ref": "#/definitions/DurationConstant"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "duration",
        "duration": {
          "type": "literal",
          "literal": {
            "seconds": 1,
            "nanos": 1
          }
        }
      }
    },
    "WindowSymmetry": {
      "type": "string",
      "enum": [
        "DFT_EVEN",
        "SYMMETRIC"
      ],
      "x-enum-descriptions": {
        "DFT_EVEN": "Generates dft-even/periodic window values.",
        "SYMMETRIC": "Generates symmetric window values."
      }
    },
    "WithSeriesDataset": {
      "description": "Adds one or more derived series to the base dataset. Each entry's definition must reference only the wrapping `input`. Series names must be unique within the request; a derived name replaces a same-named series from `input`.",
      "type": "object",
      "properties": {
        "input": {
          "allOf": [
            {
              "$ref": "#/definitions/Dataset"
            }
          ],
          "description": "The base dataset to which the new series will be added."
        },
        "series": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/NamedSeries"
          },
          "description": "The named derived series to add."
        }
      },
      "required": [
        "input"
      ]
    },
    "ZscoreSeries": {
      "description": "Computes the z-score for each series within a group-by family. For each group at each timestamp, the output is (value - mean) / stddev, where mean and stddev are computed across all groups in the family at that timestamp, using the interpolation configuration to align values across groups. When stddev is zero at a timestamp (e.g., all groups have the same value), that data point is excluded from the output. If groupByTags is empty, all groups in the input series will be considered as a single family. This node only produces meaningful results when the input has a group by.",
      "type": "object",
      "properties": {
        "input": {
          "$ref": "#/definitions/NumericSeries"
        },
        "groupByTags": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/StringConstant"
          },
          "uniqueItems": true,
          "description": "Tags to group by for the normalization. If left empty, all groups in the input will be considered as a single family. Otherwise, inputs will be normalized separately across the groups specified by the tags."
        },
        "interpolationConfiguration": {
          "allOf": [
            {
              "$ref": "#/definitions/InterpolationConfiguration"
            }
          ],
          "description": "Configuration for aligning values across groups at each timestamp. Defaults to forward fill interpolation with a 1s interpolation radius.",
          "x-deprecated": "Setting interpolation on this node is deprecated."
        }
      },
      "required": [
        "input"
      ]
    },
    "AnalystLayout": {
      "description": "A layout for analyst backing workbooks. Panels render inline in the conversation, so entries carry no positioning — only per-panel settings, keyed by the panel's viz id in WorkbookContent.charts.",
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "format": "uuid"
        },
        "panels": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/AnalystPanel"
          },
          "x-map-key": "VizId"
        }
      },
      "required": [
        "id"
      ]
    },
    "AnalystPanel": {
      "type": "object",
      "properties": {
        "timeRangeInputId": {
          "type": "string",
          "format": "uuid"
        }
      }
    },
    "CanvasConnection": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "v1"
          ]
        },
        "v1": {
          "$ref": "#/definitions/CanvasConnectionV1"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "v1",
        "v1": {
          "start": {
            "objectId": "string",
            "anchorId": "string"
          },
          "end": {
            "objectId": "string",
            "anchorId": "string"
          },
          "style": {
            "strokeStyle": {
              "type": "solid",
              "solid": {}
            },
            "lineColor": "string",
            "lineWidth": 1,
            "hideArrow": true
          },
          "routing": {
            "type": "orthogonal",
            "orthogonal": {
              "segmentPositions": [
                1
              ]
            }
          }
        }
      }
    },
    "CanvasConnectionRouting": {
      "description": "A manually edited route. When absent, clients calculate an automatic route.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "orthogonal"
          ]
        },
        "orthogonal": {
          "$ref": "#/definitions/OrthogonalConnectionRouting"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "orthogonal",
        "orthogonal": {
          "segmentPositions": [
            1
          ]
        }
      }
    },
    "CanvasConnectionStrokeStyle": {
      "description": "Visual stroke style for a canvas connection.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "solid",
            "dash"
          ]
        },
        "solid": {
          "$ref": "#/definitions/SolidStrokeStyle"
        },
        "dash": {
          "$ref": "#/definitions/DashStrokeStyle"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "solid",
        "solid": {}
      }
    },
    "CanvasConnectionStyle": {
      "description": "User-configurable visual styling for a canvas connection.",
      "type": "object",
      "properties": {
        "strokeStyle": {
          "allOf": [
            {
              "$ref": "#/definitions/CanvasConnectionStrokeStyle"
            }
          ],
          "description": "Defaults to solid when absent."
        },
        "lineColor": {
          "type": "string",
          "x-alias": "HexColor",
          "description": "Explicit color override for the connection line. When absent, clients use the default connection color, or the source object's boundary color when one applies."
        },
        "lineWidth": {
          "type": "integer",
          "format": "int32",
          "description": "Stroke width of the connection line, in logical canvas pixels, so it scales with canvas zoom. Must be positive. Absent means the client's default width."
        },
        "hideArrow": {
          "type": "boolean",
          "description": "Draws the connection as a plain line with no arrowhead. When omitted, treat as false."
        }
      }
    },
    "CanvasConnectionV1": {
      "description": "A connection between two canvas objects. Drawn as a one-way arrow from start to end unless style.hideArrow is true; swap those endpoints to reverse it.",
      "type": "object",
      "properties": {
        "start": {
          "allOf": [
            {
              "$ref": "#/definitions/CanvasEndpoint"
            }
          ],
          "description": "The source endpoint."
        },
        "end": {
          "allOf": [
            {
              "$ref": "#/definitions/CanvasEndpoint"
            }
          ],
          "description": "The target endpoint."
        },
        "style": {
          "allOf": [
            {
              "$ref": "#/definitions/CanvasConnectionStyle"
            }
          ],
          "description": "Visual styling for the connection. If absent, clients use defaults."
        },
        "routing": {
          "allOf": [
            {
              "$ref": "#/definitions/CanvasConnectionRouting"
            }
          ],
          "description": "Manual routing. When absent, clients calculate an automatic route."
        }
      },
      "required": [
        "start",
        "end"
      ]
    },
    "CanvasEndpoint": {
      "description": "An endpoint of a canvas connection, identifying an attachment point (anchor) on a canvas object.",
      "type": "object",
      "properties": {
        "objectId": {
          "type": "string",
          "format": "uuid",
          "description": "The canvas object containing the referenced anchor."
        },
        "anchorId": {
          "type": "string",
          "description": "Identifier of the attachment point on the canvas object. Kept as a string so clients can add custom anchors later without an API change. The initial well-known values are left, top, bottom, and right."
        }
      },
      "required": [
        "objectId",
        "anchorId"
      ]
    },
    "CanvasLayout": {
      "description": "A layout of elements freely placed on a canvas. CanvasPanel entries represent visualization nodes, and connection entries represent relationships between nodes.",
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "format": "uuid"
        },
        "objects": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/CanvasObject"
          }
        }
      },
      "required": [
        "id"
      ]
    },
    "CanvasObject": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "panel",
            "connection"
          ]
        },
        "panel": {
          "$ref": "#/definitions/CanvasPanel"
        },
        "connection": {
          "$ref": "#/definitions/CanvasConnection"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "panel",
        "panel": {
          "rect": {
            "x": 1,
            "y": 1,
            "width": 1,
            "height": 1
          },
          "hideLegend": true
        }
      }
    },
    "CanvasPanel": {
      "description": "A panel node or HMI widget placed on a canvas. Other CanvasObject variants may represent different node types and have their own behavior.",
      "type": "object",
      "properties": {
        "rect": {
          "$ref": "#/definitions/CanvasRect"
        },
        "hideLegend": {
          "type": "boolean",
          "x-deprecated": "Deprecated."
        }
      },
      "required": [
        "rect"
      ]
    },
    "CanvasRect": {
      "type": "object",
      "properties": {
        "x": {
          "type": "number",
          "format": "double"
        },
        "y": {
          "type": "number",
          "format": "double"
        },
        "width": {
          "type": "number",
          "format": "double"
        },
        "height": {
          "type": "number",
          "format": "double"
        }
      },
      "required": [
        "x",
        "y",
        "width",
        "height"
      ]
    },
    "ChartPanel": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "v1"
          ]
        },
        "v1": {
          "$ref": "#/definitions/ChartPanelV1"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "v1",
        "v1": {
          "id": "string",
          "chartRid": {
            "rid": "string",
            "version": 1
          },
          "hideLegend": true,
          "hideLabel": true
        }
      }
    },
    "ChartPanelV1": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "x-alias": "PanelId"
        },
        "chartRid": {
          "$ref": "#/definitions/VersionedVizId"
        },
        "hideLegend": {
          "type": "boolean",
          "x-deprecated": "No longer used."
        },
        "hideLabel": {
          "type": "boolean",
          "description": "When omitted, treat as false."
        }
      },
      "required": [
        "id",
        "chartRid",
        "hideLegend"
      ]
    },
    "DashStrokeStyle": {
      "type": "object",
      "properties": {}
    },
    "DocumentLayout": {
      "description": "A layout of a document with its text editor raw state JSON and node objects such as panels metadata.",
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "format": "uuid"
        },
        "textEditorJson": {
          "type": "string"
        },
        "nodes": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/DocumentNodeObject"
          }
        }
      },
      "required": [
        "id",
        "textEditorJson"
      ]
    },
    "DocumentNodeObject": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "panel"
          ]
        },
        "panel": {
          "$ref": "#/definitions/DocumentPanel"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "panel",
        "panel": {
          "dimension": {
            "width": 1,
            "height": 1
          },
          "timeRangeInputId": "string",
          "timeRange": {
            "type": "input",
            "input": "string"
          }
        }
      }
    },
    "DocumentPanel": {
      "type": "object",
      "properties": {
        "dimension": {
          "$ref": "#/definitions/NodeDimension"
        },
        "timeRangeInputId": {
          "type": "string",
          "format": "uuid",
          "x-deprecated": "Deprecated, use timeRange instead."
        },
        "timeRange": {
          "$ref": "#/definitions/PanelTimeRange"
        }
      },
      "required": [
        "dimension"
      ]
    },
    "EmptyPanel": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "v1"
          ]
        },
        "v1": {
          "$ref": "#/definitions/EmptyPanelV1"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "v1",
        "v1": {
          "id": "string",
          "hideLabel": true
        }
      }
    },
    "EmptyPanelV1": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "x-alias": "PanelId"
        },
        "hideLabel": {
          "type": "boolean",
          "description": "When omitted, treat as false."
        }
      },
      "required": [
        "id"
      ]
    },
    "NodeDimension": {
      "description": "Dimension of a node in pixels.",
      "type": "object",
      "properties": {
        "width": {
          "type": "number",
          "format": "double"
        },
        "height": {
          "type": "number",
          "format": "double"
        }
      },
      "required": [
        "width",
        "height"
      ]
    },
    "OrthogonalConnectionRouting": {
      "description": "A right-angle route. Each entry is the fixed coordinate of one interior segment, in logical canvas coordinates: x for vertical segments, y for horizontal ones. Entries alternate axis, starting perpendicular to the stub of the lexicographically smaller (objectId, anchorId) endpoint, and are independent of arrow direction. Values must be finite.",
      "type": "object",
      "properties": {
        "segmentPositions": {
          "type": "array",
          "items": {
            "type": "number",
            "format": "double"
          }
        }
      }
    },
    "Panel": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "viz",
            "chart",
            "empty",
            "split",
            "tabbed",
            "canvas",
            "document",
            "analyst"
          ]
        },
        "viz": {
          "$ref": "#/definitions/VizPanel"
        },
        "chart": {
          "$ref": "#/definitions/ChartPanel"
        },
        "empty": {
          "$ref": "#/definitions/EmptyPanel"
        },
        "split": {
          "$ref": "#/definitions/SplitPanel"
        },
        "tabbed": {
          "$ref": "#/definitions/TabbedPanel"
        },
        "canvas": {
          "$ref": "#/definitions/CanvasLayout"
        },
        "document": {
          "$ref": "#/definitions/DocumentLayout"
        },
        "analyst": {
          "$ref": "#/definitions/AnalystLayout"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "viz",
        "viz": {
          "type": "v1",
          "v1": {
            "id": "string",
            "vizId": "string",
            "hideLegend": true,
            "hideLabel": true
          }
        }
      }
    },
    "PanelTimeRange": {
      "description": "Panel's time range, either a literal time range or a time range input.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "input",
            "literal"
          ]
        },
        "input": {
          "type": "string",
          "format": "uuid"
        },
        "literal": {
          "$ref": "#/definitions/LiteralTimeRange"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "input",
        "input": "string"
      }
    },
    "SingleTab": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "v1"
          ]
        },
        "v1": {
          "$ref": "#/definitions/SingleTabV1"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "v1",
        "v1": {
          "title": "string",
          "panel": {
            "type": "viz",
            "viz": {
              "type": "v1",
              "v1": {
                "id": "string",
                "vizId": "string",
                "hideLegend": true,
                "hideLabel": true
              }
            }
          }
        }
      }
    },
    "SingleTabV1": {
      "type": "object",
      "properties": {
        "title": {
          "type": "string"
        },
        "panel": {
          "$ref": "#/definitions/Panel"
        }
      },
      "required": [
        "title",
        "panel"
      ]
    },
    "SolidStrokeStyle": {
      "type": "object",
      "properties": {}
    },
    "SplitPanel": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "v1"
          ]
        },
        "v1": {
          "$ref": "#/definitions/SplitPanelV1"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "v1",
        "v1": {
          "id": "string",
          "orientation": "HORIZONTAL",
          "sideOne": {
            "type": "viz",
            "viz": {
              "type": "v1",
              "v1": {
                "id": "string",
                "vizId": "string",
                "hideLegend": true,
                "hideLabel": true
              }
            }
          },
          "sideTwo": {
            "type": "viz",
            "viz": {
              "type": "v1",
              "v1": {
                "id": "string",
                "vizId": "string",
                "hideLegend": true,
                "hideLabel": true
              }
            }
          }
        }
      }
    },
    "SplitPanelOrientation": {
      "type": "string",
      "enum": [
        "HORIZONTAL",
        "VERTICAL"
      ]
    },
    "SplitPanelV1": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "x-alias": "PanelId"
        },
        "orientation": {
          "$ref": "#/definitions/SplitPanelOrientation"
        },
        "sideOne": {
          "$ref": "#/definitions/Panel"
        },
        "sideTwo": {
          "$ref": "#/definitions/Panel"
        }
      },
      "required": [
        "id",
        "orientation",
        "sideOne",
        "sideTwo"
      ]
    },
    "TabbedPanel": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "v1"
          ]
        },
        "v1": {
          "$ref": "#/definitions/TabbedPanelV1"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "v1",
        "v1": {
          "id": "string",
          "tabs": [
            {
              "type": "v1",
              "v1": {
                "title": "string",
                "panel": {
                  "type": "viz",
                  "viz": {
                    "type": "v1",
                    "v1": {
                      "id": "string",
                      "vizId": "string",
                      "hideLegend": true,
                      "hideLabel": true
                    }
                  }
                }
              }
            }
          ]
        }
      }
    },
    "TabbedPanelV1": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "x-alias": "PanelId"
        },
        "tabs": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/SingleTab"
          }
        }
      },
      "required": [
        "id"
      ]
    },
    "VizPanel": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "v1"
          ]
        },
        "v1": {
          "$ref": "#/definitions/VizPanelV1"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "v1",
        "v1": {
          "id": "string",
          "vizId": "string",
          "hideLegend": true,
          "hideLabel": true
        }
      }
    },
    "VizPanelV1": {
      "description": "Deprecated - use ChartPanel instead",
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "x-alias": "PanelId"
        },
        "vizId": {
          "type": "string",
          "x-alias": "VizId"
        },
        "hideLegend": {
          "type": "boolean",
          "x-deprecated": "No longer used."
        },
        "hideLabel": {
          "type": "boolean",
          "description": "When omitted, treat as false."
        }
      },
      "required": [
        "id",
        "vizId",
        "hideLegend"
      ]
    },
    "WorkbookLayout": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "v1"
          ]
        },
        "v1": {
          "$ref": "#/definitions/WorkbookLayoutV1"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "v1",
        "v1": {
          "rootPanel": {
            "type": "viz",
            "viz": {
              "type": "v1",
              "v1": {
                "id": "string",
                "vizId": "string",
                "hideLegend": true,
                "hideLabel": true
              }
            }
          }
        }
      }
    },
    "WorkbookLayoutV1": {
      "type": "object",
      "properties": {
        "rootPanel": {
          "allOf": [
            {
              "$ref": "#/definitions/Panel"
            }
          ],
          "description": "Only TabbedPanel supported."
        }
      },
      "required": [
        "rootPanel"
      ]
    },
    "ComputeEventQuery": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "searchText",
            "after",
            "before",
            "advancedTimeFilter",
            "asset",
            "template",
            "workbook",
            "dataReview",
            "originType",
            "dataReviewCheck",
            "dispositionStatus",
            "priority",
            "assignee",
            "eventType",
            "createdBy",
            "label",
            "property",
            "and",
            "or",
            "not",
            "workspace",
            "procedure",
            "procedureExecution",
            "stepId"
          ]
        },
        "searchText": {
          "$ref": "#/definitions/StringConstant"
        },
        "after": {
          "allOf": [
            {
              "$ref": "#/definitions/TimestampConstant"
            }
          ],
          "description": "Filters to events after this timestamp, exclusive. This includes events that start before, but end after this time."
        },
        "before": {
          "allOf": [
            {
              "$ref": "#/definitions/TimestampConstant"
            }
          ],
          "description": "Filters to events before this timestamp, exclusive. This includes events that start before, but end after this time."
        },
        "advancedTimeFilter": {
          "$ref": "#/definitions/api.EventTimeFilter"
        },
        "asset": {
          "$ref": "#/definitions/StringConstant"
        },
        "template": {
          "$ref": "#/definitions/StringConstant"
        },
        "workbook": {
          "$ref": "#/definitions/StringConstant"
        },
        "dataReview": {
          "$ref": "#/definitions/StringConstant"
        },
        "originType": {
          "$ref": "#/definitions/api.SearchEventOriginType"
        },
        "dataReviewCheck": {
          "$ref": "#/definitions/StringConstant"
        },
        "dispositionStatus": {
          "$ref": "#/definitions/api.EventDispositionStatus"
        },
        "priority": {
          "$ref": "#/definitions/StringConstant"
        },
        "assignee": {
          "$ref": "#/definitions/StringConstant"
        },
        "eventType": {
          "$ref": "#/definitions/api.EventType"
        },
        "createdBy": {
          "$ref": "#/definitions/StringConstant"
        },
        "label": {
          "$ref": "#/definitions/StringConstant"
        },
        "property": {
          "$ref": "#/definitions/rids.api.Property"
        },
        "and": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/ComputeEventQuery"
          }
        },
        "or": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/ComputeEventQuery"
          }
        },
        "not": {
          "$ref": "#/definitions/ComputeEventQuery"
        },
        "workspace": {
          "$ref": "#/definitions/StringConstant"
        },
        "procedure": {
          "$ref": "#/definitions/StringConstant"
        },
        "procedureExecution": {
          "$ref": "#/definitions/StringConstant"
        },
        "stepId": {
          "$ref": "#/definitions/StringConstant"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "searchText",
        "searchText": {
          "type": "literal",
          "literal": "string"
        }
      }
    },
    "api.EventDispositionStatus": {
      "type": "string",
      "enum": [
        "PENDING_REVIEW",
        "CLOSED_IGNORED",
        "CLOSED_REQUIRES_FURTHER_ACTION",
        "NO_DISPOSITION"
      ]
    },
    "api.EventTimeFilter": {
      "type": "object",
      "properties": {
        "timestamp": {
          "$ref": "#/definitions/TimestampConstant"
        },
        "timestampCondition": {
          "$ref": "#/definitions/api.EventTimeFilterCondition"
        }
      },
      "required": [
        "timestamp",
        "timestampCondition"
      ]
    },
    "api.EventTimeFilterCondition": {
      "type": "string",
      "enum": [
        "START_TIME_BEFORE_INCLUSIVE",
        "START_TIME_BEFORE_EXCLUSIVE",
        "START_TIME_AFTER_INCLUSIVE",
        "START_TIME_AFTER_EXCLUSIVE",
        "END_TIME_BEFORE_INCLUSIVE",
        "END_TIME_BEFORE_EXCLUSIVE",
        "END_TIME_AFTER_INCLUSIVE",
        "END_TIME_AFTER_EXCLUSIVE"
      ]
    },
    "api.EventType": {
      "type": "string",
      "enum": [
        "INFO",
        "FLAG",
        "ERROR",
        "SUCCESS"
      ]
    },
    "LabelsFilter": {
      "type": "object",
      "properties": {
        "operator": {
          "$ref": "#/definitions/SetOperator"
        },
        "labels": {
          "type": "array",
          "items": {
            "type": "string",
            "x-alias": "Label"
          }
        }
      },
      "required": [
        "operator"
      ]
    },
    "LiteralTimeRange": {
      "description": "A standard definition of a time range, optional t0 defined for relative time ranges.",
      "type": "object",
      "properties": {
        "absoluteRange": {
          "$ref": "#/definitions/Range"
        },
        "timeRangeType": {
          "$ref": "#/definitions/TimeRangeType"
        },
        "t0": {
          "$ref": "#/definitions/Timestamp"
        }
      },
      "required": [
        "absoluteRange",
        "timeRangeType"
      ]
    },
    "PropertiesFilter": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "x-alias": "PropertyName"
        },
        "values": {
          "type": "array",
          "items": {
            "type": "string",
            "x-alias": "PropertyValue"
          }
        }
      },
      "required": [
        "name"
      ]
    },
    "rids.api.Property": {
      "type": "object",
      "properties": {
        "name": {
          "$ref": "#/definitions/StringConstant"
        },
        "value": {
          "$ref": "#/definitions/StringConstant"
        }
      },
      "required": [
        "name",
        "value"
      ]
    },
    "api.SearchEventOriginType": {
      "type": "string",
      "enum": [
        "WORKBOOK",
        "TEMPLATE",
        "API",
        "DATA_REVIEW",
        "PROCEDURE"
      ]
    },
    "TimeRangeType": {
      "type": "string",
      "enum": [
        "ABSOLUTE",
        "RELATIVE"
      ]
    },
    "UserDuration": {
      "description": "Represents a time duration with a unit for user-facing display",
      "type": "object",
      "properties": {
        "duration": {
          "type": "number",
          "format": "double"
        },
        "unit": {
          "$ref": "#/definitions/TimeUnit"
        }
      },
      "required": [
        "duration",
        "unit"
      ]
    },
    "VersionedVizId": {
      "type": "object",
      "properties": {
        "rid": {
          "type": "string",
          "x-alias": "VizId"
        },
        "version": {
          "type": "integer",
          "format": "int32",
          "x-alias": "Version"
        }
      },
      "required": [
        "rid",
        "version"
      ]
    },
    "run.api.Duration": {
      "type": "object",
      "properties": {
        "seconds": {
          "type": "integer",
          "format": "int64"
        },
        "nanos": {
          "type": "integer",
          "format": "int64"
        }
      },
      "required": [
        "seconds",
        "nanos"
      ]
    },
    "BatchArchiveTemplatesRequest": {
      "type": "object",
      "properties": {
        "target": {
          "$ref": "#/definitions/TemplateArchiveTarget"
        }
      },
      "required": [
        "target"
      ],
      "example": {
        "target": {
          "type": "rids",
          "rids": [
            "<template rid>"
          ]
        }
      }
    },
    "BatchUnarchiveTemplatesRequest": {
      "type": "object",
      "properties": {
        "target": {
          "$ref": "#/definitions/TemplateArchiveTarget"
        }
      },
      "required": [
        "target"
      ],
      "example": {
        "target": {
          "type": "rids",
          "rids": [
            "<template rid>"
          ]
        }
      }
    },
    "CommitTemplateRequest": {
      "type": "object",
      "properties": {
        "charts": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/VersionedVizId"
          },
          "x-deprecated": "charts are no longer versioned resources. They are stored in workbook content."
        },
        "layout": {
          "$ref": "#/definitions/WorkbookLayout"
        },
        "content": {
          "$ref": "#/definitions/WorkbookContent"
        },
        "message": {
          "type": "string"
        },
        "latestCommit": {
          "type": "string",
          "x-alias": "CommitId",
          "description": "If present, will validate that the latest commit matches this id, and otherwise throw CommitConflict."
        }
      },
      "required": [
        "layout",
        "content",
        "message"
      ],
      "example": {
        "layout": {
          "type": "v1",
          "v1": {
            "rootPanel": {
              "type": "viz",
              "viz": {
                "type": "v1",
                "v1": {
                  "id": "<panel id>",
                  "vizId": "<viz id>",
                  "hideLegend": true
                }
              }
            }
          }
        },
        "content": {
          "channelVariables": {
            "<key>": {
              "variableName": "<channel variable name>",
              "computeSpec": {
                "type": "v1",
                "v1": "<compute spec v1>"
              }
            }
          },
          "charts": {
            "<key>": {
              "type": "boundary",
              "boundary": {
                "type": "v1",
                "v1": {
                  "type": {
                    "type": "source",
                    "source": {}
                  }
                }
              }
            }
          }
        },
        "message": "<message>"
      }
    },
    "CreateTemplateRequest": {
      "type": "object",
      "properties": {
        "title": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "labels": {
          "type": "array",
          "items": {
            "type": "string",
            "x-alias": "Label"
          },
          "uniqueItems": true
        },
        "properties": {
          "type": "object",
          "additionalProperties": {
            "type": "string",
            "x-alias": "PropertyValue"
          },
          "x-map-key": "PropertyName"
        },
        "isPublished": {
          "type": "boolean",
          "description": "Default is true"
        },
        "charts": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/VersionedVizId"
          },
          "x-deprecated": "charts are no longer versioned resources. They are stored in workbook content."
        },
        "layout": {
          "$ref": "#/definitions/WorkbookLayout"
        },
        "content": {
          "$ref": "#/definitions/WorkbookContent"
        },
        "message": {
          "type": "string"
        },
        "previewImage": {
          "allOf": [
            {
              "$ref": "#/definitions/ThemeAwareImage"
            }
          ],
          "description": "Theme-aware preview image for the template. Falls back to a default illustration if not provided."
        },
        "workspace": {
          "type": "string",
          "format": "rid",
          "x-alias": "WorkspaceRid",
          "description": "The workspace in which to create the template. If not provided, the template will be created in the default workspace for the user's organization, if the default workspace for the organization is configured."
        }
      },
      "required": [
        "title",
        "description",
        "layout",
        "content",
        "message"
      ],
      "example": {
        "title": "<title>",
        "description": "<description>",
        "layout": {
          "type": "v1",
          "v1": {
            "rootPanel": {
              "type": "viz",
              "viz": {
                "type": "v1",
                "v1": {
                  "id": "<panel id>",
                  "vizId": "<viz id>",
                  "hideLegend": true
                }
              }
            }
          }
        },
        "content": {
          "channelVariables": {
            "<key>": {
              "variableName": "<channel variable name>",
              "computeSpec": {
                "type": "v1",
                "v1": "<compute spec v1>"
              }
            }
          },
          "charts": {
            "<key>": {
              "type": "boundary",
              "boundary": {
                "type": "v1",
                "v1": {
                  "type": {
                    "type": "source",
                    "source": {}
                  }
                }
              }
            }
          }
        },
        "message": "<message>"
      }
    },
    "DuplicateTemplateRequest": {
      "description": "Request to duplicate a template. All content fields (layout, content) are copied from the source template. Metadata fields can be optionally overridden; if not provided, they default to the source template's values (except isPublished, which defaults to false).",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "description": "Override the title of the duplicated template. If not provided, generates a copy title from the source using the titleSuffix."
        },
        "titleSuffix": {
          "type": "string",
          "description": "Custom suffix for generating the copy title (e.g., \"v2\"). Defaults to \"copy\". Ignored if title is explicitly provided."
        },
        "description": {
          "type": "string",
          "description": "Override description. Defaults to the source template's description."
        },
        "isPublished": {
          "type": "boolean",
          "description": "Override published status. Defaults to false."
        },
        "workspace": {
          "type": "string",
          "format": "rid",
          "x-alias": "WorkspaceRid",
          "description": "The workspace for the duplicated template. If not provided, the template will be created in the default workspace for the user's organization."
        },
        "labels": {
          "type": "array",
          "items": {
            "type": "string",
            "x-alias": "Label"
          },
          "uniqueItems": true,
          "description": "Override labels. Defaults to the source template's labels."
        },
        "properties": {
          "type": "object",
          "additionalProperties": {
            "type": "string",
            "x-alias": "PropertyValue"
          },
          "x-map-key": "PropertyName",
          "description": "Override properties. Defaults to the source template's properties."
        },
        "previewImage": {
          "allOf": [
            {
              "$ref": "#/definitions/ThemeAwareImage"
            }
          ],
          "description": "Override preview image. Defaults to the source template's preview image."
        }
      },
      "example": {
        "title": "<title>",
        "titleSuffix": "<title suffix>",
        "description": "<description>",
        "isPublished": true,
        "workspace": "<workspace rid>",
        "labels": [
          "<label>"
        ],
        "properties": {
          "<key>": "<property value>"
        },
        "previewImage": {
          "light": "<attachment rid>",
          "dark": "<attachment rid>"
        }
      }
    },
    "GetAllLabelsAndPropertiesResponse": {
      "type": "object",
      "properties": {
        "properties": {
          "type": "object",
          "additionalProperties": {
            "type": "array",
            "items": {
              "type": "string",
              "x-alias": "PropertyValue"
            },
            "uniqueItems": true
          },
          "x-map-key": "PropertyName"
        },
        "labels": {
          "type": "array",
          "items": {
            "type": "string",
            "x-alias": "Label"
          },
          "uniqueItems": true
        }
      }
    },
    "MergeToMainRequest": {
      "type": "object",
      "properties": {
        "branchName": {
          "type": "string",
          "x-alias": "BranchName",
          "description": "If \"main\", the request will throw."
        },
        "message": {
          "type": "string"
        },
        "latestCommitOnMain": {
          "type": "string",
          "x-alias": "CommitId",
          "description": "If present, will validate that the latest commit matches this id, and otherwise throw CommitConflict."
        }
      },
      "required": [
        "branchName",
        "message"
      ],
      "example": {
        "branchName": "<branch name>",
        "message": "<message>"
      }
    },
    "SaveTemplateRequest": {
      "type": "object",
      "properties": {
        "charts": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/VersionedVizId"
          },
          "x-deprecated": "charts are no longer versioned resources. They are stored in workbook content."
        },
        "layout": {
          "$ref": "#/definitions/WorkbookLayout"
        },
        "content": {
          "$ref": "#/definitions/WorkbookContent"
        },
        "latestCommit": {
          "type": "string",
          "x-alias": "CommitId",
          "description": "If present, will validate that the latest commit matches this id, and otherwise throw CommitConflict."
        },
        "commitMessage": {
          "type": "string",
          "description": "Message to record on the working-state commit this save creates. At most 4096 characters. Defaults to \"auto-save\" when absent or blank."
        }
      },
      "required": [
        "layout",
        "content"
      ],
      "example": {
        "layout": {
          "type": "v1",
          "v1": {
            "rootPanel": {
              "type": "viz",
              "viz": {
                "type": "v1",
                "v1": {
                  "id": "<panel id>",
                  "vizId": "<viz id>",
                  "hideLegend": true
                }
              }
            }
          }
        },
        "content": {
          "channelVariables": {
            "<key>": {
              "variableName": "<channel variable name>",
              "computeSpec": {
                "type": "v1",
                "v1": "<compute spec v1>"
              }
            }
          },
          "charts": {
            "<key>": {
              "type": "boundary",
              "boundary": {
                "type": "v1",
                "v1": {
                  "type": {
                    "type": "source",
                    "source": {}
                  }
                }
              }
            }
          }
        }
      }
    },
    "SearchTemplatesQuery": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "and",
            "or",
            "not",
            "exactMatch",
            "searchText",
            "label",
            "labels",
            "property",
            "properties",
            "createdBy",
            "isArchived",
            "isPublished",
            "workspace",
            "authorIsCurrentUser",
            "authorRids"
          ]
        },
        "and": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/SearchTemplatesQuery"
          }
        },
        "or": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/SearchTemplatesQuery"
          }
        },
        "not": {
          "$ref": "#/definitions/SearchTemplatesQuery"
        },
        "exactMatch": {
          "type": "string",
          "description": "Performs case insensitive exact match search on the title."
        },
        "searchText": {
          "type": "string",
          "description": "Searches title and description only"
        },
        "label": {
          "type": "string",
          "x-alias": "Label",
          "x-deprecated": "use labels instead"
        },
        "labels": {
          "$ref": "#/definitions/LabelsFilter"
        },
        "property": {
          "allOf": [
            {
              "$ref": "#/definitions/nominal.api.Property"
            }
          ],
          "x-deprecated": "use properties"
        },
        "properties": {
          "$ref": "#/definitions/PropertiesFilter"
        },
        "createdBy": {
          "type": "string",
          "format": "rid",
          "x-alias": "UserRid"
        },
        "isArchived": {
          "type": "boolean"
        },
        "isPublished": {
          "type": "boolean"
        },
        "workspace": {
          "type": "string",
          "format": "rid",
          "x-alias": "WorkspaceRid"
        },
        "authorIsCurrentUser": {
          "type": "boolean"
        },
        "authorRids": {
          "type": "array",
          "items": {
            "type": "string",
            "format": "rid",
            "x-alias": "UserRid"
          },
          "uniqueItems": true
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "and",
        "and": []
      }
    },
    "SearchTemplatesRequest": {
      "type": "object",
      "properties": {
        "query": {
          "$ref": "#/definitions/SearchTemplatesQuery"
        },
        "sortBy": {
          "allOf": [
            {
              "$ref": "#/definitions/SortBy"
            }
          ],
          "description": "EDITED_AT descending by default"
        },
        "nextPageToken": {
          "type": "string",
          "x-alias": "Token"
        },
        "pageSize": {
          "type": "integer",
          "format": "int32",
          "description": "Defaults to 100. Will throw if larger than 1_000."
        }
      },
      "required": [
        "query"
      ],
      "example": {
        "query": {
          "type": "and",
          "and": []
        }
      }
    },
    "SearchTemplatesResponse": {
      "type": "object",
      "properties": {
        "results": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/TemplateSummary"
          }
        },
        "nextPageToken": {
          "type": "string",
          "x-alias": "Token"
        }
      }
    },
    "SortBy": {
      "type": "object",
      "properties": {
        "isDescending": {
          "type": "boolean"
        },
        "field": {
          "$ref": "#/definitions/SortByField"
        }
      },
      "required": [
        "isDescending",
        "field"
      ]
    },
    "SortByField": {
      "description": "UPDATED_AT is an alias for EDITED_AT.",
      "type": "string",
      "enum": [
        "NAME",
        "CREATED_AT",
        "UPDATED_AT",
        "EDITED_AT"
      ]
    },
    "Template": {
      "type": "object",
      "properties": {
        "rid": {
          "type": "string",
          "format": "rid",
          "x-alias": "TemplateRid"
        },
        "metadata": {
          "$ref": "#/definitions/TemplateMetadata"
        },
        "commit": {
          "$ref": "#/definitions/Commit"
        },
        "charts": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/VersionedVizId"
          },
          "x-deprecated": "charts are no longer versioned resources. They are stored in workbook content."
        },
        "layout": {
          "$ref": "#/definitions/WorkbookLayout"
        },
        "content": {
          "$ref": "#/definitions/WorkbookContent"
        }
      },
      "required": [
        "rid",
        "metadata",
        "commit",
        "layout",
        "content"
      ]
    },
    "TemplateArchiveTarget": {
      "description": "Selects the templates an archive or unarchive request applies to. Only an explicit set of rids is supported today; a query variant can be added later without breaking callers.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "rids"
          ]
        },
        "rids": {
          "type": "array",
          "items": {
            "type": "string",
            "format": "rid",
            "x-alias": "TemplateRid"
          },
          "uniqueItems": true,
          "description": "The templates to act on. Will throw if more than 1_000 rids are provided."
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "rids",
        "rids": [
          "string"
        ]
      }
    },
    "TemplateMetadata": {
      "type": "object",
      "properties": {
        "title": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "labels": {
          "type": "array",
          "items": {
            "type": "string",
            "x-alias": "Label"
          },
          "uniqueItems": true
        },
        "properties": {
          "type": "object",
          "additionalProperties": {
            "type": "string",
            "x-alias": "PropertyValue"
          },
          "x-map-key": "PropertyName"
        },
        "isArchived": {
          "type": "boolean"
        },
        "isPublished": {
          "type": "boolean"
        },
        "createdBy": {
          "type": "string",
          "format": "rid",
          "x-alias": "UserRid"
        },
        "createdAt": {
          "type": "string",
          "format": "date-time"
        },
        "updatedAt": {
          "type": "string",
          "format": "date-time"
        },
        "editedAt": {
          "type": "string",
          "format": "date-time",
          "description": "The time of the last permanent commit to the main branch."
        },
        "previewImage": {
          "$ref": "#/definitions/ThemeAwareImage"
        }
      },
      "required": [
        "title",
        "description",
        "isArchived",
        "isPublished",
        "createdBy",
        "createdAt",
        "updatedAt",
        "editedAt"
      ]
    },
    "TemplateSummary": {
      "type": "object",
      "properties": {
        "rid": {
          "type": "string",
          "format": "rid",
          "x-alias": "TemplateRid"
        },
        "metadata": {
          "$ref": "#/definitions/TemplateMetadata"
        }
      },
      "required": [
        "rid",
        "metadata"
      ]
    },
    "UpdateMetadataRequest": {
      "type": "object",
      "properties": {
        "title": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "labels": {
          "type": "array",
          "items": {
            "type": "string",
            "x-alias": "Label"
          },
          "uniqueItems": true
        },
        "properties": {
          "type": "object",
          "additionalProperties": {
            "type": "string",
            "x-alias": "PropertyValue"
          },
          "x-map-key": "PropertyName"
        },
        "isArchived": {
          "type": "boolean"
        },
        "isPublished": {
          "type": "boolean"
        },
        "previewImage": {
          "allOf": [
            {
              "$ref": "#/definitions/ThemeAwareImage"
            }
          ],
          "description": "Theme-aware preview image for the template. When provided, replaces the existing preview image."
        }
      },
      "example": {
        "title": "<title>",
        "description": "<description>",
        "labels": [
          "<label>"
        ],
        "properties": {
          "<key>": "<property value>"
        },
        "isArchived": true,
        "isPublished": true,
        "previewImage": {
          "light": "<attachment rid>",
          "dark": "<attachment rid>"
        }
      }
    },
    "UpdateRefNameRequest": {
      "type": "object",
      "properties": {
        "refNameUpdates": {
          "type": "object",
          "additionalProperties": {
            "type": "string",
            "x-alias": "DataSourceRefName"
          },
          "x-map-key": "DataSourceRefName"
        },
        "latestCommit": {
          "type": "string",
          "x-alias": "CommitId",
          "description": "If present, will validate that the latest commit matches this id, and otherwise throw CommitConflict."
        }
      },
      "example": {
        "refNameUpdates": {
          "<key>": "<data source ref name>"
        },
        "latestCommit": "<commit id>"
      }
    },
    "Commit": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "x-alias": "CommitId"
        },
        "resourceRid": {
          "type": "string",
          "format": "rid"
        },
        "parentCommit": {
          "type": "string",
          "x-alias": "CommitId"
        },
        "mergeParentCommit": {
          "type": "string",
          "x-alias": "CommitId"
        },
        "message": {
          "type": "string"
        },
        "isWorkingState": {
          "type": "boolean",
          "description": "A working state commit is created via the `saveWorkingState` endpoint and is non-permanent. In the future, it may be compacted and not exist."
        },
        "committedBy": {
          "type": "string",
          "format": "rid",
          "x-alias": "UserRid"
        },
        "committedAt": {
          "type": "string",
          "format": "date-time"
        }
      },
      "required": [
        "id",
        "resourceRid",
        "message",
        "isWorkingState",
        "committedBy",
        "committedAt"
      ]
    },
    "AllTabsStatsPanelScope": {
      "type": "object",
      "properties": {}
    },
    "AssetDataScopeInputValue": {
      "description": "An asset data scope input value.",
      "type": "object",
      "properties": {
        "assetRid": {
          "type": "string",
          "format": "rid",
          "x-alias": "AssetRid"
        }
      },
      "required": [
        "assetRid"
      ]
    },
    "AssetListDataScopeInputValue": {
      "description": "A data scope input value resolving to an explicit list of assets.",
      "type": "object",
      "properties": {
        "assetRids": {
          "type": "array",
          "items": {
            "type": "string",
            "format": "rid",
            "x-alias": "AssetRid"
          }
        }
      }
    },
    "AssetOffset": {
      "description": "An offset that can be applied to an asset.",
      "type": "object",
      "properties": {
        "offset": {
          "$ref": "#/definitions/workbookcommon.api.Offset"
        },
        "dataSources": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/workbookcommon.api.Offset"
          },
          "x-map-key": "DataSourceRefName"
        }
      }
    },
    "AssetQueryDataScopeInputValue": {
      "description": "A data scope input value resolving to the assets matching a search query.",
      "type": "object",
      "properties": {
        "query": {
          "$ref": "#/definitions/ResourceSearchQuery"
        }
      },
      "required": [
        "query"
      ]
    },
    "AssetSettings": {
      "type": "object",
      "properties": {
        "offset": {
          "$ref": "#/definitions/UserDuration"
        },
        "dataScopeOffsets": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/UserDuration"
          },
          "x-map-key": "DataSourceRefName"
        }
      }
    },
    "ByChannelColorMode": {
      "description": "Every trace of the same channel shares that channel's own color across all of the input's sources.",
      "type": "object",
      "properties": {}
    },
    "BySeriesColorMode": {
      "description": "Every individual trace (channel × source) gets its own color from the palette rotation. This is the original, default rendering.",
      "type": "object",
      "properties": {}
    },
    "BySourceColorMode": {
      "description": "Every trace from the same asset/run shares one color across all channels and panels.",
      "type": "object",
      "properties": {}
    },
    "DataScopeInputFilter": {
      "description": "A filter applied to a data scope input.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "tag",
            "event"
          ]
        },
        "tag": {
          "$ref": "#/definitions/TagDataScopeInputFilter"
        },
        "event": {
          "$ref": "#/definitions/EventDataScopeInputFilter"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "tag",
        "tag": {
          "id": "string",
          "key": {
            "type": "literal",
            "literal": "string"
          },
          "operator": "IN",
          "values": [
            {
              "type": "literal",
              "literal": "string"
            }
          ]
        }
      }
    },
    "DataScopeInputValue": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "asset",
            "run",
            "assetList",
            "runList",
            "assetQuery",
            "runQuery",
            "datasetList"
          ]
        },
        "asset": {
          "$ref": "#/definitions/AssetDataScopeInputValue"
        },
        "run": {
          "$ref": "#/definitions/RunDataScopeInputValue"
        },
        "assetList": {
          "$ref": "#/definitions/AssetListDataScopeInputValue"
        },
        "runList": {
          "$ref": "#/definitions/RunListDataScopeInputValue"
        },
        "assetQuery": {
          "$ref": "#/definitions/AssetQueryDataScopeInputValue"
        },
        "runQuery": {
          "$ref": "#/definitions/RunQueryDataScopeInputValue"
        },
        "datasetList": {
          "$ref": "#/definitions/DatasetListDataScopeInputValue"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "asset",
        "asset": {
          "assetRid": "string"
        }
      }
    },
    "DatasetListDataScopeInputValue": {
      "description": "A data scope input value resolving to an explicit list of datasets, without an intermediating run or asset.",
      "type": "object",
      "properties": {
        "datasetRids": {
          "type": "array",
          "items": {
            "type": "string",
            "format": "rid",
            "x-alias": "DatasetRid"
          }
        }
      }
    },
    "DriverSeriesAlignment": {
      "type": "object",
      "properties": {}
    },
    "EventAlignTo": {
      "description": "The align to value for an event offset. If the queried event is a moment, the offset will be the moment timestamp regardless of the align to value.",
      "type": "string",
      "enum": [
        "START",
        "END"
      ]
    },
    "EventAlignment": {
      "description": "An offset that is defined relative to the first target event found by query.",
      "type": "object",
      "properties": {
        "targetRunRid": {
          "type": "string",
          "format": "rid",
          "x-alias": "RunRid"
        },
        "alignTo": {
          "$ref": "#/definitions/EventAlignTo"
        },
        "eventQuery": {
          "$ref": "#/definitions/SearchQuery"
        }
      },
      "required": [
        "targetRunRid",
        "alignTo",
        "eventQuery"
      ]
    },
    "EventDataScopeInputFilter": {
      "description": "Restricts an input to all time ranges of events matching a query.",
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "format": "uuid",
          "description": "Stable client-provided identifier for the filter."
        },
        "query": {
          "allOf": [
            {
              "$ref": "#/definitions/ComputeEventQuery"
            }
          ],
          "description": "Event search query, using the same query type as event-based input alignment."
        }
      },
      "required": [
        "id",
        "query"
      ]
    },
    "InheritRelativeTimestampFormat": {
      "description": "Inherit the user-level relative timestamp display format.",
      "type": "object",
      "properties": {}
    },
    "InputOffset": {
      "type": "object",
      "properties": {
        "offset": {
          "allOf": [
            {
              "$ref": "#/definitions/workbookcommon.api.Offset"
            }
          ],
          "description": "An offset applied to every child of a dataScope input."
        },
        "assets": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/AssetOffset"
          },
          "x-map-key": "AssetRid",
          "description": "Additive offsets to specific assets"
        },
        "runs": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/RunOffset"
          },
          "x-map-key": "RunRid",
          "description": "Additive offsets to specific runs"
        }
      }
    },
    "InputType": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "tag"
          ]
        },
        "tag": {
          "$ref": "#/definitions/Tag"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "tag",
        "tag": {
          "key": {
            "type": "literal",
            "literal": {
              "id": "string",
              "value": "string"
            }
          },
          "values": [
            {
              "type": "literal",
              "literal": {
                "id": "string",
                "value": "string"
              }
            }
          ]
        }
      }
    },
    "IntersectAlignment": {
      "type": "object",
      "properties": {}
    },
    "workbookcommon.api.Offset": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "custom",
            "runAlign",
            "eventAlign"
          ]
        },
        "custom": {
          "$ref": "#/definitions/UserDuration"
        },
        "runAlign": {
          "$ref": "#/definitions/RunAlignment"
        },
        "eventAlign": {
          "$ref": "#/definitions/EventAlignment"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "custom",
        "custom": {
          "duration": 1,
          "unit": "DAYS"
        }
      }
    },
    "RunAlignTo": {
      "description": "The align to value for a run offset.",
      "type": "string",
      "enum": [
        "START",
        "END"
      ]
    },
    "RunAlignment": {
      "description": "An offset that is defined relative to a target run.",
      "type": "object",
      "properties": {
        "alignTo": {
          "$ref": "#/definitions/RunAlignTo"
        },
        "targetRunRid": {
          "type": "string",
          "format": "rid",
          "x-alias": "RunRid"
        }
      },
      "required": [
        "alignTo",
        "targetRunRid"
      ]
    },
    "RunDataScopeInputValue": {
      "description": "A run data scope input value.",
      "type": "object",
      "properties": {
        "runRid": {
          "type": "string",
          "format": "rid",
          "x-alias": "RunRid"
        }
      },
      "required": [
        "runRid"
      ]
    },
    "RunListDataScopeInputValue": {
      "description": "A data scope input value resolving to an explicit list of runs.",
      "type": "object",
      "properties": {
        "runRids": {
          "type": "array",
          "items": {
            "type": "string",
            "format": "rid",
            "x-alias": "RunRid"
          }
        }
      }
    },
    "RunOffset": {
      "description": "An offset that can be applied to a run.",
      "type": "object",
      "properties": {
        "offset": {
          "$ref": "#/definitions/workbookcommon.api.Offset"
        },
        "assets": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/AssetOffset"
          },
          "x-map-key": "AssetRid"
        }
      }
    },
    "RunQueryDataScopeInputValue": {
      "description": "A data scope input value resolving to the runs matching a search query.",
      "type": "object",
      "properties": {
        "query": {
          "$ref": "#/definitions/ResourceSearchQuery"
        }
      },
      "required": [
        "query"
      ]
    },
    "RunSettings": {
      "type": "object",
      "properties": {
        "offset": {
          "$ref": "#/definitions/UserDuration"
        },
        "assetSettings": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/AssetSettings"
          },
          "x-map-key": "AssetRid"
        }
      }
    },
    "SelectedTabStatsPanelScope": {
      "type": "object",
      "properties": {}
    },
    "Tag": {
      "description": "A tag input contains tag key and tag value information that can apply to a channel's compute tree. Applies the tag to both the tag filter and tag group by fields of the series node in the compute tree.",
      "type": "object",
      "properties": {
        "key": {
          "allOf": [
            {
              "$ref": "#/definitions/TagString"
            }
          ],
          "description": "The key of the tag for the filter and group by compute arguments."
        },
        "values": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/TagString"
          },
          "description": "The values of the tag to filter against. An empty list will treat the tag as a wildcard, including all values in the compute"
        }
      },
      "required": [
        "key"
      ]
    },
    "TagDataScopeInputFilter": {
      "description": "Filters an input's datasets by a tag key and set of values. The key and values can be literals or workbook variable references. For IN, the tag must match at least one value. For NOT_IN, it must not match any value.",
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "format": "uuid",
          "description": "Stable client-provided identifier for the filter."
        },
        "key": {
          "$ref": "#/definitions/StringConstant"
        },
        "operator": {
          "$ref": "#/definitions/TagFilterOperator"
        },
        "values": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/StringConstant"
          },
          "uniqueItems": true,
          "description": "Tag values to include or exclude. An empty set matches no datasets for either operator. Absent values impose no restriction and match all datasets."
        }
      },
      "required": [
        "id",
        "key",
        "operator"
      ]
    },
    "TagString": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "literal"
          ]
        },
        "literal": {
          "$ref": "#/definitions/TagStringLiteral"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "literal",
        "literal": {
          "id": "string",
          "value": "string"
        }
      }
    },
    "TagStringLiteral": {
      "description": "A literal string value",
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "format": "uuid",
          "description": "A unique identifier for this string. Cannot be shared across different Tag inputs. Used as the variable id for the StringConstant applied to the tag fields of the channel compute node."
        },
        "value": {
          "type": "string",
          "description": "The string value."
        }
      },
      "required": [
        "id",
        "value"
      ]
    },
    "TimeRange": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "timeRangeV1"
          ]
        },
        "timeRangeV1": {
          "$ref": "#/definitions/TimeRangeV1"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "timeRangeV1",
        "timeRangeV1": {
          "label": "string",
          "time": {
            "absoluteRange": {
              "start": {
                "seconds": 1,
                "nanos": 1
              },
              "end": {
                "seconds": 1,
                "nanos": 1
              }
            },
            "timeRangeType": "ABSOLUTE",
            "t0": {
              "seconds": 1,
              "nanos": 1
            }
          }
        }
      }
    },
    "TimeRangeInput": {
      "description": "A time range input that can be applied to panel(s) Deprecated: use TimeRange instead.",
      "type": "object",
      "properties": {
        "label": {
          "type": "string",
          "description": "The label of the input for display purposes."
        },
        "timeRange": {
          "$ref": "#/definitions/Range"
        },
        "timeRangeType": {
          "allOf": [
            {
              "$ref": "#/definitions/WorkbookTimeRangeType"
            }
          ],
          "description": "The type of time range to use for the input."
        }
      },
      "required": [
        "timeRange",
        "timeRangeType"
      ]
    },
    "TimeRangeV1": {
      "type": "object",
      "properties": {
        "label": {
          "type": "string"
        },
        "time": {
          "$ref": "#/definitions/LiteralTimeRange"
        }
      },
      "required": [
        "time"
      ]
    },
    "UnionAlignment": {
      "type": "object",
      "properties": {}
    },
    "WorkbookAlignmentStrategy": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "driverSeries",
            "union",
            "intersect"
          ]
        },
        "driverSeries": {
          "$ref": "#/definitions/DriverSeriesAlignment"
        },
        "union": {
          "$ref": "#/definitions/UnionAlignment"
        },
        "intersect": {
          "$ref": "#/definitions/IntersectAlignment"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "driverSeries",
        "driverSeries": {}
      }
    },
    "WorkbookContent": {
      "type": "object",
      "properties": {
        "channelVariables": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/ChannelVariable"
          },
          "x-map-key": "ChannelVariableName",
          "x-alias": "WorkbookChannelVariableMap"
        },
        "inputs": {
          "$ref": "#/definitions/WorkbookInputs"
        },
        "charts": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/VizDefinition"
          },
          "x-map-key": "VizId",
          "x-alias": "WorkbookVizDefinitionMap",
          "description": "map of visualizations. Previously termed \"charts\""
        },
        "settings": {
          "$ref": "#/definitions/WorkbookSettings"
        },
        "dataScopeInputs": {
          "$ref": "#/definitions/WorkbookDataScopeInputs"
        },
        "timeRangeInputs": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/TimeRangeInput"
          },
          "x-deprecated": "Deprecated, use timeRanges instead."
        },
        "timeRanges": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/TimeRange"
          }
        },
        "reportContent": {
          "type": "string"
        },
        "version": {
          "type": "string",
          "description": "Schema version this content was last written with, as a semver string. Used by the client to gate load-time content migrations: migrations introduced after this version are applied on read. Absent for content written before versioning was introduced."
        }
      },
      "required": [
        "channelVariables",
        "charts"
      ]
    },
    "WorkbookDataScopeInput": {
      "description": "A data scope input that binds a variable name to an asset or run RID. The variable name is the map key.",
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "x-alias": "WorkbookDataScopeInputName",
          "x-deprecated": "Deprecated in favor of label."
        },
        "label": {
          "type": "string"
        },
        "value": {
          "$ref": "#/definitions/DataScopeInputValue"
        },
        "colorMode": {
          "allOf": [
            {
              "$ref": "#/definitions/WorkbookDataScopeInputColorMode"
            }
          ],
          "description": "How traces from this input are colored. Absent means bySeries (palette rotation, the original behaviour) for backward compatibility."
        },
        "alignment": {
          "allOf": [
            {
              "$ref": "#/definitions/DatasetAnchor"
            }
          ],
          "description": "Structural dataset alignment applied before any input time shift. Absent means the input uses the dataset's source timestamps."
        },
        "filters": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/DataScopeInputFilter"
          },
          "description": "Filters applied to the input's datasets. All filters must match. Absent or empty means the input is unfiltered."
        }
      },
      "required": [
        "name",
        "value"
      ]
    },
    "WorkbookDataScopeInputColorMode": {
      "description": "How traces originating from this input are colored. Modeled as a union so individual modes can carry their own configuration in the future without a breaking change.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "byChannel",
            "bySource",
            "bySeries"
          ]
        },
        "byChannel": {
          "$ref": "#/definitions/ByChannelColorMode"
        },
        "bySource": {
          "$ref": "#/definitions/BySourceColorMode"
        },
        "bySeries": {
          "$ref": "#/definitions/BySeriesColorMode"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "byChannel",
        "byChannel": {}
      }
    },
    "WorkbookDataScopeInputs": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "v1"
          ]
        },
        "v1": {
          "$ref": "#/definitions/WorkbookDataScopeInputsV1"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "v1",
        "v1": {
          "inputs": {
            "key": {
              "name": "string",
              "label": "string",
              "value": {
                "type": "asset",
                "asset": {
                  "assetRid": "string"
                }
              },
              "colorMode": {
                "type": "byChannel",
                "byChannel": {}
              },
              "alignment": {
                "type": "run",
                "run": {
                  "type": "intervalStart",
                  "intervalStart": {}
                }
              },
              "filters": [
                {
                  "type": "tag",
                  "tag": {
                    "id": "string",
                    "key": {
                      "type": "literal",
                      "literal": "string"
                    },
                    "operator": "IN",
                    "values": [
                      {
                        "type": "literal",
                        "literal": "string"
                      }
                    ]
                  }
                }
              ]
            }
          }
        }
      }
    },
    "WorkbookDataScopeInputsV1": {
      "description": "A map of data scope input variable name to its definition.",
      "type": "object",
      "properties": {
        "inputs": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/WorkbookDataScopeInput"
          },
          "x-map-key": "WorkbookDataScopeInputId"
        }
      }
    },
    "WorkbookFillStrategy": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "forwardFill",
            "linear"
          ]
        },
        "forwardFill": {
          "$ref": "#/definitions/UserDuration"
        },
        "linear": {
          "$ref": "#/definitions/UserDuration"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "forwardFill",
        "forwardFill": {
          "duration": 1,
          "unit": "DAYS"
        }
      }
    },
    "WorkbookInput": {
      "description": "A workbook input is a value managed at the workbook level that can be applied to multiple elements.",
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "format": "uuid",
          "description": "The unique identifier of the input."
        },
        "label": {
          "type": "string",
          "description": "The label of the input for display purposes."
        },
        "value": {
          "$ref": "#/definitions/InputType"
        }
      },
      "required": [
        "id",
        "value"
      ]
    },
    "WorkbookInputs": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "v1"
          ]
        },
        "v1": {
          "$ref": "#/definitions/WorkbookInputsV1"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "v1",
        "v1": {
          "inputs": [
            {
              "id": "string",
              "label": "string",
              "value": {
                "type": "tag",
                "tag": {
                  "key": {
                    "type": "literal",
                    "literal": {
                      "id": "string",
                      "value": "string"
                    }
                  },
                  "values": [
                    {
                      "type": "literal",
                      "literal": {
                        "id": "string",
                        "value": "string"
                      }
                    }
                  ]
                }
              }
            }
          ]
        }
      }
    },
    "WorkbookInputsV1": {
      "description": "A list of workbook inputs.",
      "type": "object",
      "properties": {
        "inputs": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/WorkbookInput"
          }
        }
      }
    },
    "WorkbookOffsets": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "v1"
          ]
        },
        "v1": {
          "$ref": "#/definitions/WorkbookOffsetsV1"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "v1",
        "v1": {
          "runs": {
            "key": {
              "offset": {
                "type": "custom",
                "custom": {
                  "duration": 1,
                  "unit": "DAYS"
                }
              },
              "assets": {
                "key": {
                  "offset": {
                    "type": "custom",
                    "custom": {
                      "duration": 1,
                      "unit": "DAYS"
                    }
                  },
                  "dataSources": {
                    "key": {
                      "type": "custom",
                      "custom": {
                        "duration": 1,
                        "unit": "DAYS"
                      }
                    }
                  }
                }
              }
            }
          },
          "assets": {
            "key": {
              "offset": {
                "type": "custom",
                "custom": {
                  "duration": 1,
                  "unit": "DAYS"
                }
              },
              "dataSources": {
                "key": {
                  "type": "custom",
                  "custom": {
                    "duration": 1,
                    "unit": "DAYS"
                  }
                }
              }
            }
          },
          "inputs": {
            "key": {
              "offset": {
                "type": "custom",
                "custom": {
                  "duration": 1,
                  "unit": "DAYS"
                }
              },
              "assets": {
                "key": {
                  "offset": {
                    "type": "custom",
                    "custom": {
                      "duration": 1,
                      "unit": "DAYS"
                    }
                  },
                  "dataSources": {
                    "key": {
                      "type": "custom",
                      "custom": {
                        "duration": 1,
                        "unit": "DAYS"
                      }
                    }
                  }
                }
              },
              "runs": {
                "key": {
                  "offset": {
                    "type": "custom",
                    "custom": {
                      "duration": 1,
                      "unit": "DAYS"
                    }
                  },
                  "assets": {
                    "key": {
                      "offset": {
                        "type": "custom",
                        "custom": {
                          "duration": 1,
                          "unit": "DAYS"
                        }
                      },
                      "dataSources": {
                        "key": {
                          "type": "custom",
                          "custom": {
                            "duration": 1,
                            "unit": "DAYS"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "WorkbookOffsetsV1": {
      "type": "object",
      "properties": {
        "runs": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/RunOffset"
          },
          "x-map-key": "RunRid",
          "description": "Deprecated - use dataScope inputs"
        },
        "assets": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/AssetOffset"
          },
          "x-map-key": "AssetRid",
          "description": "Deprecated - use dataScope inputs"
        },
        "inputs": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/InputOffset"
          },
          "x-map-key": "WorkbookDataScopeInputId"
        }
      }
    },
    "WorkbookRelativeTimestampFormat": {
      "description": "Workbook-level display format for relative timestamps.\n\nSet `type` to the name of one of the other fields, and set only that field.",
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "inherit",
            "temporalSubunits",
            "totalSeconds"
          ]
        },
        "inherit": {
          "$ref": "#/definitions/InheritRelativeTimestampFormat"
        },
        "temporalSubunits": {
          "$ref": "#/definitions/TemporalSubunitsRelativeTimestampFormat"
        },
        "totalSeconds": {
          "$ref": "#/definitions/TotalSecondsRelativeTimestampFormat"
        }
      },
      "required": [
        "type"
      ],
      "example": {
        "type": "inherit",
        "inherit": {}
      }
    },
    "WorkbookSettings": {
      "type": "object",
      "properties": {
        "assetSettings": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/AssetSettings"
          },
          "x-map-key": "AssetRid",
          "description": "Settings for assets to be used in the workbook. This should be present for asset workbooks."
        },
        "runSettings": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/RunSettings"
          },
          "x-map-key": "RunRid",
          "description": "Settings for runs to be used in the workbook. This should be present for run workbooks."
        },
        "timeSettings": {
          "allOf": [
            {
              "$ref": "#/definitions/WorkbookTimeSettings"
            }
          ],
          "description": "Time range settings when users access a workbook. Time range URL query params will take precedence over persisted the global time range."
        },
        "offsets": {
          "allOf": [
            {
              "$ref": "#/definitions/WorkbookOffsets"
            }
          ],
          "description": "Time offsets that can be applied to the workbook."
        },
        "defaultStalenessConfiguration": {
          "allOf": [
            {
              "$ref": "#/definitions/StalenessConfiguration"
            }
          ],
          "description": "Default staleness configuration for new time series panels in the workbook. When set, new time series panels will use this instead of the 1-second default."
        },
        "fillStrategy": {
          "allOf": [
            {
              "$ref": "#/definitions/WorkbookFillStrategy"
            }
          ],
          "description": "Workbook-wide fill strategy for compute requests. When unset, compute falls back to its default."
        },
        "alignmentStrategy": {
          "allOf": [
            {
              "$ref": "#/definitions/WorkbookAlignmentStrategy"
            }
          ],
          "description": "Workbook-wide alignment strategy for compute requests. When unset, compute falls back to its default."
        },
        "statsPanelScope": {
          "allOf": [
            {
              "$ref": "#/definitions/WorkbookStatsPanelScope"
            }
          ],
          "description": "Which panels the workbook's statistics table collects variables from. When absent, the table shows only the variables plotted on the selected tab."
        }
      }
    },
    "WorkbookStatsPanelScope": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "selectedTab",
            "allTabs"
          ]
        },
        "selectedTab": {
          "$ref": "#/definitions/SelectedTabStatsPanelScope"
        },
        "allTabs": {
          "$ref": "#/definitions/AllTabsStatsPanelScope"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "selectedTab",
        "selectedTab": {}
      }
    },
    "WorkbookTimeRangeType": {
      "type": "string",
      "enum": [
        "ABSOLUTE",
        "RELATIVE"
      ]
    },
    "WorkbookTimeSettings": {
      "type": "object",
      "x-union": true,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "v1"
          ]
        },
        "v1": {
          "$ref": "#/definitions/WorkbookTimeSettingsV1"
        }
      },
      "required": [
        "type"
      ],
      "description": "Set `type` to the name of one of the other fields, and set only that field.",
      "example": {
        "type": "v1",
        "v1": {
          "timeRangeType": "ABSOLUTE",
          "globalTimeRange": {
            "start": {
              "seconds": 1,
              "nanos": 1
            },
            "end": {
              "seconds": 1,
              "nanos": 1
            }
          },
          "isGlobalTime": true,
          "tabTimeRanges": {
            "key": {
              "start": {
                "seconds": 1,
                "nanos": 1
              },
              "end": {
                "seconds": 1,
                "nanos": 1
              }
            }
          },
          "relativeTimestampFormat": {
            "type": "inherit",
            "inherit": {}
          }
        }
      }
    },
    "WorkbookTimeSettingsV1": {
      "description": "Time range configuration for workbooks",
      "type": "object",
      "properties": {
        "timeRangeType": {
          "allOf": [
            {
              "$ref": "#/definitions/WorkbookTimeRangeType"
            }
          ],
          "description": "The time range type of the workbook"
        },
        "globalTimeRange": {
          "allOf": [
            {
              "$ref": "#/definitions/Range"
            }
          ],
          "description": "The global time range a workbook falls back to."
        },
        "isGlobalTime": {
          "type": "boolean",
          "description": "If true, workbook will default to globalTimeRange for all tabs. If false, will attempt to use tabTime to populate the workbook time range."
        },
        "tabTimeRanges": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/Range"
          }
        },
        "relativeTimestampFormat": {
          "allOf": [
            {
              "$ref": "#/definitions/WorkbookRelativeTimestampFormat"
            }
          ],
          "description": "Relative timestamp display preference. Missing values inherit the user's preference."
        }
      },
      "required": [
        "timeRangeType",
        "isGlobalTime"
      ]
    }
  },
  "tags": [
    {
      "name": "TemplateService",
      "x-displayName": "Template service",
      "description": "TemplateService manages templates, which are workbooks that can be re-used across runs. Templates are versioned.",
      "x-errors": [
        {
          "status": 404,
          "errorCode": "NOT_FOUND",
          "errorName": "Scout:ChartsNotFound"
        },
        {
          "status": 400,
          "errorCode": "INVALID_ARGUMENT",
          "errorName": "Scout:CommitToArchivedTemplate"
        },
        {
          "status": 400,
          "errorCode": "INVALID_ARGUMENT",
          "errorName": "Scout:SearchTemplatesLimitExceeded"
        },
        {
          "status": 404,
          "errorCode": "NOT_FOUND",
          "errorName": "Scout:TemplatesNotFound"
        },
        {
          "status": 400,
          "errorCode": "INVALID_ARGUMENT",
          "errorName": "Scout:TooManyTemplatesRequested"
        },
        {
          "status": 409,
          "errorCode": "CONFLICT",
          "errorName": "Scout:CannotReadTemplateRefNames"
        }
      ]
    }
  ]
}
