{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://hajimism.github.io/dek/cli.schema.json",
  "title": "dekc --json",
  "description": "What each dek command prints with --json, one JSON object per line. $defs holds one schema per command, and `failure` for a command line that could not run. While dek is 0.x the shape may change between releases.",
  "$defs": {
    "init": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "root": {
              "type": "string"
            },
            "created": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "updated": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "dek's own files, already there, brought up to date."
            },
            "kept": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "Files already there that differ from what init would write."
            },
            "next": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "The commands to run next."
            },
            "playwright": {
              "description": "How to install Playwright, when it is missing.",
              "type": "string"
            },
            "missingTokens": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "ok": {
              "type": "boolean",
              "const": true
            }
          },
          "required": [
            "root",
            "created",
            "updated",
            "kept",
            "next",
            "ok"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "ok": {
              "type": "boolean",
              "const": false
            },
            "error": {
              "$ref": "#/$defs/Error"
            }
          },
          "required": [
            "ok",
            "error"
          ],
          "additionalProperties": false
        }
      ]
    },
    "new": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "dir": {
              "type": "string"
            },
            "created": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "updated": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "next": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "ok": {
              "type": "boolean",
              "const": true
            }
          },
          "required": [
            "name",
            "dir",
            "created",
            "updated",
            "next",
            "ok"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "ok": {
              "type": "boolean",
              "const": false
            },
            "error": {
              "$ref": "#/$defs/Error"
            }
          },
          "required": [
            "ok",
            "error"
          ],
          "additionalProperties": false
        }
      ]
    },
    "ls": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "root": {
              "type": "string"
            },
            "diagnostics": {
              "type": "array",
              "items": {
                "$ref": "#/$defs/Diagnostic"
              },
              "description": "The project's own findings, once."
            },
            "decks": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "title": {
                    "type": "string"
                  },
                  "sections": {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "slides": {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "diagnostics": {
                    "type": "array",
                    "items": {
                      "$ref": "#/$defs/Diagnostic"
                    }
                  }
                },
                "required": [
                  "name",
                  "title",
                  "sections",
                  "slides",
                  "diagnostics"
                ],
                "additionalProperties": false
              }
            },
            "failed": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string"
                  }
                },
                "required": [
                  "name"
                ],
                "additionalProperties": false
              }
            },
            "ok": {
              "type": "boolean",
              "const": true
            }
          },
          "required": [
            "root",
            "diagnostics",
            "decks",
            "failed",
            "ok"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "title": {
              "type": "string"
            },
            "event": {
              "type": "string"
            },
            "date": {
              "type": "string"
            },
            "duration": {
              "type": "string"
            },
            "estimateSeconds": {
              "type": "number"
            },
            "videoSeconds": {
              "type": "number"
            },
            "sections": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "slug": {
                    "type": "string"
                  },
                  "title": {
                    "type": "string"
                  },
                  "beats": {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "estimateSeconds": {
                    "type": "number"
                  },
                  "budgetSeconds": {
                    "type": "number"
                  },
                  "videoSeconds": {
                    "type": "number"
                  }
                },
                "required": [
                  "slug",
                  "title",
                  "beats",
                  "estimateSeconds"
                ],
                "additionalProperties": false
              }
            },
            "diagnostics": {
              "type": "array",
              "items": {
                "$ref": "#/$defs/Diagnostic"
              }
            },
            "skipped": {
              "description": "Absent when every check ran.",
              "type": "array",
              "items": {
                "$ref": "#/$defs/SkippedCheck"
              }
            },
            "ref": {
              "$ref": "#/$defs/RefInfo"
            },
            "ok": {
              "type": "boolean",
              "const": true
            }
          },
          "required": [
            "name",
            "title",
            "estimateSeconds",
            "sections",
            "diagnostics",
            "ok"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "ok": {
              "type": "boolean",
              "const": false
            },
            "error": {
              "$ref": "#/$defs/Error"
            }
          },
          "required": [
            "ok",
            "error"
          ],
          "additionalProperties": false
        }
      ]
    },
    "ref": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "action": {
              "type": "string",
              "const": "add"
            },
            "name": {
              "type": "string"
            },
            "rev": {
              "type": "string"
            },
            "from": {
              "description": "The rev it was pinned to before, when this moved it.",
              "type": "string"
            },
            "changed": {
              "type": "boolean"
            },
            "dir": {
              "type": "string"
            },
            "license": {
              "type": [
                "string",
                "null"
              ]
            },
            "warnings": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "ok": {
              "type": "boolean",
              "const": true
            }
          },
          "required": [
            "action",
            "name",
            "rev",
            "changed",
            "dir",
            "license",
            "warnings",
            "ok"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "action": {
              "type": "string",
              "const": "list"
            },
            "refs": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "rev": {
                    "type": "string"
                  },
                  "fetched": {
                    "type": "boolean"
                  },
                  "title": {
                    "type": "string"
                  },
                  "slides": {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  }
                },
                "required": [
                  "name",
                  "rev",
                  "fetched"
                ],
                "additionalProperties": false
              }
            },
            "ok": {
              "type": "boolean",
              "const": true
            }
          },
          "required": [
            "action",
            "refs",
            "ok"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "action": {
              "type": "string",
              "const": "rm"
            },
            "name": {
              "type": "string"
            },
            "ok": {
              "type": "boolean",
              "const": true
            }
          },
          "required": [
            "action",
            "name",
            "ok"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "ok": {
              "type": "boolean",
              "const": false
            },
            "error": {
              "$ref": "#/$defs/Error"
            }
          },
          "required": [
            "ok",
            "error"
          ],
          "additionalProperties": false
        }
      ]
    },
    "show": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "slug": {
              "type": "string"
            },
            "title": {
              "type": "string"
            },
            "script": {
              "type": "string",
              "description": "The section as script.md has it, beat headings and their ids included."
            },
            "beats": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string"
                  },
                  "title": {
                    "type": "string"
                  },
                  "line": {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  }
                },
                "required": [
                  "title",
                  "line"
                ],
                "additionalProperties": false
              },
              "description": "The section's beats in order: what a data-step names, by id or by position."
            },
            "html": {
              "type": [
                "string",
                "null"
              ]
            },
            "css": {
              "type": [
                "string",
                "null"
              ]
            },
            "ts": {
              "type": [
                "string",
                "null"
              ]
            },
            "theme": {
              "description": "The rules of the deck's theme.css this slide uses: those its classes, layout, elements, and attributes match; with a slide script, every element and attribute rule under .slide.",
              "type": [
                "string",
                "null"
              ]
            },
            "assets": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "ref": {
              "$ref": "#/$defs/RefInfo"
            },
            "ok": {
              "type": "boolean",
              "const": true
            }
          },
          "required": [
            "slug",
            "title",
            "script",
            "beats",
            "html",
            "css",
            "ts",
            "theme",
            "assets",
            "ok"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "ok": {
              "type": "boolean",
              "const": false
            },
            "error": {
              "$ref": "#/$defs/Error"
            }
          },
          "required": [
            "ok",
            "error"
          ],
          "additionalProperties": false
        }
      ]
    },
    "theme": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "path": {
              "type": "string"
            },
            "classes": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "The classes slide markup may use; what max_classes counts."
            },
            "stateClasses": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "State classes the theme selects that the player sets at runtime (is-current, is-shown); never written in markup."
            },
            "tokens": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "value": {
                    "type": "string"
                  }
                },
                "required": [
                  "name",
                  "value"
                ],
                "additionalProperties": false
              }
            },
            "layouts": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "example": {
                    "type": "string"
                  }
                },
                "required": [
                  "name"
                ],
                "additionalProperties": false
              }
            },
            "layout": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string"
                },
                "example": {
                  "type": "string"
                }
              },
              "required": [
                "name",
                "example"
              ],
              "additionalProperties": false
            },
            "ref": {
              "$ref": "#/$defs/RefInfo"
            },
            "ok": {
              "type": "boolean",
              "const": true
            }
          },
          "required": [
            "path",
            "classes",
            "stateClasses",
            "tokens",
            "layouts",
            "ok"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "ok": {
              "type": "boolean",
              "const": false
            },
            "error": {
              "$ref": "#/$defs/Error"
            }
          },
          "required": [
            "ok",
            "error"
          ],
          "additionalProperties": false
        }
      ]
    },
    "check": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "slug": {
              "type": "string"
            },
            "diagnostics": {
              "type": "array",
              "items": {
                "$ref": "#/$defs/Diagnostic"
              }
            },
            "skipped": {
              "description": "Absent when every check ran.",
              "type": "array",
              "items": {
                "$ref": "#/$defs/SkippedCheck"
              }
            },
            "shot": {
              "type": "string"
            },
            "fill": {
              "description": "How much of the frame the slide fills: each text's lines, each picture's box, and each painted box that holds nothing, as a chart's bar; a card counts by what it holds; decoration under aria-hidden counts too, ::before and ::after text does not. Judge a slide by rows, columns, and box, not coverage alone. Shares from 0 to 1. Absent when the slide was not measured.",
              "type": "object",
              "properties": {
                "step": {
                  "type": "string",
                  "description": "The beat measured: the last, as the slide's shot shows it."
                },
                "coverage": {
                  "type": "number",
                  "description": "The share of the frame the content covers."
                },
                "box": {
                  "description": "The smallest box holding it, as shares of the frame. Absent when there is none.",
                  "type": "object",
                  "properties": {
                    "left": {
                      "type": "number"
                    },
                    "top": {
                      "type": "number"
                    },
                    "right": {
                      "type": "number"
                    },
                    "bottom": {
                      "type": "number"
                    }
                  },
                  "required": [
                    "left",
                    "top",
                    "right",
                    "bottom"
                  ],
                  "additionalProperties": false
                },
                "rows": {
                  "type": "array",
                  "items": {
                    "type": "number"
                  },
                  "description": "The share of each tenth of the frame, top to bottom."
                },
                "columns": {
                  "type": "array",
                  "items": {
                    "type": "number"
                  },
                  "description": "The same, left to right."
                }
              },
              "required": [
                "step",
                "coverage",
                "rows",
                "columns"
              ],
              "additionalProperties": false
            },
            "voice": {
              "type": "object",
              "properties": {
                "beats": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "beatIndex": {
                        "type": "integer",
                        "minimum": -9007199254740991,
                        "maximum": 9007199254740991
                      },
                      "durationMs": {
                        "type": "number"
                      },
                      "empty": {
                        "type": "boolean"
                      },
                      "sentences": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "text": {
                              "type": "string"
                            },
                            "kana": {
                              "type": "string"
                            },
                            "start": {
                              "type": "number"
                            },
                            "end": {
                              "type": "number"
                            }
                          },
                          "required": [
                            "text",
                            "kana",
                            "start",
                            "end"
                          ],
                          "additionalProperties": false
                        }
                      }
                    },
                    "required": [
                      "beatIndex",
                      "durationMs",
                      "empty",
                      "sentences"
                    ],
                    "additionalProperties": false
                  }
                }
              },
              "required": [
                "beats"
              ],
              "additionalProperties": false
            },
            "ok": {
              "type": "boolean",
              "const": true
            }
          },
          "required": [
            "slug",
            "diagnostics",
            "ok"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "slug": {
              "type": "string"
            },
            "diagnostics": {
              "type": "array",
              "items": {
                "$ref": "#/$defs/Diagnostic"
              }
            },
            "skipped": {
              "description": "Absent when every check ran.",
              "type": "array",
              "items": {
                "$ref": "#/$defs/SkippedCheck"
              }
            },
            "shot": {
              "type": "string"
            },
            "fill": {
              "description": "How much of the frame the slide fills: each text's lines, each picture's box, and each painted box that holds nothing, as a chart's bar; a card counts by what it holds; decoration under aria-hidden counts too, ::before and ::after text does not. Judge a slide by rows, columns, and box, not coverage alone. Shares from 0 to 1. Absent when the slide was not measured.",
              "type": "object",
              "properties": {
                "step": {
                  "type": "string",
                  "description": "The beat measured: the last, as the slide's shot shows it."
                },
                "coverage": {
                  "type": "number",
                  "description": "The share of the frame the content covers."
                },
                "box": {
                  "description": "The smallest box holding it, as shares of the frame. Absent when there is none.",
                  "type": "object",
                  "properties": {
                    "left": {
                      "type": "number"
                    },
                    "top": {
                      "type": "number"
                    },
                    "right": {
                      "type": "number"
                    },
                    "bottom": {
                      "type": "number"
                    }
                  },
                  "required": [
                    "left",
                    "top",
                    "right",
                    "bottom"
                  ],
                  "additionalProperties": false
                },
                "rows": {
                  "type": "array",
                  "items": {
                    "type": "number"
                  },
                  "description": "The share of each tenth of the frame, top to bottom."
                },
                "columns": {
                  "type": "array",
                  "items": {
                    "type": "number"
                  },
                  "description": "The same, left to right."
                }
              },
              "required": [
                "step",
                "coverage",
                "rows",
                "columns"
              ],
              "additionalProperties": false
            },
            "voice": {
              "type": "object",
              "properties": {
                "beats": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "beatIndex": {
                        "type": "integer",
                        "minimum": -9007199254740991,
                        "maximum": 9007199254740991
                      },
                      "durationMs": {
                        "type": "number"
                      },
                      "empty": {
                        "type": "boolean"
                      },
                      "sentences": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "text": {
                              "type": "string"
                            },
                            "kana": {
                              "type": "string"
                            },
                            "start": {
                              "type": "number"
                            },
                            "end": {
                              "type": "number"
                            }
                          },
                          "required": [
                            "text",
                            "kana",
                            "start",
                            "end"
                          ],
                          "additionalProperties": false
                        }
                      }
                    },
                    "required": [
                      "beatIndex",
                      "durationMs",
                      "empty",
                      "sentences"
                    ],
                    "additionalProperties": false
                  }
                }
              },
              "required": [
                "beats"
              ],
              "additionalProperties": false
            },
            "ok": {
              "type": "boolean",
              "const": false
            },
            "error": {
              "$ref": "#/$defs/Error"
            }
          },
          "required": [
            "slug",
            "diagnostics",
            "ok",
            "error"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "ok": {
              "type": "boolean",
              "const": false
            },
            "error": {
              "$ref": "#/$defs/Error"
            }
          },
          "required": [
            "ok",
            "error"
          ],
          "additionalProperties": false
        }
      ]
    },
    "shot": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "shots": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "slug": {
                    "type": "string"
                  },
                  "step": {
                    "type": "string"
                  },
                  "path": {
                    "type": "string"
                  },
                  "to": {
                    "description": "A morph frame: the slide the transition goes to.",
                    "type": "string"
                  },
                  "at": {
                    "description": "A morph frame: where in the transition, 0..1.",
                    "type": "number"
                  }
                },
                "required": [
                  "slug",
                  "step",
                  "path"
                ],
                "additionalProperties": false
              },
              "description": "Each still or morph frame; with --motion, empty: the frames are in motion."
            },
            "sheets": {
              "description": "Contact sheets, from --sheet or --motion.",
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "motion": {
              "description": "With --motion, each beat in order with its frames, the settled end last.",
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "step": {
                    "type": "string"
                  },
                  "frames": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "ms": {
                          "type": "number"
                        },
                        "path": {
                          "type": "string"
                        },
                        "end": {
                          "type": "boolean",
                          "const": true
                        }
                      },
                      "required": [
                        "ms",
                        "path"
                      ],
                      "additionalProperties": false
                    }
                  }
                },
                "required": [
                  "step",
                  "frames"
                ],
                "additionalProperties": false
              }
            },
            "ok": {
              "type": "boolean",
              "const": true
            }
          },
          "required": [
            "shots",
            "ok"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "ok": {
              "type": "boolean",
              "const": false
            },
            "error": {
              "$ref": "#/$defs/Error"
            }
          },
          "required": [
            "ok",
            "error"
          ],
          "additionalProperties": false
        }
      ]
    },
    "mv": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "from": {
              "type": "string"
            },
            "to": {
              "type": "string"
            },
            "before": {
              "type": "string"
            },
            "after": {
              "type": "string"
            },
            "ok": {
              "type": "boolean",
              "const": true
            }
          },
          "required": [
            "from",
            "ok"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "ok": {
              "type": "boolean",
              "const": false
            },
            "error": {
              "$ref": "#/$defs/Error"
            }
          },
          "required": [
            "ok",
            "error"
          ],
          "additionalProperties": false
        }
      ]
    },
    "goto": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "slug": {
              "type": "string"
            },
            "slideIndex": {
              "type": "integer",
              "minimum": -9007199254740991,
              "maximum": 9007199254740991
            },
            "beatIndex": {
              "type": "integer",
              "minimum": -9007199254740991,
              "maximum": 9007199254740991
            },
            "viewers": {
              "type": "integer",
              "minimum": -9007199254740991,
              "maximum": 9007199254740991,
              "description": "The pages that show the deck; with none, where the next one opened lands."
            },
            "ok": {
              "type": "boolean",
              "const": true
            }
          },
          "required": [
            "slug",
            "slideIndex",
            "beatIndex",
            "viewers",
            "ok"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "ok": {
              "type": "boolean",
              "const": false
            },
            "error": {
              "$ref": "#/$defs/Error"
            }
          },
          "required": [
            "ok",
            "error"
          ],
          "additionalProperties": false
        }
      ]
    },
    "current": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "slug": {
              "type": "string"
            },
            "slideIndex": {
              "type": "integer",
              "minimum": -9007199254740991,
              "maximum": 9007199254740991
            },
            "beatIndex": {
              "type": "integer",
              "minimum": -9007199254740991,
              "maximum": 9007199254740991
            },
            "viewers": {
              "type": "integer",
              "minimum": -9007199254740991,
              "maximum": 9007199254740991,
              "description": "The pages that show the deck; with none, where the next one opened lands."
            },
            "ok": {
              "type": "boolean",
              "const": true
            }
          },
          "required": [
            "slug",
            "slideIndex",
            "beatIndex",
            "viewers",
            "ok"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "ok": {
              "type": "boolean",
              "const": false
            },
            "error": {
              "$ref": "#/$defs/Error"
            }
          },
          "required": [
            "ok",
            "error"
          ],
          "additionalProperties": false
        }
      ]
    },
    "marks": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "action": {
              "type": "string",
              "const": "list"
            },
            "marks": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "slug": {
                    "type": "string"
                  },
                  "beat": {
                    "description": "The beat's title; null for what the slide says before its first ###.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "beatIndex": {
                    "anyOf": [
                      {
                        "type": "integer",
                        "minimum": -9007199254740991,
                        "maximum": 9007199254740991
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Null once the beat is gone."
                  },
                  "line": {
                    "anyOf": [
                      {
                        "type": "integer",
                        "minimum": -9007199254740991,
                        "maximum": 9007199254740991
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "The heading's line in script.md."
                  },
                  "path": {
                    "type": "string"
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "open",
                      "edited",
                      "gone"
                    ],
                    "description": "edited once the words differ from what was marked; gone with the beat."
                  },
                  "was": {
                    "type": "string",
                    "description": "The beat's words when it was marked."
                  },
                  "text": {
                    "description": "The beat's words now.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "markedAt": {
                    "type": "string"
                  }
                },
                "required": [
                  "slug",
                  "beat",
                  "beatIndex",
                  "line",
                  "path",
                  "status",
                  "was",
                  "text",
                  "markedAt"
                ],
                "additionalProperties": false
              }
            },
            "ok": {
              "type": "boolean",
              "const": true
            }
          },
          "required": [
            "action",
            "marks",
            "ok"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "action": {
              "type": "string",
              "const": "clear"
            },
            "cleared": {
              "type": "integer",
              "minimum": -9007199254740991,
              "maximum": 9007199254740991
            },
            "ok": {
              "type": "boolean",
              "const": true
            }
          },
          "required": [
            "action",
            "cleared",
            "ok"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "ok": {
              "type": "boolean",
              "const": false
            },
            "error": {
              "$ref": "#/$defs/Error"
            }
          },
          "required": [
            "ok",
            "error"
          ],
          "additionalProperties": false
        }
      ]
    },
    "annotations": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "action": {
              "type": "string",
              "const": "list"
            },
            "annotations": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "number": {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991,
                    "description": "As the dev page's markers and Copy number it."
                  },
                  "id": {
                    "type": "string"
                  },
                  "slug": {
                    "type": "string"
                  },
                  "step": {
                    "type": "string",
                    "description": "The stop as `dekc shot --step` takes it; 0 as the slide arrives."
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "open",
                      "edited",
                      "gone"
                    ],
                    "description": "edited once the slide's own html, css, or ts changed since the note; gone once none of its elements is on the slide."
                  },
                  "text": {
                    "type": "string",
                    "description": "What the human wrote."
                  },
                  "targets": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "path": {
                          "type": "string"
                        },
                        "line": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991,
                          "description": "Where the start tag is now; where it was last found when not found."
                        },
                        "column": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991,
                          "description": "1-based, in UTF-16 units as editors count."
                        },
                        "found": {
                          "type": "boolean"
                        },
                        "name": {
                          "type": "string",
                          "description": "The tag and its classes as written where it was last found, as div.chevron."
                        },
                        "was": {
                          "type": "string",
                          "description": "Its text as written when the note was written, cut short."
                        },
                        "text": {
                          "description": "Its text as written now; null when not found.",
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "box": {
                          "type": "object",
                          "properties": {
                            "x": {
                              "type": "number"
                            },
                            "y": {
                              "type": "number"
                            },
                            "width": {
                              "type": "number"
                            },
                            "height": {
                              "type": "number"
                            }
                          },
                          "required": [
                            "x",
                            "y",
                            "width",
                            "height"
                          ],
                          "additionalProperties": false,
                          "description": "On the slide in logical pixels, when the note was written."
                        },
                        "point": {
                          "description": "Where the slide itself was clicked.",
                          "type": "object",
                          "properties": {
                            "x": {
                              "type": "number"
                            },
                            "y": {
                              "type": "number"
                            }
                          },
                          "required": [
                            "x",
                            "y"
                          ],
                          "additionalProperties": false
                        }
                      },
                      "required": [
                        "path",
                        "line",
                        "column",
                        "found",
                        "name",
                        "was",
                        "text",
                        "box"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "changed": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "The slide's own files that changed since the note."
                  },
                  "shot": {
                    "type": "string",
                    "description": "The command that shows the slide at the note's beat."
                  },
                  "createdAt": {
                    "type": "string"
                  }
                },
                "required": [
                  "number",
                  "id",
                  "slug",
                  "step",
                  "status",
                  "text",
                  "targets",
                  "changed",
                  "shot",
                  "createdAt"
                ],
                "additionalProperties": false
              }
            },
            "ok": {
              "type": "boolean",
              "const": true
            }
          },
          "required": [
            "action",
            "annotations",
            "ok"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "action": {
              "type": "string",
              "const": "clear"
            },
            "cleared": {
              "type": "integer",
              "minimum": -9007199254740991,
              "maximum": 9007199254740991
            },
            "ok": {
              "type": "boolean",
              "const": true
            }
          },
          "required": [
            "action",
            "cleared",
            "ok"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "ok": {
              "type": "boolean",
              "const": false
            },
            "error": {
              "$ref": "#/$defs/Error"
            }
          },
          "required": [
            "ok",
            "error"
          ],
          "additionalProperties": false
        }
      ]
    },
    "sync": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "created": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "updated": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "removed": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "kept": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "ok": {
              "type": "boolean",
              "const": true
            }
          },
          "required": [
            "created",
            "updated",
            "removed",
            "kept",
            "ok"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "ok": {
              "type": "boolean",
              "const": false
            },
            "error": {
              "$ref": "#/$defs/Error"
            }
          },
          "required": [
            "ok",
            "error"
          ],
          "additionalProperties": false
        }
      ]
    },
    "lint": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "diagnostics": {
              "type": "array",
              "items": {
                "$ref": "#/$defs/Diagnostic"
              }
            },
            "skipped": {
              "description": "Absent when every check ran.",
              "type": "array",
              "items": {
                "$ref": "#/$defs/SkippedCheck"
              }
            },
            "ok": {
              "type": "boolean",
              "const": true
            }
          },
          "required": [
            "diagnostics",
            "ok"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "diagnostics": {
              "type": "array",
              "items": {
                "$ref": "#/$defs/Diagnostic"
              }
            },
            "skipped": {
              "description": "Absent when every check ran.",
              "type": "array",
              "items": {
                "$ref": "#/$defs/SkippedCheck"
              }
            },
            "ok": {
              "type": "boolean",
              "const": false
            },
            "error": {
              "$ref": "#/$defs/Error"
            }
          },
          "required": [
            "diagnostics",
            "ok",
            "error"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "ok": {
              "type": "boolean",
              "const": false
            },
            "error": {
              "$ref": "#/$defs/Error"
            }
          },
          "required": [
            "ok",
            "error"
          ],
          "additionalProperties": false
        }
      ]
    },
    "cues": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "cues": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "position": {
                    "$ref": "#/$defs/Position"
                  },
                  "slug": {
                    "type": "string"
                  },
                  "line": {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "paragraphs": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "required": [
                  "position",
                  "slug",
                  "line",
                  "paragraphs"
                ],
                "additionalProperties": false
              }
            },
            "diagnostics": {
              "type": "array",
              "items": {
                "$ref": "#/$defs/Diagnostic"
              }
            },
            "ok": {
              "type": "boolean",
              "const": true
            }
          },
          "required": [
            "name",
            "cues",
            "diagnostics",
            "ok"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "ok": {
              "type": "boolean",
              "const": false
            },
            "error": {
              "$ref": "#/$defs/Error"
            }
          },
          "required": [
            "ok",
            "error"
          ],
          "additionalProperties": false
        }
      ]
    },
    "voice": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "action": {
              "type": "string",
              "const": "synth"
            },
            "synthesized": {
              "type": "integer",
              "minimum": -9007199254740991,
              "maximum": 9007199254740991
            },
            "cached": {
              "type": "integer",
              "minimum": -9007199254740991,
              "maximum": 9007199254740991
            },
            "timelinePath": {
              "type": "string"
            },
            "audioPath": {
              "type": "string"
            },
            "ok": {
              "type": "boolean",
              "const": true
            }
          },
          "required": [
            "action",
            "synthesized",
            "cached",
            "timelinePath",
            "audioPath",
            "ok"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "action": {
              "type": "string",
              "const": "speakers"
            },
            "speakers": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "styles": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "required": [
                  "name",
                  "styles"
                ],
                "additionalProperties": false
              }
            },
            "ok": {
              "type": "boolean",
              "const": true
            }
          },
          "required": [
            "action",
            "speakers",
            "ok"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "action": {
              "type": "string",
              "const": "say"
            },
            "text": {
              "type": "string"
            },
            "path": {
              "type": "string"
            },
            "ok": {
              "type": "boolean",
              "const": true
            }
          },
          "required": [
            "action",
            "text",
            "path",
            "ok"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "action": {
              "type": "string",
              "const": "dict"
            },
            "path": {
              "type": "string"
            },
            "key": {
              "type": "string"
            },
            "kana": {
              "type": "string"
            },
            "ok": {
              "type": "boolean",
              "const": true
            }
          },
          "required": [
            "action",
            "path",
            "key",
            "kana",
            "ok"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "action": {
              "type": "string",
              "const": "pin"
            },
            "timelinePath": {
              "type": "string"
            },
            "audioPath": {
              "type": "string"
            },
            "ok": {
              "type": "boolean",
              "const": true
            }
          },
          "required": [
            "action",
            "timelinePath",
            "audioPath",
            "ok"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "ok": {
              "type": "boolean",
              "const": false
            },
            "error": {
              "$ref": "#/$defs/Error"
            }
          },
          "required": [
            "ok",
            "error"
          ],
          "additionalProperties": false
        }
      ]
    },
    "build": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "outs": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "One file per deck built."
            },
            "images": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "dist/<deck>.png for each deck that got a link preview image."
            },
            "diagnostics": {
              "type": "array",
              "items": {
                "$ref": "#/$defs/Diagnostic"
              }
            },
            "skipped": {
              "description": "Absent when every check ran.",
              "type": "array",
              "items": {
                "$ref": "#/$defs/SkippedCheck"
              }
            },
            "ok": {
              "type": "boolean",
              "const": true
            }
          },
          "required": [
            "outs",
            "images",
            "diagnostics",
            "ok"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "ok": {
              "type": "boolean",
              "const": false
            },
            "error": {
              "$ref": "#/$defs/Error"
            }
          },
          "required": [
            "ok",
            "error"
          ],
          "additionalProperties": false
        }
      ]
    },
    "video": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "out": {
              "type": "string"
            },
            "vtt": {
              "type": "string"
            },
            "chapters": {
              "type": "string"
            },
            "credits": {
              "type": "string"
            },
            "ok": {
              "type": "boolean",
              "const": true
            }
          },
          "required": [
            "out",
            "ok"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "ok": {
              "type": "boolean",
              "const": false
            },
            "error": {
              "$ref": "#/$defs/Error"
            }
          },
          "required": [
            "ok",
            "error"
          ],
          "additionalProperties": false
        }
      ]
    },
    "pdf": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "outs": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "ok": {
              "type": "boolean",
              "const": true
            }
          },
          "required": [
            "outs",
            "ok"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "ok": {
              "type": "boolean",
              "const": false
            },
            "error": {
              "$ref": "#/$defs/Error"
            }
          },
          "required": [
            "ok",
            "error"
          ],
          "additionalProperties": false
        }
      ]
    },
    "pptx": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "outs": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "ok": {
              "type": "boolean",
              "const": true
            }
          },
          "required": [
            "outs",
            "ok"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "ok": {
              "type": "boolean",
              "const": false
            },
            "error": {
              "$ref": "#/$defs/Error"
            }
          },
          "required": [
            "ok",
            "error"
          ],
          "additionalProperties": false
        }
      ]
    },
    "help": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "ok": {
              "type": "boolean",
              "const": true
            },
            "help": {
              "type": "string"
            }
          },
          "required": [
            "ok",
            "help"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "ok": {
              "type": "boolean",
              "const": false
            },
            "error": {
              "$ref": "#/$defs/Error"
            }
          },
          "required": [
            "ok",
            "error"
          ],
          "additionalProperties": false
        }
      ]
    },
    "version": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "ok": {
              "type": "boolean",
              "const": true
            },
            "version": {
              "type": "string"
            }
          },
          "required": [
            "ok",
            "version"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "ok": {
              "type": "boolean",
              "const": false
            },
            "error": {
              "$ref": "#/$defs/Error"
            }
          },
          "required": [
            "ok",
            "error"
          ],
          "additionalProperties": false
        }
      ]
    },
    "failure": {
      "type": "object",
      "properties": {
        "ok": {
          "type": "boolean",
          "const": false
        },
        "error": {
          "$ref": "#/$defs/Error"
        }
      },
      "required": [
        "ok",
        "error"
      ],
      "additionalProperties": false
    },
    "Error": {
      "type": "object",
      "properties": {
        "message": {
          "type": "string"
        },
        "path": {
          "type": "string"
        },
        "line": {
          "type": "integer",
          "minimum": -9007199254740991,
          "maximum": 9007199254740991
        },
        "hint": {
          "description": "The next step, whenever dek knows it.",
          "type": "string"
        }
      },
      "required": [
        "message"
      ],
      "additionalProperties": false
    },
    "Diagnostic": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "description": "DEKnnn for dek's own rules; another tool's id for its findings."
        },
        "severity": {
          "type": "string",
          "enum": [
            "error",
            "warning"
          ],
          "description": "Only an error fails lint and check."
        },
        "message": {
          "type": "string"
        },
        "path": {
          "type": "string"
        },
        "line": {
          "type": "integer",
          "minimum": -9007199254740991,
          "maximum": 9007199254740991
        },
        "column": {
          "description": "1-based, in UTF-16 units as editors count.",
          "type": "integer",
          "minimum": -9007199254740991,
          "maximum": 9007199254740991
        },
        "slug": {
          "description": "The slide the finding is about.",
          "type": "string"
        },
        "hint": {
          "description": "The fix, phrased as what to do next.",
          "type": "string"
        },
        "data": {
          "description": "The values the message names, as fields.",
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {
            "$ref": "#/$defs/DiagnosticValue"
          }
        }
      },
      "required": [
        "id",
        "severity",
        "message"
      ],
      "additionalProperties": false
    },
    "DiagnosticValue": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "number"
        },
        {
          "type": "boolean"
        },
        {
          "type": "array",
          "items": {
            "$ref": "#/$defs/DiagnosticValue"
          }
        },
        {
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {
            "$ref": "#/$defs/DiagnosticValue"
          }
        }
      ]
    },
    "SkippedCheck": {
      "type": "object",
      "properties": {
        "check": {
          "type": "string",
          "enum": [
            "lint",
            "preview",
            "rumdl",
            "visual",
            "voice"
          ]
        },
        "reason": {
          "type": "string"
        },
        "hint": {
          "description": "What to do so that the check runs.",
          "type": "string"
        }
      },
      "required": [
        "check",
        "reason"
      ],
      "additionalProperties": false,
      "description": "A check that did not run, so an empty list of findings is no pass for it."
    },
    "RefInfo": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "rev": {
          "type": "string"
        },
        "dir": {
          "type": "string",
          "description": "The snapshot directory."
        },
        "license": {
          "description": "The snapshot's license file.",
          "type": [
            "string",
            "null"
          ]
        }
      },
      "required": [
        "name",
        "rev",
        "dir",
        "license"
      ],
      "additionalProperties": false,
      "description": "Set when the deck read is a ref."
    },
    "Position": {
      "type": "object",
      "properties": {
        "slideIndex": {
          "type": "integer",
          "minimum": -9007199254740991,
          "maximum": 9007199254740991
        },
        "beatIndex": {
          "type": "integer",
          "minimum": -9007199254740991,
          "maximum": 9007199254740991
        }
      },
      "required": [
        "slideIndex",
        "beatIndex"
      ],
      "additionalProperties": false
    }
  }
}
