{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/blinkpdf-io/json-schema/blinkpdf-io-compose-validate-ok-schema.json",
  "title": "Compose.ValidateOk",
  "x-generated": "2026-10-30",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/blinkpdf-io-openapi.json#/components/schemas/Compose.ValidateOk",
  "type": "object",
  "required": [
    "results"
  ],
  "properties": {
    "results": {
      "description": "One row per request item, in request order. A single-item batch (`items` of length 1) still returns an array of one row.",
      "type": "array",
      "items": {
        "anyOf": [
          {
            "type": "object",
            "required": [
              "ok",
              "index",
              "composeWarnings",
              "composeWarningsOmitted",
              "resolvedPages",
              "layout",
              "impact",
              "diagnostics"
            ],
            "properties": {
              "ok": {
                "description": "This item passed TypeBox validation and semantic checks.",
                "const": true,
                "type": "boolean"
              },
              "index": {
                "description": "Zero-based position of this item in the request `items` array.",
                "type": "number"
              },
              "clientItemId": {
                "description": "Echoed back when the request item supplied one.",
                "type": "string"
              },
              "contentDigest": {
                "description": "Canonical per-account compose digest when the caller is authenticated and the body has no `security` (an encrypted PDF is never cached or digested); returned again as the x-blinkpdf-content-digest response header on a later compose. For compositions referencing `blink://asset/<id>` handles, or that set `pinRemoteImages`, the digest additionally varies by the calling credential. It is a digest of the request/config, NOT a hash of the output PDF bytes.",
                "type": "string"
              },
              "typography": {
                "type": "object",
                "required": [
                  "declared",
                  "active",
                  "assignments",
                  "unused"
                ],
                "properties": {
                  "declared": {
                    "$ref": "#/$defs/Problem.validation_failed.errors.item.allowedKeys"
                  },
                  "active": {
                    "description": "The body/heading families this request configures (its intent).",
                    "type": "object",
                    "required": [
                      "body",
                      "heading"
                    ],
                    "properties": {
                      "body": {
                        "description": "The configured body family (request intent).",
                        "type": "string"
                      },
                      "heading": {
                        "description": "The configured heading family (request intent).",
                        "type": "string"
                      }
                    }
                  },
                  "assignments": {
                    "$ref": "#/$defs/Render.ValidateOk.results.item.anyOf0.typography.assignments"
                  },
                  "unused": {
                    "$ref": "#/$defs/Problem.validation_failed.errors.item.allowedKeys"
                  }
                }
              },
              "typographyNotes": {
                "$ref": "#/$defs/Render.ValidateOk.results.item.anyOf0.typographyNotes"
              },
              "composeWarnings": {
                "description": "Fail-open compose advisories about what paints as authored, in document order: for each section, a page-size override and a blank page, then its ops (a full-circle rotation when that op is visited, then empty text of an op or a text-row slot, including text inside a clip or rotation), then its flow (an empty text-row slot, table cell, or list item). An empty attribution paints its dash and is not an advisory. At most 10 of each code are listed; `composeWarningsOmitted` counts the rest. A field compose cannot paint as authored is never one of these: it is refused with a 400 or reported in `diagnostics` with an `impact` other than `none`. Always present on a successful validate; never invalidates the request.",
                "type": "array",
                "items": {
                  "type": "object",
                  "required": [
                    "sectionIndex",
                    "code",
                    "hint"
                  ],
                  "properties": {
                    "sectionIndex": {
                      "description": "Index of the section in the request `sections` array.",
                      "type": "number"
                    },
                    "code": {
                      "description": "Fail-open compose advisory kind; each paints as authored.",
                      "type": "string",
                      "enum": [
                        "empty-page",
                        "rotation-full-circle",
                        "empty-content-omitted",
                        "page-size-mismatch"
                      ]
                    },
                    "hint": {
                      "description": "Actionable fix for the author.",
                      "type": "string"
                    },
                    "opIndex": {
                      "description": "Index of the root op in the section when the warning targets that op or a slot under it.",
                      "type": "number"
                    },
                    "flowIndex": {
                      "description": "Index of the root flow node in the section when the warning targets that node or a slot under it.",
                      "type": "number"
                    }
                  }
                }
              },
              "composeWarningsOmitted": {
                "minimum": 0,
                "description": "Present with `composeWarnings`: how many advisories lie past the first 10 of their code, counted exactly; `0` when it lists them all.",
                "type": "integer"
              },
              "resolvedPages": {
                "description": "Per-section authored geometry after document⊗section merge and theme, so an agent can see A4 vs Letter before spending quota.",
                "type": "array",
                "items": {
                  "type": "object",
                  "required": [
                    "sectionIndex",
                    "size",
                    "orientation",
                    "dimensions"
                  ],
                  "properties": {
                    "sectionIndex": {
                      "description": "Zero-based index into the request `sections` array (authored section geometry, not painted PDF page index).",
                      "type": "number"
                    },
                    "size": {
                      "description": "Merged named size or custom [width, height] tuple.",
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "array",
                          "items": {
                            "type": "number"
                          }
                        }
                      ]
                    },
                    "orientation": {
                      "description": "Merged orientation after document⊗page inheritance.",
                      "type": "string",
                      "enum": [
                        "portrait",
                        "landscape"
                      ]
                    },
                    "dimensions": {
                      "type": "object",
                      "required": [
                        "width",
                        "height"
                      ],
                      "properties": {
                        "width": {
                          "description": "MediaBox width in PDF points.",
                          "type": "number"
                        },
                        "height": {
                          "description": "MediaBox height in PDF points.",
                          "type": "number"
                        }
                      }
                    },
                    "background": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "required": [
                        "color"
                      ],
                      "properties": {
                        "color": {
                          "description": "Sheet fill as `#RGB`/`#RRGGBB`.",
                          "type": "string"
                        },
                        "opacity": {
                          "description": "Sheet fill opacity from 0 to 1.",
                          "type": "number"
                        }
                      }
                    }
                  }
                }
              },
              "layout": {
                "$ref": "#/$defs/Layout.Report"
              },
              "impact": {
                "description": "The grade of the whole PDF: the worst `impact` among the `diagnostics` and `typographyNotes` entries; the value `POST /v1/compose` writes as `X-Render-Impact` for the same body, from the same grade, so a dry run tells lost content from a look change without a table of codes, every occurrence counted, listed or not (`content` over `appearance` over `none`). `none` is a PDF made as requested; `appearance` one that holds everything asked, readable, with a look or navigation that differs; `content` one that misses part of what was asked.",
                "type": "string",
                "enum": [
                  "none",
                  "appearance",
                  "content"
                ]
              },
              "diagnostics": {
                "description": "The list `POST /v1/compose` writes to `X-Render-Diagnostics` for this body, computed render-free by the same builder: same entries, same shape, same order (severity first, errors before warns before infos, then document position). Covers every class — image sourcing/decode, element layout warnings addressed by node pointer in `resource` (a canvas `text` op whose wrapped lines paint over another op of its canvas is `canvas-text-wrap-overlap` at the pointer of that op; header or footer furniture that paints over a canvas op is `furniture-canvas-overlap` at the pointer of that slot or rule), a header or footer slot or rule whose color you did not set that lies on an image decoration, whose color BlinkPDF cannot read, is `ink-unverified` at the pointer of that slot or rule, a text whose color you set (a canvas `text` or `textRow` op or one of its spans, a flow text, text row, list item span, or `math` node, a flow table cell or one of its spans, a chip label, or a header or footer slot) whose color has, at full opacity, less than 3:1 contrast against the solid color painted behind it (the sheet, the page background, a quote background, the fills under a canvas op, a table cell's `background` or the header or stripe band it sits on, or its chip) is `text-low-contrast` at the pointer of that op, node, or slot (impact `content`; text over an image, a gradient, or a fill it only partly lies on is not judged), text in a script BlinkPDF does not shape yet (`script-not-shaped` at the pointer of each node that holds it), and document-level notes such as `title-omitted` or `glyph-component-dropped`. At most 10 occurrences of each code and severity are listed; the rest of that code and severity are counted by one entry carrying `omitted` (the count) right after its last listed occurrence, and still count toward `X-Render-Status` and `X-Render-Impact`, so the list grows with the codes a document reports, not with its size. Not capped by the header budget: when render cannot fit the list in `X-Render-Diagnostics` (`X-Render-Diagnostics-Truncated`), that bounded header may leave codes out (`X-Render-Diagnostics-Summary` names them all), while this array still lists every entry. Always present on a successful validate; an empty array means render reports no diagnostics.",
                "type": "array",
                "items": {
                  "$ref": "#/$defs/Render.Diagnostic"
                }
              }
            }
          },
          {
            "anyOf": [
              {
                "$ref": "#/$defs/Row.validation_failed.compose"
              },
              {
                "$ref": "#/$defs/Row.content_not_paginable"
              },
              {
                "$ref": "#/$defs/Row.image_too_large"
              },
              {
                "$ref": "#/$defs/Row.invalid_google_fonts_url"
              },
              {
                "$ref": "#/$defs/Row.google_font_not_found"
              },
              {
                "$ref": "#/$defs/Row.google_font_weight_unavailable"
              },
              {
                "$ref": "#/$defs/Row.asset_kind_mismatch"
              },
              {
                "$ref": "#/$defs/Row.font_embedding_prohibited"
              },
              {
                "$ref": "#/$defs/Row.font_malformed"
              },
              {
                "$ref": "#/$defs/Row.font_source_unavailable"
              },
              {
                "$ref": "#/$defs/Row.memory_budget_exceeded"
              },
              {
                "$ref": "#/$defs/Row.server_busy"
              },
              {
                "$ref": "#/$defs/Row.memory_share_exceeded"
              },
              {
                "$ref": "#/$defs/Row.text_row_overflow"
              },
              {
                "$ref": "#/$defs/Row.column_widths_overflow"
              },
              {
                "$ref": "#/$defs/Row.table_occupancy"
              },
              {
                "$ref": "#/$defs/Row.qr_not_scannable"
              },
              {
                "$ref": "#/$defs/Row.barcode_not_scannable"
              },
              {
                "$ref": "#/$defs/Row.service_unavailable"
              }
            ]
          }
        ]
      }
    },
    "account": {
      "description": "Opaque owning account id when the caller is authenticated.",
      "type": "string"
    },
    "tier": {
      "description": "The caller's enforcement billing tier (`free`/`pro`/`business`) when authenticated. Absent for an unauthenticated (db-less/auth-disabled) validate.",
      "type": "string"
    }
  },
  "$defs": {
    "Error.font_malformed.fontFault": {
      "additionalProperties": false,
      "description": "Cause and tables of a `font_malformed` refusal. Same value on every surface that reads the font",
      "type": "object",
      "required": [
        "cause",
        "tables"
      ],
      "properties": {
        "cause": {
          "description": "Why the font was refused: `parseBudget` (a table needs more parse work than the safety budget), `outOfBounds` (truncated, or an offset outside the font data), `unsupportedFormat` (not an sfnt font, or a table format or version the engine does not read), `invalidStructure` (a structural rule of the OpenType specification is broken), or `outOfFaceReferences` (tables reference glyph ids past the face)",
          "type": "string",
          "enum": [
            "parseBudget",
            "outOfBounds",
            "unsupportedFormat",
            "invalidStructure",
            "outOfFaceReferences"
          ]
        },
        "tables": {
          "minItems": 1,
          "description": "sfnt tables the fault is in (`CFF` for the `CFF ` table), or `sfnt` for the font file as a whole, `WOFF` or `WOFF2` for the web font container it was uploaded in; every referencing table on `outOfFaceReferences`",
          "type": "array",
          "items": {
            "minLength": 1,
            "type": "string"
          }
        }
      }
    },
    "Error.google_font_not_found.didYouMean": {
      "description": "Present when a missing family name is a typo of a sibling family declared in the same request; each entry carries that family as `value`",
      "type": "array",
      "items": {
        "$ref": "#/$defs/Error.google_font_not_found.didYouMean.item"
      }
    },
    "Error.google_font_not_found.didYouMean.item": {
      "type": "object",
      "properties": {
        "key": {
          "type": "string"
        },
        "value": {
          "type": "string"
        },
        "index": {
          "type": "integer"
        }
      }
    },
    "Error.google_font_not_found.families": {
      "description": "The declared family names that do not exist on Google Fonts",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "Layout.Report": {
      "additionalProperties": false,
      "description": "Pagination without bytes: per-page occupancy, anchor to page, node placement, and what could not be honored. The same report a serialized render produces for the same body, because both come from the same layout pass. Page numbers in the layout report are 1-based: the number a viewer shows and a painted table-of-contents entry prints. Indices into an authored array stay 0-based and are named `*Index`. Each list shows at most 256 entries, the first in document order (`diagnostics`: the first 10 of each code), and `omitted` counts the rest exactly, so the report grows with the pages it counts and not with the blocks, anchors, or images the document holds.",
      "type": "object",
      "required": [
        "pageCount",
        "pages",
        "anchors",
        "nodes",
        "diagnostics",
        "omitted"
      ],
      "properties": {
        "pageCount": {
          "description": "Total PDF pages after pagination, listed or omitted: `pages.length` plus `omitted.pages`",
          "type": "number"
        },
        "pages": {
          "description": "Per-page occupancy of the first pages, ascending by `page`, no gaps; at most 256",
          "type": "array",
          "items": {
            "additionalProperties": false,
            "description": "Occupancy of one paginated sheet",
            "type": "object",
            "required": [
              "page",
              "dimensions",
              "bodyEndY",
              "remainingY",
              "overflow"
            ],
            "properties": {
              "page": {
                "description": "Page numbers in the layout report are 1-based: the number a viewer shows and a painted table-of-contents entry prints. Indices into an authored array stay 0-based and are named `*Index`.",
                "type": "number"
              },
              "sectionIndex": {
                "description": "0-based index into the authored `sections` array that produced this sheet. Absent when no authored section did: every Markdown page, and any sheet layout inserts on its own.",
                "type": "number"
              },
              "dimensions": {
                "additionalProperties": false,
                "description": "MediaBox of the page, read from the sheet that was laid out",
                "type": "object",
                "required": [
                  "width",
                  "height"
                ],
                "properties": {
                  "width": {
                    "description": "MediaBox width in PDF points",
                    "type": "number"
                  },
                  "height": {
                    "description": "MediaBox height in PDF points",
                    "type": "number"
                  }
                }
              },
              "bodyEndY": {
                "description": "Body content cursor Y after layout, in PDF points from the page top — the value a furniture renderer first observes as `page.y` on this page",
                "type": "number"
              },
              "remainingY": {
                "description": "Unused content height between `bodyEndY` and the bottom content edge, in PDF points. Never negative; `0` when the page holds no more content.",
                "type": "number"
              },
              "overflow": {
                "description": "True when the page has no remaining content height",
                "type": "boolean"
              }
            }
          }
        },
        "anchors": {
          "description": "The first addressable anchors with the page each landed on, in document order. Empty when the document declares none.",
          "type": "array",
          "items": {
            "additionalProperties": false,
            "description": "Where a named anchor landed",
            "type": "object",
            "required": [
              "name",
              "page"
            ],
            "properties": {
              "name": {
                "description": "Addressable anchor identity: the authored anchor name for compose, the GitHub-style heading slug for Markdown — what an author writes to point at this place",
                "type": "string"
              },
              "page": {
                "description": "Page numbers in the layout report are 1-based: the number a viewer shows and a painted table-of-contents entry prints. Indices into an authored array stay 0-based and are named `*Index`.",
                "type": "number"
              }
            }
          }
        },
        "nodes": {
          "description": "Placement of the first nodes the caller can address by id, in document order",
          "type": "array",
          "items": {
            "additionalProperties": false,
            "description": "Where one addressable node landed, and how it got there",
            "type": "object",
            "required": [
              "id",
              "fragments"
            ],
            "properties": {
              "id": {
                "description": "Node identity: the authored `id` for compose flow nodes at any depth, `<label>@<line>:<column>` for Markdown top-level blocks — the same ids as `rules[].nodes`. A table appears once under its whole-table id and its cells inherit that page.",
                "type": "string"
              },
              "pointer": {
                "description": "RFC 6901 fragment pointer (`#/sections/…`) of the authored compose node, top-level or nested in an `indented`, `columns`, `atomic` or `blockquote` scope — the form validate `errors[].pointer` uses. Absent for Markdown blocks, which are addressed by `id` alone.",
                "type": "string"
              },
              "fragments": {
                "description": "One box per page the node paints on, in page order, from the same pagination pass that paints: a node split across pages has one fragment per page, and a node that paints nothing, such as a `pageBreak`, has none.",
                "type": "array",
                "items": {
                  "additionalProperties": false,
                  "description": "Box in PDF points in the space of compose ops: origin at the top-left corner of the page, x to the right, y down. It is the union of the boxes of the operations the node paints on that page (full line boxes for text; its own box for an image, chart, or rule), not the exact ink of its glyphs. A blockquote or table reports the band it lays out on that page, its padding included, with the ink of its own strokes and caption, so the gap to the next box is the margin the page paints; the content inside it never widens it.",
                  "type": "object",
                  "required": [
                    "page",
                    "x",
                    "y",
                    "width",
                    "height"
                  ],
                  "properties": {
                    "page": {
                      "description": "Page numbers in the layout report are 1-based: the number a viewer shows and a painted table-of-contents entry prints. Indices into an authored array stay 0-based and are named `*Index`.",
                      "type": "number"
                    },
                    "x": {
                      "description": "Left edge in PDF points from the left edge of the page",
                      "type": "number"
                    },
                    "y": {
                      "description": "Top edge in PDF points from the top edge of the page",
                      "type": "number"
                    },
                    "width": {
                      "description": "Width in PDF points",
                      "type": "number"
                    },
                    "height": {
                      "description": "Height in PDF points",
                      "type": "number"
                    }
                  }
                }
              },
              "splitAt": {
                "description": "1-based source line index at which the node’s text first crosses a page break",
                "type": "number"
              },
              "widowRisk": {
                "description": "Present when a node with severed keep (`keepWithNext: false`) lands at the bottom of its page and the following content starts on a later page. Advisory of the severed keep; the node is not relocated.",
                "const": true,
                "type": "boolean"
              },
              "softFitReclaimPt": {
                "description": "Total soft-fit reclaim applied while placing this node, in PDF points (present only when greater than zero). Engine-applied observation; does not change placement when read.",
                "type": "number"
              },
              "clubWidowCut": {
                "description": "Present when a mid-block page cut ran under the default club/widow band policy (engine-applied)",
                "const": true,
                "type": "boolean"
              },
              "keepWithNextJump": {
                "description": "Present when a whole-unit page jump ran with a non-zero keep-with-next probe (engine-applied)",
                "const": true,
                "type": "boolean"
              },
              "blankGuardAllowedJump": {
                "description": "Present when a whole-unit or preferred atomic jump ran after blank-guard consultation allowed it (engine-applied)",
                "const": true,
                "type": "boolean"
              },
              "blankGuardDeniedJump": {
                "description": "Present when blank policy blocked a geometric whole-unit or preferred atomic jump (engine-applied)",
                "const": true,
                "type": "boolean"
              },
              "keepBondDropped": {
                "description": "Present when blank policy dropped keep-with-next last-line extra mid-band so the bond did not force an earlier cut (engine-applied; not a whole-unit jump denial)",
                "const": true,
                "type": "boolean"
              },
              "residualRoom": {
                "description": "Content residual room at the whole-unit keep decision, in PDF points (engine-applied; present only when residual packing telemetry ran)",
                "type": "number"
              },
              "residualUsableHeight": {
                "description": "Full usable content height at the residual packing decision, in PDF points (engine-applied)",
                "type": "number"
              },
              "residualFullUnitHeight": {
                "description": "Full keep-unit height (anchor lines plus keep probe) at the residual packing decision, in PDF points (engine-applied)",
                "type": "number"
              },
              "residualMinProgressHeight": {
                "description": "Minimum-progress start height used for residual packing, in PDF points (engine-applied)",
                "type": "number"
              },
              "residualJumped": {
                "description": "Present when place jumped before painting after residual packing resolution (engine-applied)",
                "const": true,
                "type": "boolean"
              },
              "residualAdmitAction": {
                "description": "Which residual packing action the layout took at this node: `stay-full` and `stay-degraded` keep the node on the page, the `jump-*` values move it to a fresh one, `geometry-no-jump` means geometry alone decided, `stay-guard-yield` keeps a keep-with-next chain on the page because moving it would leave more of the page blank than the blank guard allows, so the chain breaks after a list it holds whole or after a block whose keep the theme set, `stay-start-floor-yield` keeps the whole chain on the page for the same reason and its last block opens with the default two lines instead of the longer start floor its theme asks for, `stay-chain-over-page` keeps a keep-with-next member on the page because the rest of its chain is taller than a page body, so moving it would only move the break and leave the page blank, and the remaining labels name a keep or blank outcome (engine-applied).",
                "type": "string",
                "enum": [
                  "stay-full",
                  "stay-degraded",
                  "jump-blank-ok",
                  "jump-keep-joint",
                  "jump-residual-abandoned",
                  "geometry-no-jump",
                  "atomic-keep-joint-no-degrade",
                  "no-keep-blank",
                  "stay-guard-yield",
                  "stay-start-floor-yield",
                  "stay-chain-over-page"
                ]
              }
            }
          }
        },
        "diagnostics": {
          "description": "What pagination could not honor, addressed by page, authored section, request array index, or request JSON pointer. Empty when everything was honored.",
          "type": "array",
          "items": {
            "anyOf": [
              {
                "additionalProperties": false,
                "description": "A canvas section whose flow needed more than its own sheet",
                "type": "object",
                "required": [
                  "code",
                  "impact",
                  "sectionIndex"
                ],
                "properties": {
                  "code": {
                    "description": "Discriminator for a canvas section that needed extra sheets",
                    "const": "canvas-flow-overflow",
                    "type": "string"
                  },
                  "impact": {
                    "description": "What the entry changed in the PDF, on the scale of `Render.Diagnostic`: the `impact` the render diagnostic of the same code carries at the same node; `none` for an entry render does not report (`canvas-flow-overflow`, `page-override-unmatched`).",
                    "type": "string",
                    "enum": [
                      "none",
                      "appearance",
                      "content"
                    ]
                  },
                  "sectionIndex": {
                    "description": "0-based index into the authored `sections` array whose canvas flow spilled past its opening sheet; its continuation sheets carry the same `sectionIndex` in `pages`. Cover ops stay on the first sheet of that section.",
                    "type": "number"
                  }
                }
              },
              {
                "additionalProperties": false,
                "description": "A page override that applies to nothing",
                "type": "object",
                "required": [
                  "code",
                  "impact",
                  "index",
                  "reason"
                ],
                "properties": {
                  "code": {
                    "description": "Discriminator for a page override that matched no page",
                    "const": "page-override-unmatched",
                    "type": "string"
                  },
                  "impact": {
                    "description": "What the entry changed in the PDF, on the scale of `Render.Diagnostic`: the `impact` the render diagnostic of the same code carries at the same node; `none` for an entry render does not report (`canvas-flow-overflow`, `page-override-unmatched`).",
                    "type": "string",
                    "enum": [
                      "none",
                      "appearance",
                      "content"
                    ]
                  },
                  "index": {
                    "description": "0-based index into the request `furniture.pageOverrides` array",
                    "type": "number"
                  },
                  "reason": {
                    "description": "Why the selector matched no page, naming the offending value against the paginated page count",
                    "type": "string"
                  }
                }
              },
              {
                "additionalProperties": false,
                "description": "A flow chart whose authored `width` above the live content width was scaled to it with its height in proportion (never below the chart minimum side), whose `height` was shortened so it and its caption, or the start of a caption that splits, share one page body, or painted narrower than the chart minimum side because the column is",
                "type": "object",
                "required": [
                  "code",
                  "impact",
                  "pointer",
                  "requested",
                  "painted"
                ],
                "properties": {
                  "code": {
                    "description": "Discriminator for a flow chart painted smaller than a size it authored (see `requested`); render reports the same code at `warn`",
                    "const": "drawing-resized-to-fit",
                    "type": "string"
                  },
                  "impact": {
                    "description": "What the entry changed in the PDF, on the scale of `Render.Diagnostic`: the `impact` the render diagnostic of the same code carries at the same node; `none` for an entry render does not report (`canvas-flow-overflow`, `page-override-unmatched`).",
                    "type": "string",
                    "enum": [
                      "none",
                      "appearance",
                      "content"
                    ]
                  },
                  "pointer": {
                    "description": "RFC 6901 fragment pointer (`#/sections/…`) of the authored flow chart, the same form as validate `errors[].pointer`",
                    "type": "string"
                  },
                  "requested": {
                    "additionalProperties": false,
                    "description": "Box the chart asked for; an omitted width reads as the live content width, raised to the chart minimum side when that is larger",
                    "type": "object",
                    "required": [
                      "width",
                      "height"
                    ],
                    "properties": {
                      "width": {
                        "description": "Box width in PDF points",
                        "type": "number"
                      },
                      "height": {
                        "description": "Box height in PDF points",
                        "type": "number"
                      }
                    }
                  },
                  "painted": {
                    "$ref": "#/$defs/Layout.Report.diagnostics.item.drawing-resized-to-fit.painted"
                  }
                }
              },
              {
                "additionalProperties": false,
                "description": "A flow chart whose caption does not fit a page body below the chart even at its minimum height, so it continues on the next page instead of staying with the chart",
                "type": "object",
                "required": [
                  "code",
                  "impact",
                  "pointer",
                  "boxHeight",
                  "captionHeight",
                  "pageBodyHeight"
                ],
                "properties": {
                  "code": {
                    "description": "Discriminator for a flow chart whose caption continues past the chart page; render reports the same code",
                    "const": "drawing-caption-split",
                    "type": "string"
                  },
                  "impact": {
                    "description": "What the entry changed in the PDF, on the scale of `Render.Diagnostic`: the `impact` the render diagnostic of the same code carries at the same node; `none` for an entry render does not report (`canvas-flow-overflow`, `page-override-unmatched`).",
                    "type": "string",
                    "enum": [
                      "none",
                      "appearance",
                      "content"
                    ]
                  },
                  "pointer": {
                    "description": "RFC 6901 fragment pointer (`#/sections/…`) of the authored flow chart, the same form as validate `errors[].pointer`",
                    "type": "string"
                  },
                  "boxHeight": {
                    "description": "Painted chart height in PDF points",
                    "type": "number"
                  },
                  "captionHeight": {
                    "description": "Caption height in PDF points laid out below the chart without page breaks, so page gaps are not counted",
                    "type": "number"
                  },
                  "pageBodyHeight": {
                    "description": "Fresh page body height in PDF points that chart and caption could not share",
                    "type": "number"
                  }
                }
              },
              {
                "additionalProperties": false,
                "description": "A blockquote whose `style.borderRadius` rounds the frame it paints (background, border, and left bar), painted in more than one band (split across pages or beside a float), so every band paints square corners",
                "type": "object",
                "required": [
                  "code",
                  "impact",
                  "pointer",
                  "borderRadius",
                  "bands"
                ],
                "properties": {
                  "code": {
                    "description": "Discriminator for a rounded blockquote frame split across bands that paints square corners; render reports the same code",
                    "const": "rounded-frame-split",
                    "type": "string"
                  },
                  "impact": {
                    "description": "What the entry changed in the PDF, on the scale of `Render.Diagnostic`: the `impact` the render diagnostic of the same code carries at the same node; `none` for an entry render does not report (`canvas-flow-overflow`, `page-override-unmatched`).",
                    "type": "string",
                    "enum": [
                      "none",
                      "appearance",
                      "content"
                    ]
                  },
                  "pointer": {
                    "description": "RFC 6901 fragment pointer (`#/sections/…`) of the authored blockquote, the same form as validate `errors[].pointer`",
                    "type": "string"
                  },
                  "borderRadius": {
                    "description": "Corner radius in PDF points the frame asked for",
                    "type": "number"
                  },
                  "bands": {
                    "description": "Bands the frame painted in, across pages and beside floats, each with square corners",
                    "type": "integer"
                  }
                }
              },
              {
                "additionalProperties": false,
                "description": "A `rule` that ends its flow (a stream section, or a container) keeps with the block before it, so it moves with that block’s last lines; it paints alone on its page only when that block cannot keep with it (an `atomic` node, a `blockquote`, a `columns` row) or moving its end would leave more than 25% of the page before blank. Remove the rule, or let the block before it split",
                "type": "object",
                "required": [
                  "code",
                  "impact",
                  "pointer"
                ],
                "properties": {
                  "code": {
                    "description": "Discriminator for a rule that ends its flow and paints alone on its page, apart from the block before it; render reports the same code",
                    "const": "closing-rule-alone",
                    "type": "string"
                  },
                  "impact": {
                    "description": "What the entry changed in the PDF, on the scale of `Render.Diagnostic`: the `impact` the render diagnostic of the same code carries at the same node; `none` for an entry render does not report (`canvas-flow-overflow`, `page-override-unmatched`).",
                    "type": "string",
                    "enum": [
                      "none",
                      "appearance",
                      "content"
                    ]
                  },
                  "pointer": {
                    "description": "RFC 6901 fragment pointer (`#/sections/…`) of the authored rule, the same form as validate `errors[].pointer`",
                    "type": "string"
                  }
                }
              },
              {
                "additionalProperties": false,
                "description": "A blockquote whose `style` authored frame chrome (border, left bar, background, or padding) and whose inner width fell below the minimum a framed body needs, so its body painted flat at the outer width without that chrome",
                "type": "object",
                "required": [
                  "code",
                  "impact",
                  "pointer",
                  "innerWidth",
                  "minInnerWidth"
                ],
                "properties": {
                  "code": {
                    "description": "Discriminator for a blockquote too narrow for the frame its `style` authored, whose body painted flat without it; render reports the same code",
                    "const": "blockquote-frame-dropped",
                    "type": "string"
                  },
                  "impact": {
                    "description": "What the entry changed in the PDF, on the scale of `Render.Diagnostic`: the `impact` the render diagnostic of the same code carries at the same node; `none` for an entry render does not report (`canvas-flow-overflow`, `page-override-unmatched`).",
                    "type": "string",
                    "enum": [
                      "none",
                      "appearance",
                      "content"
                    ]
                  },
                  "pointer": {
                    "description": "RFC 6901 fragment pointer (`#/sections/…`) of the authored blockquote, the same form as validate `errors[].pointer`",
                    "type": "string"
                  },
                  "innerWidth": {
                    "description": "Width in PDF points the frame border, bar, and padding left for the body",
                    "type": "number"
                  },
                  "minInnerWidth": {
                    "description": "Narrowest inner width in PDF points a framed body needs",
                    "type": "number"
                  }
                }
              },
              {
                "additionalProperties": false,
                "description": "A raster flow image whose authored size is wider than the live content width or taller than the page body, less any keep-with-next chain that shares it, scaled down uniformly so it fits both; its proportion is kept",
                "type": "object",
                "required": [
                  "code",
                  "impact",
                  "pointer",
                  "requested",
                  "painted"
                ],
                "properties": {
                  "code": {
                    "description": "Discriminator for a raster flow image painted smaller than the `width` or `height` it authored (see `requested`); render reports the same code at `warn`; a fitted natural size is never this code but `image-fit-to-column` (`info`), or only `image-low-resolution` (`warn`) when it prints below 150 DPI",
                    "const": "image-downscaled-to-fit-container",
                    "type": "string"
                  },
                  "impact": {
                    "description": "What the entry changed in the PDF, on the scale of `Render.Diagnostic`: the `impact` the render diagnostic of the same code carries at the same node; `none` for an entry render does not report (`canvas-flow-overflow`, `page-override-unmatched`).",
                    "type": "string",
                    "enum": [
                      "none",
                      "appearance",
                      "content"
                    ]
                  },
                  "pointer": {
                    "description": "RFC 6901 fragment pointer (`#/sections/…`) of the authored raster flow image, the same form as validate `errors[].pointer`",
                    "type": "string"
                  },
                  "requested": {
                    "$ref": "#/$defs/Layout.Report.diagnostics.item.image-downscaled-to-fit-container.requested"
                  },
                  "painted": {
                    "$ref": "#/$defs/Layout.Report.diagnostics.item.drawing-resized-to-fit.painted"
                  }
                }
              },
              {
                "additionalProperties": false,
                "description": "A vector (SVG) flow image whose authored `width` is wider than the live content width, or whose box at that width is taller than the page body, less any keep-with-next chain that shares it, scaled down uniformly so it fits both; its proportion is kept",
                "type": "object",
                "required": [
                  "code",
                  "impact",
                  "pointer",
                  "requested",
                  "painted"
                ],
                "properties": {
                  "code": {
                    "description": "Discriminator for a vector flow image painted smaller than the `width` it authored (see `requested`); render reports the same code at `warn`, and at `info` without this entry when a natural size was fitted",
                    "const": "svg-downscaled-to-fit-container",
                    "type": "string"
                  },
                  "impact": {
                    "description": "What the entry changed in the PDF, on the scale of `Render.Diagnostic`: the `impact` the render diagnostic of the same code carries at the same node; `none` for an entry render does not report (`canvas-flow-overflow`, `page-override-unmatched`).",
                    "type": "string",
                    "enum": [
                      "none",
                      "appearance",
                      "content"
                    ]
                  },
                  "pointer": {
                    "description": "RFC 6901 fragment pointer (`#/sections/…`) of the authored vector flow image, the same form as validate `errors[].pointer`",
                    "type": "string"
                  },
                  "requested": {
                    "additionalProperties": false,
                    "description": "Visible box the image asked for",
                    "type": "object",
                    "required": [
                      "width",
                      "height"
                    ],
                    "properties": {
                      "width": {
                        "description": "Box width in PDF points",
                        "type": "number"
                      },
                      "height": {
                        "description": "Box height in PDF points",
                        "type": "number"
                      }
                    }
                  },
                  "painted": {
                    "additionalProperties": false,
                    "description": "Visible box that was painted",
                    "type": "object",
                    "required": [
                      "width",
                      "height"
                    ],
                    "properties": {
                      "width": {
                        "description": "Box width in PDF points",
                        "type": "number"
                      },
                      "height": {
                        "description": "Box height in PDF points",
                        "type": "number"
                      }
                    }
                  }
                }
              },
              {
                "additionalProperties": false,
                "description": "An inline raster image whose authored size is wider than the text block content width or taller than the page body, scaled down uniformly so it fits both; its proportion is kept",
                "type": "object",
                "required": [
                  "code",
                  "impact",
                  "pointer",
                  "requested",
                  "painted"
                ],
                "properties": {
                  "code": {
                    "description": "Discriminator for an inline raster image in a rich text fragment painted smaller than the `image.width` or `image.height` it authored (see `requested`); render reports the same code at `warn`, and at `info` without this entry when a size the author did not set in points was fitted",
                    "const": "inline-image-oversized-scaled",
                    "type": "string"
                  },
                  "impact": {
                    "description": "What the entry changed in the PDF, on the scale of `Render.Diagnostic`: the `impact` the render diagnostic of the same code carries at the same node; `none` for an entry render does not report (`canvas-flow-overflow`, `page-override-unmatched`).",
                    "type": "string",
                    "enum": [
                      "none",
                      "appearance",
                      "content"
                    ]
                  },
                  "pointer": {
                    "description": "RFC 6901 fragment pointer (`#/sections/…`) of the authored node that holds the inline image, the same form as validate `errors[].pointer`",
                    "type": "string"
                  },
                  "requested": {
                    "additionalProperties": false,
                    "description": "Box the inline image asked for",
                    "type": "object",
                    "required": [
                      "width",
                      "height"
                    ],
                    "properties": {
                      "width": {
                        "description": "Box width in PDF points",
                        "type": "number"
                      },
                      "height": {
                        "description": "Box height in PDF points",
                        "type": "number"
                      }
                    }
                  },
                  "painted": {
                    "$ref": "#/$defs/Layout.Report.diagnostics.item.drawing-resized-to-fit.painted"
                  }
                }
              },
              {
                "additionalProperties": false,
                "description": "An inline vector (SVG) image whose authored size is wider than the text block content width or taller than the page body, scaled down uniformly so it fits both; its proportion is kept",
                "type": "object",
                "required": [
                  "code",
                  "impact",
                  "pointer",
                  "requested",
                  "painted"
                ],
                "properties": {
                  "code": {
                    "description": "Discriminator for an inline vector (SVG) image in a rich text fragment painted smaller than the `image.width` or `image.height` it authored (see `requested`); render reports the same code at `warn`, and at `info` without this entry when a size the author did not set in points was fitted",
                    "const": "inline-svg-oversized-scaled",
                    "type": "string"
                  },
                  "impact": {
                    "description": "What the entry changed in the PDF, on the scale of `Render.Diagnostic`: the `impact` the render diagnostic of the same code carries at the same node; `none` for an entry render does not report (`canvas-flow-overflow`, `page-override-unmatched`).",
                    "type": "string",
                    "enum": [
                      "none",
                      "appearance",
                      "content"
                    ]
                  },
                  "pointer": {
                    "description": "RFC 6901 fragment pointer (`#/sections/…`) of the authored node that holds the inline image, the same form as validate `errors[].pointer`",
                    "type": "string"
                  },
                  "requested": {
                    "additionalProperties": false,
                    "description": "Box the inline SVG asked for",
                    "type": "object",
                    "required": [
                      "width",
                      "height"
                    ],
                    "properties": {
                      "width": {
                        "description": "Box width in PDF points",
                        "type": "number"
                      },
                      "height": {
                        "description": "Box height in PDF points",
                        "type": "number"
                      }
                    }
                  },
                  "painted": {
                    "$ref": "#/$defs/Layout.Report.diagnostics.item.drawing-resized-to-fit.painted"
                  }
                }
              },
              {
                "additionalProperties": false,
                "description": "A formula whose widest unbreakable part (the whole formula when it has no line break) is wider than the text block content width, or whose line is taller than the page body, set at a uniformly smaller size so it fits both",
                "type": "object",
                "required": [
                  "code",
                  "impact",
                  "pointer",
                  "requested",
                  "painted"
                ],
                "properties": {
                  "code": {
                    "description": "Discriminator for a formula (a flow `math` node or an inline `math` span) set smaller than its size so it fits; render reports the same code at `warn`",
                    "const": "inline-math-oversized-scaled",
                    "type": "string"
                  },
                  "impact": {
                    "description": "What the entry changed in the PDF, on the scale of `Render.Diagnostic`: the `impact` the render diagnostic of the same code carries at the same node; `none` for an entry render does not report (`canvas-flow-overflow`, `page-override-unmatched`).",
                    "type": "string",
                    "enum": [
                      "none",
                      "appearance",
                      "content"
                    ]
                  },
                  "pointer": {
                    "description": "RFC 6901 fragment pointer (`#/sections/…`) of the authored flow `math` node, or of the node whose rich content holds the inline `math` span, the same form as validate `errors[].pointer`",
                    "type": "string"
                  },
                  "requested": {
                    "additionalProperties": false,
                    "description": "Formula box at its size: the width of its widest unbreakable part (the whole formula when it has no line break) by its height",
                    "type": "object",
                    "required": [
                      "width",
                      "height"
                    ],
                    "properties": {
                      "width": {
                        "description": "Box width in PDF points",
                        "type": "number"
                      },
                      "height": {
                        "description": "Box height in PDF points",
                        "type": "number"
                      }
                    }
                  },
                  "painted": {
                    "$ref": "#/$defs/Layout.Report.diagnostics.item.drawing-resized-to-fit.painted"
                  }
                }
              },
              {
                "additionalProperties": false,
                "description": "A keep-with-next chain (a heading, a lead-in) and the block after it paint on separate pages: the chain with what the block keeps where it starts (an image scaled down or a chart shortened to its floor, a text or list opening, a table header with its first rows) does not share a page body. A table start that also did not fit the room the block before it left is reported as `table-keep-residual-orphan` at the table as well: that code names the start that moved, this one that no page body holds the chain with it",
                "type": "object",
                "required": [
                  "code",
                  "impact",
                  "pointer",
                  "blockKind",
                  "chainHeight",
                  "blockHeight",
                  "pageBodyHeight"
                ],
                "properties": {
                  "code": {
                    "description": "Discriminator for a keep-with-next chain that paints on an earlier page than the block it keeps with, because the chain and what that block keeps where it starts cannot share a page body; render reports the same code",
                    "const": "keep-with-next-severed",
                    "type": "string"
                  },
                  "impact": {
                    "description": "What the entry changed in the PDF, on the scale of `Render.Diagnostic`: the `impact` the render diagnostic of the same code carries at the same node; `none` for an entry render does not report (`canvas-flow-overflow`, `page-override-unmatched`).",
                    "type": "string",
                    "enum": [
                      "none",
                      "appearance",
                      "content"
                    ]
                  },
                  "pointer": {
                    "description": "RFC 6901 fragment pointer (`#/sections/…`) of the authored flow image or chart the chain keeps with, of the list whose last item stays behind (`listTail`), or, for any other block, of the keep-with-next node that opens the chain (the heading); the same form as validate `errors[].pointer`",
                    "type": "string"
                  },
                  "blockKind": {
                    "description": "How the block the chain keeps with paints: `image` for a raster flow image, `svg` for a vector flow image, `drawing` for a flow chart, `atomicGroup` for an `atomic` node that moves whole or opens where it starts with its first child moved whole, `text` for a `text` node (an atomic one moves whole; any other keeps its opening lines with the chain), `table` for a `table` (its header and the body rows it keeps where it starts), `list` for a `list` (its opening item lines), `blockquote` for a `blockquote`, `indented` for an `indented` node, `columns` for a `columns` row, and `textRow` for a `textRow`; `listTail` is a Markdown list whose last item stays on its page while the block after it opens on a later one",
                    "type": "string",
                    "enum": [
                      "image",
                      "svg",
                      "drawing",
                      "atomicGroup",
                      "text",
                      "listTail",
                      "table",
                      "list",
                      "blockquote",
                      "indented",
                      "columns",
                      "textRow"
                    ]
                  },
                  "chainHeight": {
                    "description": "Height in PDF points the keep-with-next chain claims above the block on a fresh page, through the gap to the block",
                    "type": "number"
                  },
                  "blockHeight": {
                    "description": "Height in PDF points the block keeps together with the chain as it paints: its box, plus the caption part a chart keeps with it, or what a node keeps where it starts: all of it when it moves whole, its opening when it splits",
                    "type": "number"
                  },
                  "pageBodyHeight": {
                    "description": "Fresh page body height in PDF points that chain and block could not share",
                    "type": "number"
                  }
                }
              },
              {
                "additionalProperties": false,
                "description": "A flow table row taller than a fresh page's room for rows, so it splits between pages instead of staying whole (`rowSplit` `'never'`, the default); `'allow'` accepts the split without this diagnostic",
                "type": "object",
                "required": [
                  "code",
                  "impact",
                  "pointer",
                  "rowIndex",
                  "rowHeight",
                  "freshPageBudget"
                ],
                "properties": {
                  "code": {
                    "description": "Discriminator for a flow table row that split across pages although rows never split by default; render reports the same code",
                    "const": "table-row-split-forced",
                    "type": "string"
                  },
                  "impact": {
                    "description": "What the entry changed in the PDF, on the scale of `Render.Diagnostic`: the `impact` the render diagnostic of the same code carries at the same node; `none` for an entry render does not report (`canvas-flow-overflow`, `page-override-unmatched`).",
                    "type": "string",
                    "enum": [
                      "none",
                      "appearance",
                      "content"
                    ]
                  },
                  "pointer": {
                    "description": "RFC 6901 fragment pointer (`#/sections/…`) of the authored flow table, the same form as validate `errors[].pointer`",
                    "type": "string"
                  },
                  "rowIndex": {
                    "description": "0-based index into the table's authored `rows` of the row that split",
                    "type": "number"
                  },
                  "rowHeight": {
                    "description": "Height in PDF points the row needs",
                    "type": "number"
                  },
                  "freshPageBudget": {
                    "description": "Height in PDF points a row may occupy on a fresh continuation page: the page body less the repeated header rows",
                    "type": "number"
                  }
                }
              },
              {
                "additionalProperties": false,
                "description": "A multipage table that kept fewer body rows at its start or end than its floor asks, because what the floor keeps together is taller than the page body (`bandHeight` above `pageBodyHeight`), the keep-with-next block before the table leaves too little room beside its start, or the page before its end could not give up rows without breaking the start floor; every row still paints. Lower the floor, shorten the rows, or give the page more body height",
                "type": "object",
                "required": [
                  "code",
                  "impact",
                  "pointer",
                  "edge",
                  "bodyRowsRequested",
                  "bodyRowsKept",
                  "bandHeight",
                  "pageBodyHeight"
                ],
                "properties": {
                  "code": {
                    "description": "Discriminator for a flow table that kept fewer body rows at its start or end than its `minRowsAtStart` or `minRowsAtEnd` asks; render reports the same code",
                    "const": "table-row-floor-forced",
                    "type": "string"
                  },
                  "impact": {
                    "description": "What the entry changed in the PDF, on the scale of `Render.Diagnostic`: the `impact` the render diagnostic of the same code carries at the same node; `none` for an entry render does not report (`canvas-flow-overflow`, `page-override-unmatched`).",
                    "type": "string",
                    "enum": [
                      "none",
                      "appearance",
                      "content"
                    ]
                  },
                  "pointer": {
                    "description": "RFC 6901 fragment pointer (`#/sections/…`) of the authored flow table, the same form as validate `errors[].pointer`",
                    "type": "string"
                  },
                  "edge": {
                    "description": "`start`: the rows kept with the header on the page where the table starts (`minRowsAtStart`). `end`: the rows on the last page of the table (`minRowsAtEnd`)",
                    "type": "string",
                    "enum": [
                      "start",
                      "end"
                    ]
                  },
                  "bodyRowsRequested": {
                    "minimum": 1,
                    "description": "Body rows the floor of that edge keeps together: at the start all of them when the table has fewer than both floors together, at the end no more than the table has",
                    "type": "integer"
                  },
                  "bodyRowsKept": {
                    "minimum": 0,
                    "description": "Body rows (a `rowSpan` block counts once) that start on that page; fewer than `bodyRowsRequested`. Every row still paints",
                    "type": "integer"
                  },
                  "bandHeight": {
                    "description": "Height in PDF points of what the floor keeps together: at the start the header rows with the first `bodyRowsRequested` body rows, at the end the last `bodyRowsRequested` body rows",
                    "type": "number"
                  },
                  "pageBodyHeight": {
                    "description": "At the start the fresh page body height the table had, less the outer halves of its top and bottom border and the footer rows reserved on every page; at the end the room a fresh continuation page has for rows",
                    "type": "number"
                  }
                }
              },
              {
                "additionalProperties": false,
                "description": "A keep-with-next block (a heading, a lead-in) painted at the foot of a page while the multipage table it keeps with starts on the next one, because the table start did not fit the room left; when no page body holds the keep-with-next chain with that start either, `keep-with-next-severed` reports that too, at the heading",
                "type": "object",
                "required": [
                  "code",
                  "impact",
                  "pointer",
                  "predecessorKind",
                  "residualRoom",
                  "startUnitHeight",
                  "bodyRowsKept"
                ],
                "properties": {
                  "code": {
                    "description": "Discriminator for a flow table whose start moved to the next page without the keep-with-next block before it; render reports the same code",
                    "const": "table-keep-residual-orphan",
                    "type": "string"
                  },
                  "impact": {
                    "description": "What the entry changed in the PDF, on the scale of `Render.Diagnostic`: the `impact` the render diagnostic of the same code carries at the same node; `none` for an entry render does not report (`canvas-flow-overflow`, `page-override-unmatched`).",
                    "type": "string",
                    "enum": [
                      "none",
                      "appearance",
                      "content"
                    ]
                  },
                  "pointer": {
                    "description": "RFC 6901 fragment pointer (`#/sections/…`) of the authored flow table, the same form as validate `errors[].pointer`",
                    "type": "string"
                  },
                  "predecessorKind": {
                    "description": "Engine flow kind of the keep-with-next block left on the prior page; a heading arrives as `text`, a rule as `line`",
                    "type": "string",
                    "enum": [
                      "text",
                      "textRow",
                      "line",
                      "image",
                      "svg",
                      "list",
                      "table"
                    ]
                  },
                  "residualRoom": {
                    "description": "Room in PDF points left on the prior page below that block",
                    "type": "number"
                  },
                  "startUnitHeight": {
                    "description": "Height in PDF points of the table start sized for that room: the header rows plus the `bodyRowsKept` body rows after them",
                    "type": "number"
                  },
                  "bodyRowsKept": {
                    "description": "Body rows that table start keeps with the header rows, after the widow guard steps down (authored, then the most rows that fit, then 1, then 0); `0` means not even the first body row fits below the header there",
                    "type": "number"
                  }
                }
              },
              {
                "additionalProperties": false,
                "description": "A flow text block that moves whole (atomic, or short enough to prefer staying whole) did not fit the room left on a page and jumped to the next one, leaving that room blank",
                "type": "object",
                "required": [
                  "code",
                  "impact",
                  "pointer",
                  "residualRoom",
                  "unitHeight"
                ],
                "properties": {
                  "code": {
                    "description": "Discriminator for a flow text block that moved whole to the next page and left a large blank above; render reports the same code",
                    "const": "content-residual-abandoned",
                    "type": "string"
                  },
                  "impact": {
                    "description": "What the entry changed in the PDF, on the scale of `Render.Diagnostic`: the `impact` the render diagnostic of the same code carries at the same node; `none` for an entry render does not report (`canvas-flow-overflow`, `page-override-unmatched`).",
                    "type": "string",
                    "enum": [
                      "none",
                      "appearance",
                      "content"
                    ]
                  },
                  "pointer": {
                    "description": "RFC 6901 fragment pointer (`#/sections/…`) of the authored text block, the same form as validate `errors[].pointer`",
                    "type": "string"
                  },
                  "residualRoom": {
                    "description": "Room in PDF points left blank on the prior page",
                    "type": "number"
                  },
                  "unitHeight": {
                    "description": "Height in PDF points the block needed there, with the keep-with-next part after it",
                    "type": "number"
                  }
                }
              },
              {
                "additionalProperties": false,
                "description": "A flow text block whose `atomic` policy requested `minLinesAtStart` or `minLinesAtEnd` split with fewer lines on one side of a page break, because the page body cannot host both floors, so pagination forced progress",
                "type": "object",
                "required": [
                  "code",
                  "impact",
                  "pointer",
                  "linesBeforeCut",
                  "linesAfterCut"
                ],
                "properties": {
                  "code": {
                    "description": "Discriminator for a flow text block cut across pages below a line floor its `atomic` policy requested; render reports the same code",
                    "const": "line-floor-forced",
                    "type": "string"
                  },
                  "impact": {
                    "description": "What the entry changed in the PDF, on the scale of `Render.Diagnostic`: the `impact` the render diagnostic of the same code carries at the same node; `none` for an entry render does not report (`canvas-flow-overflow`, `page-override-unmatched`).",
                    "type": "string",
                    "enum": [
                      "none",
                      "appearance",
                      "content"
                    ]
                  },
                  "pointer": {
                    "description": "RFC 6901 fragment pointer (`#/sections/…`) of the authored text block, the same form as validate `errors[].pointer`",
                    "type": "string"
                  },
                  "linesBeforeCut": {
                    "minimum": 1,
                    "description": "Lines of the block the cut left on the page where it fell",
                    "type": "integer"
                  },
                  "linesAfterCut": {
                    "minimum": 1,
                    "description": "Lines of the block the cut carried to the pages after it",
                    "type": "integer"
                  },
                  "minLinesAtStart": {
                    "minimum": 1,
                    "description": "`minLinesAtStart` the policy requested; absent when it requested none",
                    "type": "integer"
                  },
                  "minLinesAtEnd": {
                    "minimum": 1,
                    "description": "`minLinesAtEnd` the policy requested; absent when it requested none",
                    "type": "integer"
                  }
                }
              },
              {
                "additionalProperties": false,
                "description": "A flow `table` whose box at its column width floors (content that cannot wrap, `minWidth`, fixed widths, padding, and the outer halves of its left and right border) is wider than the band it sits in even with long tokens broken and its cell text at the legible minimum, so the table paints clipped to the band",
                "type": "object",
                "required": [
                  "code",
                  "impact",
                  "pointer",
                  "requiredWidth",
                  "availableWidth"
                ],
                "properties": {
                  "code": {
                    "description": "Discriminator for a flow `table` whose box at its column width floors is wider than its band; render reports the same code",
                    "const": "table-width-overflow",
                    "type": "string"
                  },
                  "impact": {
                    "description": "What the entry changed in the PDF, on the scale of `Render.Diagnostic`: the `impact` the render diagnostic of the same code carries at the same node; `none` for an entry render does not report (`canvas-flow-overflow`, `page-override-unmatched`).",
                    "type": "string",
                    "enum": [
                      "none",
                      "appearance",
                      "content"
                    ]
                  },
                  "pointer": {
                    "description": "RFC 6901 fragment pointer (`#/sections/…`) of the authored table, the same form as validate `errors[].pointer`",
                    "type": "string"
                  },
                  "requiredWidth": {
                    "exclusiveMinimum": 0,
                    "description": "Width of the table box after long tokens break and its cell text is reduced to the legible minimum, in PDF points: the sum of its column width floors plus the outer halves of its left and right border; the table paints clipped to its band, so `requiredWidth - availableWidth` of it is not painted",
                    "type": "number"
                  },
                  "availableWidth": {
                    "minimum": 0,
                    "description": "Width of the band the table was laid out in (the page body, a column, or a container inner band), in PDF points",
                    "type": "number"
                  }
                }
              },
              {
                "additionalProperties": false,
                "description": "A flow `table` whose box at the requested text size (its column width floors plus the outer halves of its left and right border) is wider than the band it sits in, or whose repeated header or footer text is taller than its share of the page body, so that text was reduced (no lower than the legible minimum) to fit",
                "type": "object",
                "required": [
                  "code",
                  "impact",
                  "pointer",
                  "fontScale",
                  "requiredWidth",
                  "availableWidth"
                ],
                "properties": {
                  "code": {
                    "description": "Discriminator for a flow `table` whose cell text was reduced so its box at its column width floors fits its band, or so a repeated header or footer row fits its share of the page body; render reports the same code",
                    "const": "table-cell-font-reduced",
                    "type": "string"
                  },
                  "impact": {
                    "description": "What the entry changed in the PDF, on the scale of `Render.Diagnostic`: the `impact` the render diagnostic of the same code carries at the same node; `none` for an entry render does not report (`canvas-flow-overflow`, `page-override-unmatched`).",
                    "type": "string",
                    "enum": [
                      "none",
                      "appearance",
                      "content"
                    ]
                  },
                  "pointer": {
                    "description": "RFC 6901 fragment pointer (`#/sections/…`) of the authored table, the same form as validate `errors[].pointer`",
                    "type": "string"
                  },
                  "fontScale": {
                    "exclusiveMinimum": 0,
                    "exclusiveMaximum": 1,
                    "description": "Scale applied to the text that was reduced; no text falls below the legible minimum. Every cell when the column floors bound it, and the repeated row when that row bound it (the lower scale when both do)",
                    "type": "number"
                  },
                  "requiredWidth": {
                    "exclusiveMinimum": 0,
                    "description": "Width of the table box at the requested text size, after long tokens break where the cells `textWrap` allows, in PDF points: the sum of its column width floors plus the outer halves of its left and right border. Larger than `availableWidth` when those floors bound the scale",
                    "type": "number"
                  },
                  "availableWidth": {
                    "minimum": 0,
                    "description": "Width of the band the table was laid out in (the page body, a column, or a container inner band), in PDF points",
                    "type": "number"
                  },
                  "rowHeight": {
                    "exclusiveMinimum": 0,
                    "description": "Height in PDF points of the tallest repeated header or footer row before its text was reduced. Absent when only the column floors bound the scale",
                    "type": "number"
                  },
                  "rowBand": {
                    "exclusiveMinimum": 0,
                    "description": "Share of the page body that repeated row may occupy, in PDF points (`pageBody / (header + footer + 1)`). Present with `rowHeight`",
                    "type": "number"
                  },
                  "repeats": {
                    "description": "Whether the row is repeated on continuation pages. Present with `rowHeight`. False when the legible minimum still leaves no body line",
                    "type": "boolean"
                  },
                  "withinShare": {
                    "description": "Whether the reduced row is no taller than `rowBand`. Present with `rowHeight`",
                    "type": "boolean"
                  }
                }
              },
              {
                "additionalProperties": false,
                "description": "A flow image on a page whose margins leave no body height, so it is not scaled to fit and paints past the body",
                "type": "object",
                "required": [
                  "code",
                  "impact",
                  "pointer",
                  "requested",
                  "pageBodyHeight"
                ],
                "properties": {
                  "code": {
                    "description": "Discriminator for a flow image placed on a page with no body height; render reports the same code",
                    "const": "image-container-has-no-usable-height",
                    "type": "string"
                  },
                  "impact": {
                    "description": "What the entry changed in the PDF, on the scale of `Render.Diagnostic`: the `impact` the render diagnostic of the same code carries at the same node; `none` for an entry render does not report (`canvas-flow-overflow`, `page-override-unmatched`).",
                    "type": "string",
                    "enum": [
                      "none",
                      "appearance",
                      "content"
                    ]
                  },
                  "pointer": {
                    "description": "RFC 6901 fragment pointer (`#/sections/…`) of the authored flow image, the same form as validate `errors[].pointer`",
                    "type": "string"
                  },
                  "requested": {
                    "$ref": "#/$defs/Layout.Report.diagnostics.item.image-downscaled-to-fit-container.requested"
                  },
                  "pageBodyHeight": {
                    "description": "Page body height in PDF points, zero or negative",
                    "type": "number"
                  }
                }
              },
              {
                "additionalProperties": false,
                "description": "An image that asked to float with text wrapping around it is taller than the page body; a float cannot cross a page break, so it is laid out as a block image",
                "type": "object",
                "required": [
                  "code",
                  "impact",
                  "pointer",
                  "requested",
                  "pageBodyHeight"
                ],
                "properties": {
                  "code": {
                    "description": "Discriminator for a floated image laid out as a block because it is taller than the page body; render reports the same code",
                    "const": "wrap-image-too-tall-downgraded",
                    "type": "string"
                  },
                  "impact": {
                    "description": "What the entry changed in the PDF, on the scale of `Render.Diagnostic`: the `impact` the render diagnostic of the same code carries at the same node; `none` for an entry render does not report (`canvas-flow-overflow`, `page-override-unmatched`).",
                    "type": "string",
                    "enum": [
                      "none",
                      "appearance",
                      "content"
                    ]
                  },
                  "pointer": {
                    "description": "RFC 6901 fragment pointer (`#/sections/…`) of the authored image, the same form as validate `errors[].pointer`",
                    "type": "string"
                  },
                  "requested": {
                    "additionalProperties": false,
                    "description": "Box the image asked for at its float width",
                    "type": "object",
                    "required": [
                      "width",
                      "height"
                    ],
                    "properties": {
                      "width": {
                        "description": "Box width in PDF points",
                        "type": "number"
                      },
                      "height": {
                        "description": "Box height in PDF points",
                        "type": "number"
                      }
                    }
                  },
                  "pageBodyHeight": {
                    "description": "Page body height in PDF points the box exceeded",
                    "type": "number"
                  }
                }
              }
            ]
          }
        },
        "omitted": {
          "additionalProperties": false,
          "description": "What each list of the report does not show, exactly; every count is 0 when the report lists everything the pagination produced. Each list shows at most 256 entries, the first in document order (`diagnostics`: the first 10 of each code), and `omitted` counts the rest exactly, so the report grows with the pages it counts and not with the blocks, anchors, or images the document holds.",
          "type": "object",
          "required": [
            "pages",
            "anchors",
            "nodes",
            "diagnostics"
          ],
          "properties": {
            "pages": {
              "minimum": 0,
              "description": "Pages past the ones `pages` lists; `pageCount` is the total",
              "type": "integer"
            },
            "anchors": {
              "minimum": 0,
              "description": "Anchors past the ones `anchors` lists, in document order",
              "type": "integer"
            },
            "nodes": {
              "minimum": 0,
              "description": "Nodes past the ones `nodes` lists, in document order",
              "type": "integer"
            },
            "diagnostics": {
              "minimum": 0,
              "description": "Diagnostics past the first ones of their code that `diagnostics` lists, in document order",
              "type": "integer"
            }
          }
        }
      }
    },
    "Layout.Report.diagnostics.item.drawing-resized-to-fit.painted": {
      "additionalProperties": false,
      "description": "Box that was painted",
      "type": "object",
      "required": [
        "width",
        "height"
      ],
      "properties": {
        "width": {
          "description": "Box width in PDF points",
          "type": "number"
        },
        "height": {
          "description": "Box height in PDF points",
          "type": "number"
        }
      }
    },
    "Layout.Report.diagnostics.item.image-downscaled-to-fit-container.requested": {
      "additionalProperties": false,
      "description": "Box the image asked for",
      "type": "object",
      "required": [
        "width",
        "height"
      ],
      "properties": {
        "width": {
          "description": "Box width in PDF points",
          "type": "number"
        },
        "height": {
          "description": "Box height in PDF points",
          "type": "number"
        }
      }
    },
    "Problem.validation_failed.errors": {
      "minItems": 1,
      "description": "The leading field-level violations, in stable order, each with a JSON Pointer `pointer`, a `detail` explanation, and the machine-readable `kind`; members may also carry allowed keys/values, relocation hints, and did-you-mean suggestions. `errorsTotal` counts the errors found, these included, up to its `maximum`: every error is listed when `errorsTruncated` is absent or `errorsTotal` equals the number of members.",
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "type",
          "pointer",
          "detail",
          "kind"
        ],
        "properties": {
          "type": {
            "type": "string",
            "format": "uri",
            "description": "Problem type URI for this member (https://blinkpdf.io/errors/validation_failed)."
          },
          "pointer": {
            "type": "string",
            "description": "RFC 6901 JSON Pointer to the offending field, fragment-prefixed (`#/pageSize`, `#/margins/top`)."
          },
          "detail": {
            "type": "string",
            "description": "Human-readable explanation of this field-level violation."
          },
          "property": {
            "type": "string"
          },
          "kind": {
            "type": "string",
            "enum": [
              "additional_property",
              "missing_property",
              "invalid_value",
              "constraint"
            ]
          },
          "allowedKeys": {
            "$ref": "#/$defs/Problem.validation_failed.errors.item.allowedKeys"
          },
          "allowedValues": {
            "$ref": "#/$defs/Problem.validation_failed.errors.item.allowedKeys"
          },
          "requiredKeys": {
            "$ref": "#/$defs/Problem.validation_failed.errors.item.allowedKeys"
          },
          "variants": {
            "type": "array",
            "description": "Accepted variant shapes when the failing value is an object-valued union. Each entry publishes only when?/keys/required/enums — never the internal numericRanges.",
            "items": {
              "type": "object",
              "required": [
                "keys",
                "required"
              ],
              "properties": {
                "when": {
                  "type": "object",
                  "description": "Discriminant when a required key pins a single literal (`{ kind: \"grid\" }`).",
                  "properties": {
                    "key": {
                      "type": "string"
                    },
                    "value": {
                      "type": "string"
                    }
                  }
                },
                "keys": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "description": "All keys this variant accepts."
                },
                "required": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "description": "Keys this variant requires."
                },
                "enums": {
                  "type": "object",
                  "description": "Allowed literal values per enum-valued key inside this variant. Additional properties are string arrays. Internal numericRanges are never published.",
                  "properties": {},
                  "additionalProperties": {
                    "$ref": "#/$defs/Problem.validation_failed.errors.item.allowedKeys"
                  }
                }
              }
            }
          },
          "relocate": {
            "$ref": "#/$defs/Problem.validation_failed.errors.item.relocate"
          },
          "relocateCandidates": {
            "type": "array",
            "description": "Additional relocation targets when the property name appears in multiple schema branches.",
            "items": {
              "$ref": "#/$defs/Problem.validation_failed.errors.item.relocate"
            }
          },
          "didYouMean": {
            "type": "array",
            "description": "Near-miss suggestions. Each entry carries exactly one of `key` (a misspelled property name) or `value` (a bad enum/literal value), plus an optional `index` pinpointing the OR-array element it corrects.",
            "items": {
              "$ref": "#/$defs/Error.google_font_not_found.didYouMean.item"
            }
          },
          "appliesTo": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Node types where the rejected `rules[].set` property is valid, present when it is valid for some other type, so an agent can switch the selected type without parsing the message."
          },
          "truncatedSegment": {
            "type": "object",
            "required": [
              "prefix",
              "length"
            ],
            "description": "Present when the pointer was too long to fit the response byte cap: `pointer` names the real object that holds this key, whose name was cut; the fault is at or under that key, and `detail` names its length.",
            "properties": {
              "prefix": {
                "type": "string",
                "description": "The first characters (at most 32 Unicode code points, JSON Pointer escapes decoded) of the cut key."
              },
              "length": {
                "type": "integer",
                "minimum": 0,
                "description": "Full length of the cut key, in Unicode code points with JSON Pointer escapes decoded."
              }
            }
          }
        }
      }
    },
    "Problem.validation_failed.errors.item.allowedKeys": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "Problem.validation_failed.errors.item.relocate": {
      "type": "object",
      "properties": {
        "path": {
          "type": "string"
        },
        "dotPath": {
          "type": "string"
        },
        "allowedKeys": {
          "$ref": "#/$defs/Problem.validation_failed.errors.item.allowedKeys"
        }
      }
    },
    "Render.Diagnostic": {
      "description": "One entry of the actionable render diagnostic list, the element shape of the `X-Render-Diagnostics` array and of the validate `diagnostics` array: an occurrence, or an omission (it carries `omitted`). The list shows at most 10 occurrences of each code and severity, in wire order (errors, then warns, then infos; source order within each), and counts the rest of that code and severity in one omission, so its size follows the codes a document reports, not the document's size.",
      "anyOf": [
        {
          "additionalProperties": false,
          "description": "One occurrence: what the document reported at one site.",
          "type": "object",
          "required": [
            "severity",
            "code",
            "impact",
            "message",
            "help"
          ],
          "properties": {
            "severity": {
              "description": "`error` (content will be missing, e.g. an image that will not decode or fetch, or a missing glyph), `warn` (output altered or a conformance note), `info` (advisory such as a remote source or an auto-fit).",
              "type": "string",
              "enum": [
                "info",
                "warn",
                "error"
              ]
            },
            "code": {
              "description": "Stable diagnostic code (e.g. `image-fetch-failed`, `title-omitted`, `glyph-component-dropped`, `table-row-split-forced`).",
              "type": "string"
            },
            "impact": {
              "description": "What it changed in the PDF against the request, graded by BlinkPDF so no client keeps a table of codes: `content` (part of what was asked is missing, cut off, covered, or may not be read), `appearance` (everything asked is painted and readable, only its look or navigation differs: another face or cut, a smaller size, another place or page break, a decoration, link, or bookmark dropped), `none` (an advisory: the PDF is as asked). A code BlinkPDF adds later comes graded too.",
              "type": "string",
              "enum": [
                "none",
                "appearance",
                "content"
              ]
            },
            "message": {
              "description": "Human-readable, agent-actionable explanation.",
              "type": "string"
            },
            "resource": {
              "description": "Locator: the image URL or source snippet windowed to ~80 chars with a middle ellipsis (never the full asset), or for a compose layout warning the RFC 6901 fragment pointer (`#/sections/…`) of the node it names, verbatim. Absent on document-level diagnostics.",
              "type": "string"
            },
            "position": {
              "additionalProperties": false,
              "description": "Where the Markdown source the diagnostic is about starts: tells apart two occurrences that share a `resource` (two images with one URL). Absent when no Markdown span locates it: a document-level note, a furniture or compose image, or a diagnostic located by a request pointer.",
              "type": "object",
              "required": [
                "line",
                "column"
              ],
              "properties": {
                "line": {
                  "minimum": 1,
                  "description": "1-based line where the located Markdown starts.",
                  "type": "integer"
                },
                "column": {
                  "minimum": 1,
                  "description": "1-based column, in UTF-16 code units, where the located Markdown starts.",
                  "type": "integer"
                }
              }
            },
            "httpStatus": {
              "description": "HTTP status when the diagnostic stems from a remote fetch failure (`image-fetch-failed`).",
              "type": "number"
            },
            "scaleFactor": {
              "description": "Uniform downscale factor in `(0, 1)` for `image-fit-to-column`; absent otherwise.",
              "type": "number"
            },
            "effectiveDpi": {
              "description": "Effective print resolution in DPI for `image-fit-to-column` / `image-low-resolution`; absent otherwise.",
              "type": "number"
            },
            "help": {
              "description": "Reference doc deep-link for the diagnostic family (a `blinkpdf://reference/…` URI).",
              "type": "string"
            }
          }
        },
        {
          "additionalProperties": false,
          "description": "The count of the occurrences of one code and severity the list does not show, placed right after the last one it shows.",
          "type": "object",
          "required": [
            "severity",
            "code",
            "impact",
            "message",
            "help",
            "omitted"
          ],
          "properties": {
            "severity": {
              "description": "`error` (content will be missing, e.g. an image that will not decode or fetch, or a missing glyph), `warn` (output altered or a conformance note), `info` (advisory such as a remote source or an auto-fit).",
              "type": "string",
              "enum": [
                "info",
                "warn",
                "error"
              ]
            },
            "code": {
              "description": "Stable diagnostic code (e.g. `image-fetch-failed`, `title-omitted`, `glyph-component-dropped`, `table-row-split-forced`).",
              "type": "string"
            },
            "impact": {
              "description": "What it changed in the PDF against the request, graded by BlinkPDF so no client keeps a table of codes: `content` (part of what was asked is missing, cut off, covered, or may not be read), `appearance` (everything asked is painted and readable, only its look or navigation differs: another face or cut, a smaller size, another place or page break, a decoration, link, or bookmark dropped), `none` (an advisory: the PDF is as asked). A code BlinkPDF adds later comes graded too.",
              "type": "string",
              "enum": [
                "none",
                "appearance",
                "content"
              ]
            },
            "message": {
              "description": "Agent-actionable sentence: how many more occurrences of `code` the document reported than the list shows, and how to see them.",
              "type": "string"
            },
            "help": {
              "description": "Reference doc deep-link for the diagnostic family (a `blinkpdf://reference/…` URI).",
              "type": "string"
            },
            "omitted": {
              "minimum": 1,
              "description": "Occurrences of `code` at `severity` past the first 10 the list shows; they count toward the render status and the document `impact` like the listed ones.",
              "type": "integer"
            }
          }
        }
      ]
    },
    "Render.ValidateOk.results.item.anyOf0.typography.assignments": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "role",
          "family"
        ],
        "properties": {
          "role": {
            "type": "string"
          },
          "family": {
            "type": "string"
          }
        }
      }
    },
    "Render.ValidateOk.results.item.anyOf0.typographyNotes": {
      "description": "Informational typography notes: `variant_collapsed` when a variantMap flattens bold onto regular, `weight_not_in_fetch` when a weight the request names is not in its Google Fonts URL (`appearance` for a weight a compose text names, which paints the nearest fetched cut), `weight_unavailable` when Google does not serve a cut the request named and the nearest cut of the family replaces it (the same note a render reports, `impact` `appearance`), `role_cuts_unavailable` when a used named role is bound to a hosted family that publishes no cuts for it, `heading_variant_dropped` when `typography.headingVariant` is set and a Google Fonts family or an uploaded font owns heading, `line_height_capped` when a Google Fonts family or an uploaded font declares a line taller than 3 em at line height 1, or ink past 1.4 em below or 2.2 em above the baseline, or an x-height taller than 0.9 em, and is laid out within that line and window (the same note a render reports, `impact` `appearance`). Never invalidates the request.",
      "type": "array",
      "items": {
        "$ref": "#/$defs/Render.ValidateOk.results.item.anyOf0.typographyNotes.item"
      }
    },
    "Render.ValidateOk.results.item.anyOf0.typographyNotes.item": {
      "additionalProperties": false,
      "type": "object",
      "required": [
        "code",
        "impact",
        "family"
      ],
      "properties": {
        "code": {
          "description": "Informational typography diagnostic kind",
          "type": "string",
          "enum": [
            "variant_collapsed",
            "weight_not_in_fetch",
            "weight_unavailable",
            "variant_role_unknown",
            "variant_map_family_unresolved",
            "fontstack_weighted_dropped",
            "heading_variant_dropped",
            "role_cuts_unavailable",
            "google_font_axis_ignored",
            "google_font_weight_snapped",
            "line_height_capped"
          ]
        },
        "impact": {
          "description": "What the note changed in the PDF, on the impact scale of `Render.Diagnostic`: `appearance` when a cut or a line was not painted as named (`weight_unavailable`, `role_cuts_unavailable`, `heading_variant_dropped`, `line_height_capped`, `google_font_weight_snapped`, and `weight_not_in_fetch` for a weight a compose text names, which paints the nearest cut the URL fetched), `none` for an advisory on the request (`weight_not_in_fetch` for a `variantMap` weight, which is fetched all the same). A typography note never loses content.",
          "type": "string",
          "enum": [
            "none",
            "appearance"
          ]
        },
        "family": {
          "description": "Family the note applies to: its pool display name, hosted key, or the `blink://asset` handle of an uploaded font",
          "type": "string"
        },
        "weight": {
          "description": "Offending CSS weight (present for `weight_not_in_fetch` and `weight_unavailable`)",
          "type": "number"
        },
        "italic": {
          "description": "Present for `weight_unavailable` when the unserved cut is the italic one of `weight`; the upright cut of that weight was served",
          "const": true,
          "type": "boolean"
        },
        "suggestUrl": {
          "description": "For `weight_not_in_fetch`: a Google Fonts CSS2 URL (`https://fonts.googleapis.com/css2?family=…`) that declares `family` alone, with the upright weights the request fetched for it plus each missing weight, and the italic cuts it fetched (a note from a `variantMap` entry adds the italic cuts it misses). It corrects the entry of `googleFontsUrls` that declares `family`: when that entry declares no other family, put this URL in its place; otherwise keep its other families in it and declare `family` as this URL does.",
          "type": "string"
        },
        "role": {
          "description": "Unrecognized variantMap role (`variant_role_unknown`), or the named role whose cuts the hosted family lacks (`role_cuts_unavailable`)",
          "type": "string"
        },
        "didYouMean": {
          "description": "Nearest declared family names for a near-miss family (present for `variant_map_family_unresolved`)",
          "type": "array",
          "items": {
            "additionalProperties": false,
            "type": "object",
            "required": [
              "key"
            ],
            "properties": {
              "key": {
                "type": "string"
              }
            }
          }
        },
        "hint": {
          "description": "Why the note fired and how to resolve it; present on every note that advises a fix, which is every code except `variant_collapsed`, `weight_not_in_fetch`, `weight_unavailable`, and `variant_role_unknown`",
          "type": "string"
        },
        "axis": {
          "description": "Google Fonts axis tag accepted but ignored (present for `google_font_axis_ignored`), e.g. `wdth`",
          "type": "string"
        }
      }
    },
    "Row.asset_kind_mismatch": {
      "additionalProperties": false,
      "type": "object",
      "required": [
        "ok",
        "index",
        "code",
        "detail"
      ],
      "properties": {
        "ok": {
          "description": "The item failed: it has no output and spends no unit",
          "const": false,
          "type": "boolean"
        },
        "index": {
          "minimum": 0,
          "description": "Zero-based position of the item in the request `items` array",
          "type": "integer"
        },
        "clientItemId": {
          "description": "Echoed back when the request item supplied one",
          "type": "string"
        },
        "code": {
          "description": "The error code of the item",
          "const": "asset_kind_mismatch",
          "type": "string"
        },
        "detail": {
          "description": "Caller-safe explanation of the item failure",
          "type": "string"
        },
        "path": {
          "minLength": 1,
          "description": "JSON Pointer (RFC 6901) of the request member the refusal names; on a batch row, relative to its item. Never a place in the PDF: that is `pdfLocation`",
          "type": "string"
        }
      }
    },
    "Row.barcode_not_scannable": {
      "additionalProperties": false,
      "type": "object",
      "required": [
        "ok",
        "index",
        "code",
        "detail",
        "path"
      ],
      "properties": {
        "ok": {
          "description": "The item failed: it has no output and spends no unit",
          "const": false,
          "type": "boolean"
        },
        "index": {
          "minimum": 0,
          "description": "Zero-based position of the item in the request `items` array",
          "type": "integer"
        },
        "clientItemId": {
          "description": "Echoed back when the request item supplied one",
          "type": "string"
        },
        "code": {
          "description": "The error code of the item",
          "const": "barcode_not_scannable",
          "type": "string"
        },
        "detail": {
          "description": "Caller-safe explanation of the item failure",
          "type": "string"
        },
        "path": {
          "description": "JSON Pointer of the request member the error names: a body member (`/sections`), a query parameter (`/query/preview`), or a header (`/headers/x-idempotency-key`)",
          "type": "string"
        }
      }
    },
    "Row.column_widths_overflow": {
      "additionalProperties": false,
      "type": "object",
      "required": [
        "ok",
        "index",
        "code",
        "detail",
        "path"
      ],
      "properties": {
        "ok": {
          "description": "The item failed: it has no output and spends no unit",
          "const": false,
          "type": "boolean"
        },
        "index": {
          "minimum": 0,
          "description": "Zero-based position of the item in the request `items` array",
          "type": "integer"
        },
        "clientItemId": {
          "description": "Echoed back when the request item supplied one",
          "type": "string"
        },
        "code": {
          "description": "The error code of the item",
          "const": "column_widths_overflow",
          "type": "string"
        },
        "detail": {
          "description": "Caller-safe explanation of the item failure",
          "type": "string"
        },
        "path": {
          "description": "JSON Pointer of the request member the error names: a body member (`/sections`), a query parameter (`/query/preview`), or a header (`/headers/x-idempotency-key`)",
          "type": "string"
        }
      }
    },
    "Row.content_not_paginable": {
      "additionalProperties": false,
      "type": "object",
      "required": [
        "ok",
        "index",
        "code",
        "detail",
        "path"
      ],
      "properties": {
        "ok": {
          "description": "The item failed: it has no output and spends no unit",
          "const": false,
          "type": "boolean"
        },
        "index": {
          "minimum": 0,
          "description": "Zero-based position of the item in the request `items` array",
          "type": "integer"
        },
        "clientItemId": {
          "description": "Echoed back when the request item supplied one",
          "type": "string"
        },
        "code": {
          "description": "The error code of the item",
          "const": "content_not_paginable",
          "type": "string"
        },
        "detail": {
          "description": "Caller-safe explanation of the item failure",
          "type": "string"
        },
        "path": {
          "description": "JSON Pointer of the request member the error names: a body member (`/sections`), a query parameter (`/query/preview`), or a header (`/headers/x-idempotency-key`)",
          "type": "string"
        }
      }
    },
    "Row.font_embedding_prohibited": {
      "additionalProperties": false,
      "type": "object",
      "required": [
        "ok",
        "index",
        "code",
        "detail"
      ],
      "properties": {
        "ok": {
          "description": "The item failed: it has no output and spends no unit",
          "const": false,
          "type": "boolean"
        },
        "index": {
          "minimum": 0,
          "description": "Zero-based position of the item in the request `items` array",
          "type": "integer"
        },
        "clientItemId": {
          "description": "Echoed back when the request item supplied one",
          "type": "string"
        },
        "code": {
          "description": "The error code of the item",
          "const": "font_embedding_prohibited",
          "type": "string"
        },
        "detail": {
          "description": "Caller-safe explanation of the item failure",
          "type": "string"
        },
        "path": {
          "minLength": 1,
          "description": "JSON Pointer (RFC 6901) of the request member the refusal names; on a batch row, relative to its item. Never a place in the PDF: that is `pdfLocation`",
          "type": "string"
        }
      }
    },
    "Row.font_malformed": {
      "additionalProperties": false,
      "type": "object",
      "required": [
        "ok",
        "index",
        "code",
        "detail",
        "fontFault"
      ],
      "properties": {
        "ok": {
          "description": "The item failed: it has no output and spends no unit",
          "const": false,
          "type": "boolean"
        },
        "index": {
          "minimum": 0,
          "description": "Zero-based position of the item in the request `items` array",
          "type": "integer"
        },
        "clientItemId": {
          "description": "Echoed back when the request item supplied one",
          "type": "string"
        },
        "code": {
          "description": "The error code of the item",
          "const": "font_malformed",
          "type": "string"
        },
        "detail": {
          "description": "Caller-safe explanation of the item failure",
          "type": "string"
        },
        "path": {
          "minLength": 1,
          "description": "JSON Pointer (RFC 6901) of the request member the refusal names; on a batch row, relative to its item. Never a place in the PDF: that is `pdfLocation`",
          "type": "string"
        },
        "fontFault": {
          "$ref": "#/$defs/Error.font_malformed.fontFault"
        }
      }
    },
    "Row.font_source_unavailable": {
      "additionalProperties": false,
      "type": "object",
      "required": [
        "ok",
        "index",
        "code",
        "detail",
        "retryAfterSeconds"
      ],
      "properties": {
        "ok": {
          "description": "The item failed: it has no output and spends no unit",
          "const": false,
          "type": "boolean"
        },
        "index": {
          "minimum": 0,
          "description": "Zero-based position of the item in the request `items` array",
          "type": "integer"
        },
        "clientItemId": {
          "description": "Echoed back when the request item supplied one",
          "type": "string"
        },
        "code": {
          "description": "The error code of the item",
          "const": "font_source_unavailable",
          "type": "string"
        },
        "detail": {
          "description": "Caller-safe explanation of the item failure",
          "type": "string"
        },
        "retryAfterSeconds": {
          "minimum": 1,
          "description": "Whole seconds to wait before retrying, the value of the `Retry-After` header when the response is the refusal",
          "type": "integer"
        }
      }
    },
    "Row.google_font_not_found": {
      "additionalProperties": false,
      "type": "object",
      "required": [
        "ok",
        "index",
        "code",
        "detail",
        "path",
        "families"
      ],
      "properties": {
        "ok": {
          "description": "The item failed: it has no output and spends no unit",
          "const": false,
          "type": "boolean"
        },
        "index": {
          "minimum": 0,
          "description": "Zero-based position of the item in the request `items` array",
          "type": "integer"
        },
        "clientItemId": {
          "description": "Echoed back when the request item supplied one",
          "type": "string"
        },
        "code": {
          "description": "The error code of the item",
          "const": "google_font_not_found",
          "type": "string"
        },
        "detail": {
          "description": "Caller-safe explanation of the item failure",
          "type": "string"
        },
        "path": {
          "description": "JSON Pointer of the request member the error names: a body member (`/sections`), a query parameter (`/query/preview`), or a header (`/headers/x-idempotency-key`)",
          "type": "string"
        },
        "families": {
          "$ref": "#/$defs/Error.google_font_not_found.families"
        },
        "didYouMean": {
          "$ref": "#/$defs/Error.google_font_not_found.didYouMean"
        }
      }
    },
    "Row.google_font_weight_unavailable": {
      "additionalProperties": false,
      "type": "object",
      "required": [
        "ok",
        "index",
        "code",
        "detail",
        "path",
        "family",
        "weight"
      ],
      "properties": {
        "ok": {
          "description": "The item failed: it has no output and spends no unit",
          "const": false,
          "type": "boolean"
        },
        "index": {
          "minimum": 0,
          "description": "Zero-based position of the item in the request `items` array",
          "type": "integer"
        },
        "clientItemId": {
          "description": "Echoed back when the request item supplied one",
          "type": "string"
        },
        "code": {
          "description": "The error code of the item",
          "const": "google_font_weight_unavailable",
          "type": "string"
        },
        "detail": {
          "description": "Caller-safe explanation of the item failure",
          "type": "string"
        },
        "path": {
          "description": "JSON Pointer of the request member the error names: a body member (`/sections`), a query parameter (`/query/preview`), or a header (`/headers/x-idempotency-key`)",
          "type": "string"
        },
        "family": {
          "description": "The Google Fonts family that does not serve the weight",
          "type": "string"
        },
        "weight": {
          "description": "The CSS weight the family does not serve as a static cut",
          "type": "integer"
        }
      }
    },
    "Row.image_too_large": {
      "additionalProperties": false,
      "type": "object",
      "required": [
        "ok",
        "index",
        "code",
        "detail"
      ],
      "properties": {
        "ok": {
          "description": "The item failed: it has no output and spends no unit",
          "const": false,
          "type": "boolean"
        },
        "index": {
          "minimum": 0,
          "description": "Zero-based position of the item in the request `items` array",
          "type": "integer"
        },
        "clientItemId": {
          "description": "Echoed back when the request item supplied one",
          "type": "string"
        },
        "code": {
          "description": "The error code of the item",
          "const": "image_too_large",
          "type": "string"
        },
        "detail": {
          "description": "Caller-safe explanation of the item failure",
          "type": "string"
        }
      }
    },
    "Row.invalid_google_fonts_url": {
      "additionalProperties": false,
      "type": "object",
      "required": [
        "ok",
        "index",
        "code",
        "detail",
        "path"
      ],
      "properties": {
        "ok": {
          "description": "The item failed: it has no output and spends no unit",
          "const": false,
          "type": "boolean"
        },
        "index": {
          "minimum": 0,
          "description": "Zero-based position of the item in the request `items` array",
          "type": "integer"
        },
        "clientItemId": {
          "description": "Echoed back when the request item supplied one",
          "type": "string"
        },
        "code": {
          "description": "The error code of the item",
          "const": "invalid_google_fonts_url",
          "type": "string"
        },
        "detail": {
          "description": "Caller-safe explanation of the item failure",
          "type": "string"
        },
        "path": {
          "description": "JSON Pointer of the request member the error names: a body member (`/sections`), a query parameter (`/query/preview`), or a header (`/headers/x-idempotency-key`)",
          "type": "string"
        }
      }
    },
    "Row.memory_budget_exceeded": {
      "additionalProperties": false,
      "type": "object",
      "required": [
        "ok",
        "index",
        "code",
        "detail",
        "cost",
        "budget"
      ],
      "properties": {
        "ok": {
          "description": "The item failed: it has no output and spends no unit",
          "const": false,
          "type": "boolean"
        },
        "index": {
          "minimum": 0,
          "description": "Zero-based position of the item in the request `items` array",
          "type": "integer"
        },
        "clientItemId": {
          "description": "Echoed back when the request item supplied one",
          "type": "string"
        },
        "code": {
          "description": "The error code of the item",
          "const": "memory_budget_exceeded",
          "type": "string"
        },
        "detail": {
          "description": "Caller-safe explanation of the item failure",
          "type": "string"
        },
        "cost": {
          "minimum": 0,
          "description": "Bytes of memory the document or form needs reserved, as the instance memory admission prices it",
          "type": "integer"
        },
        "budget": {
          "minimum": 0,
          "description": "Bytes of memory the requests in flight may hold together on this server, and so the most one document or form may hold",
          "type": "integer"
        }
      }
    },
    "Row.memory_share_exceeded": {
      "additionalProperties": false,
      "type": "object",
      "required": [
        "ok",
        "index",
        "code",
        "detail",
        "retryAfterSeconds"
      ],
      "properties": {
        "ok": {
          "description": "The item failed: it has no output and spends no unit",
          "const": false,
          "type": "boolean"
        },
        "index": {
          "minimum": 0,
          "description": "Zero-based position of the item in the request `items` array",
          "type": "integer"
        },
        "clientItemId": {
          "description": "Echoed back when the request item supplied one",
          "type": "string"
        },
        "code": {
          "description": "The error code of the item",
          "const": "memory_share_exceeded",
          "type": "string"
        },
        "detail": {
          "description": "Caller-safe explanation of the item failure",
          "type": "string"
        },
        "retryAfterSeconds": {
          "minimum": 1,
          "description": "Whole seconds to wait before retrying, the value of the `Retry-After` header when the response is the refusal",
          "type": "integer"
        }
      }
    },
    "Row.qr_not_scannable": {
      "additionalProperties": false,
      "type": "object",
      "required": [
        "ok",
        "index",
        "code",
        "detail",
        "path"
      ],
      "properties": {
        "ok": {
          "description": "The item failed: it has no output and spends no unit",
          "const": false,
          "type": "boolean"
        },
        "index": {
          "minimum": 0,
          "description": "Zero-based position of the item in the request `items` array",
          "type": "integer"
        },
        "clientItemId": {
          "description": "Echoed back when the request item supplied one",
          "type": "string"
        },
        "code": {
          "description": "The error code of the item",
          "const": "qr_not_scannable",
          "type": "string"
        },
        "detail": {
          "description": "Caller-safe explanation of the item failure",
          "type": "string"
        },
        "path": {
          "description": "JSON Pointer of the request member the error names: a body member (`/sections`), a query parameter (`/query/preview`), or a header (`/headers/x-idempotency-key`)",
          "type": "string"
        }
      }
    },
    "Row.server_busy": {
      "additionalProperties": false,
      "type": "object",
      "required": [
        "ok",
        "index",
        "code",
        "detail",
        "retryAfterSeconds"
      ],
      "properties": {
        "ok": {
          "description": "The item failed: it has no output and spends no unit",
          "const": false,
          "type": "boolean"
        },
        "index": {
          "minimum": 0,
          "description": "Zero-based position of the item in the request `items` array",
          "type": "integer"
        },
        "clientItemId": {
          "description": "Echoed back when the request item supplied one",
          "type": "string"
        },
        "code": {
          "description": "The error code of the item",
          "const": "server_busy",
          "type": "string"
        },
        "detail": {
          "description": "Caller-safe explanation of the item failure",
          "type": "string"
        },
        "retryAfterSeconds": {
          "minimum": 1,
          "description": "Whole seconds to wait before retrying, the value of the `Retry-After` header when the response is the refusal",
          "type": "integer"
        }
      }
    },
    "Row.service_unavailable": {
      "additionalProperties": false,
      "type": "object",
      "required": [
        "ok",
        "index",
        "code",
        "detail"
      ],
      "properties": {
        "ok": {
          "description": "The item failed: it has no output and spends no unit",
          "const": false,
          "type": "boolean"
        },
        "index": {
          "minimum": 0,
          "description": "Zero-based position of the item in the request `items` array",
          "type": "integer"
        },
        "clientItemId": {
          "description": "Echoed back when the request item supplied one",
          "type": "string"
        },
        "code": {
          "description": "The error code of the item",
          "const": "service_unavailable",
          "type": "string"
        },
        "detail": {
          "description": "Caller-safe explanation of the item failure",
          "type": "string"
        }
      }
    },
    "Row.table_occupancy": {
      "additionalProperties": false,
      "type": "object",
      "required": [
        "ok",
        "index",
        "code",
        "detail",
        "path"
      ],
      "properties": {
        "ok": {
          "description": "The item failed: it has no output and spends no unit",
          "const": false,
          "type": "boolean"
        },
        "index": {
          "minimum": 0,
          "description": "Zero-based position of the item in the request `items` array",
          "type": "integer"
        },
        "clientItemId": {
          "description": "Echoed back when the request item supplied one",
          "type": "string"
        },
        "code": {
          "description": "The error code of the item",
          "const": "table_occupancy",
          "type": "string"
        },
        "detail": {
          "description": "Caller-safe explanation of the item failure",
          "type": "string"
        },
        "path": {
          "description": "JSON Pointer of the request member the error names: a body member (`/sections`), a query parameter (`/query/preview`), or a header (`/headers/x-idempotency-key`)",
          "type": "string"
        }
      }
    },
    "Row.text_row_overflow": {
      "additionalProperties": false,
      "type": "object",
      "required": [
        "ok",
        "index",
        "code",
        "detail",
        "path"
      ],
      "properties": {
        "ok": {
          "description": "The item failed: it has no output and spends no unit",
          "const": false,
          "type": "boolean"
        },
        "index": {
          "minimum": 0,
          "description": "Zero-based position of the item in the request `items` array",
          "type": "integer"
        },
        "clientItemId": {
          "description": "Echoed back when the request item supplied one",
          "type": "string"
        },
        "code": {
          "description": "The error code of the item",
          "const": "text_row_overflow",
          "type": "string"
        },
        "detail": {
          "description": "Caller-safe explanation of the item failure",
          "type": "string"
        },
        "path": {
          "description": "JSON Pointer of the request member the error names: a body member (`/sections`), a query parameter (`/query/preview`), or a header (`/headers/x-idempotency-key`)",
          "type": "string"
        }
      }
    },
    "Row.validation_failed.compose": {
      "additionalProperties": false,
      "type": "object",
      "required": [
        "ok",
        "index",
        "code",
        "detail",
        "errors",
        "schema"
      ],
      "properties": {
        "ok": {
          "description": "The item failed: it has no output and spends no unit",
          "const": false,
          "type": "boolean"
        },
        "index": {
          "minimum": 0,
          "description": "Zero-based position of the item in the request `items` array",
          "type": "integer"
        },
        "clientItemId": {
          "description": "Echoed back when the request item supplied one",
          "type": "string"
        },
        "code": {
          "description": "The error code of the item",
          "const": "validation_failed",
          "type": "string"
        },
        "detail": {
          "description": "The first field-level violation of the item, as `errors[0].detail`",
          "type": "string"
        },
        "errors": {
          "$ref": "#/$defs/Problem.validation_failed.errors"
        },
        "schema": {
          "description": "MCP resource URI for the compact per-path compose contract index (`blinkpdf://reference/compose-path-index`), on every compose and compose-validate `validation_failed`.",
          "const": "blinkpdf://reference/compose-path-index",
          "type": "string"
        },
        "errorsTruncated": {
          "type": "boolean",
          "enum": [
            true
          ],
          "description": "True when the issue-count cap dropped members, or members were dropped or compacted to satisfy the response byte cap. Only the leading errors are enriched with hints; the rest are counted into `errorsTotal`. Present exactly when `errorsTotal` is."
        },
        "errorsTotal": {
          "type": "integer",
          "minimum": 1,
          "maximum": 1024,
          "description": "Errors the validation found, of which `errors` carries the leading ones, counted up to 1024: validation stops counting there, so 1024 means at least 1024 errors. Present exactly when `errorsTruncated` is true, and never below the length of `errors`; when it is above, fix the listed errors and validate again to see the rest."
        }
      }
    }
  }
}