Skip to main content
Glama

openreadout_check

Read-onlyIdempotent

Check lab-instrument files or dataset folders for integrity: detect truncation, missing planes/parts, bad blocks, missing plate-well files, and in-progress acquisitions.

Instructions

Integrity check: ok plus findings (severity, code, message) for truncation, missing planes or parts, bad blocks; a plate folder reports missing files per well; a file still being written reports acquisition_in_progress.

Input Schema

NameRequiredDescriptionDefault
fileYesPath to the file or data-set directory.
strictNoRefuse values the file's assurance does not validate (exit_code 6). Default: the server's.
headers_onlyNoCheck headers and structure only (offsets, declared sizes and counts, missing parts): no decompression, decoding or checksums over the data.

Output Schema

NameRequiredDescriptionDefault
okYesTrue when no finding has severity `error`.
pathYesThe input file.
formatYesFormat id of the input file.
findingsYesEverything found, in the order checked.
assuranceNoWhether the file lies inside what its reader has been validated on (the same block as `info` → `assurance`). `ok` says the file is intact; `assurance` says whether its values can be trusted. Filled by the `check` command when the header can be read.
acquisitionNoPresent when the file is not finished: still being written (`in_progress`: findings about the unfinished tail are warnings and `ok` covers the complete part) or stopped before the end (`interrupted`). See `book/src/guides/lab-shares.md`.
checks_performedYesWhat was verified, in plain words, so the caller knows what "ok" covers.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changedv0.4.0
    • changedInput schema / properties / file / description
      Previous value: -"Absolute or working-directory-relative path to the file or data-set directory."New value: +"Path to the file or data-set directory."
    • removedInput schema / properties / headers_only / default
      Removed value: -false
    • changedInput schema / properties / strict / description
      Previous value: -"true: refuse (an error with exit_code 6 and a hint) values this file's assurance does not validate. Default: the server's setting (OPENREADOUT_STRICT; off)."New value: +"Refuse values the file's assurance does not validate (exit_code 6). Default: the server's."
    • changedOutput schema / $defs / Acquisition / properties / modified_ago_s / type
      Previous value: -"number"New value: +[
      +  "number",
      +  "null"
      +]
    • changedOutput schema / $defs / Acquisition / properties / window_s / type
      Previous value: -"number"New value: +[
      +  "number",
      +  "null"
      +]
  2. Changed41 schema fields changedv0.3.0
    • removedInput schema / properties / against
      Removed value: -{
      -  "description": "Compare with this second file instead (e.g. an OME-TIFF export of `file`): metadata differences, geometry, channels, physical sizes and per-plane hashes.",
      -  "type": "string"
      -}
    • addedInput schema / properties / headers_only
      Added value: +{
      +  "default": false,
      +  "description": "Check headers and structure only (offsets, declared sizes and counts, missing parts): no decompression, decoding or checksums over the data.",
      +  "type": "boolean"
      +}
    • removedInput schema / properties / ignore
      Removed value: -{
      -  "default": [],
      -  "description": "against: JSON pointers (into openreadout_info output) to leave out of the metadata diff; `*` matches one segment.",
      -  "items": {
      -    "type": "string"
      -  },
      -  "type": "array"
      -}
    • removedInput schema / properties / image
      Removed value: -{
      -  "description": "against: only this image index (in both files).",
      -  "minimum": 0,
      -  "type": "integer"
      -}
    • removedInput schema / properties / include_text
      Removed value: -{
      -  "default": false,
      -  "description": "report: keep free text from the file (sample, image and channel names, comments); the path and personal data are still replaced. Default false: only with the user's consent.",
      -  "type": "boolean"
      -}
    • removedInput schema / properties / no_pixels
      Removed value: -{
      -  "default": false,
      -  "description": "against: metadata and geometry only, no pixels.",
      -  "type": "boolean"
      -}
    • removedInput schema / properties / output
      Removed value: -{
      -  "description": "report: also write the bundle to this new local file. Default: only return it.",
      -  "type": "string"
      -}
    • removedInput schema / properties / report
      Removed value: -{
      -  "default": false,
      -  "description": "Build a privacy-reviewed diagnostic bundle for the maintainers instead (for a file that is refused, fails, or is not validated).",
      -  "type": "boolean"
      -}
    • removedInput schema / properties / select
      Removed value: -{
      -  "default": [],
      -  "description": "against: plane selection strings such as `c=0`, `z=2-5`, `t=0,3`. A second file holding only the selected planes (an export with the same selection) is matched to them in order.",
      -  "items": {
      -    "type": "string"
      -  },
      -  "type": "array"
      -}
    • removedInput schema / properties / tolerance
      Removed value: -{
      -  "description": "against: largest absolute sample difference that still counts as equal. Default: bit-identical planes (same xxh3-128).",
      -  "type": "number"
      -}
    • changedOutput schema / $defs / Acquisition / description
      Previous value: -"`acquisition` in `info`, `info --view structure`, `check` and `check --planes`: present only for\nfiles that are not finished. See `book/src/guides/lab-shares.md`."New value: +"`acquisition` in `info`, `info --view structure`, `check` and `planes`: present only for\nfiles that are not finished. See `book/src/guides/lab-shares.md`."
    • removedOutput schema / $defs / CheckReport
      Removed value: -{
      -  "description": "Output of `check`.",
      -  "properties": {
      -    "acquisition": {
      -      "anyOf": [
      -        {
      -          "$ref": "#/$defs/Acquisition"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ],
      -      "description": "Present when the file is not finished: still being written (`in_progress`: findings\nabout the unfinished tail are warnings and `ok` covers the complete part) or stopped\nbefore the end (`interrupted`). See `book/src/guides/lab-shares.md`."
      -    },
      -    "assurance": {
      -      "anyOf": [
      -        {
      -          "$ref": "#/$defs/Assurance"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ],
      -      "description": "Whether the file lies inside what its reader has been validated on (the same block as\n`info` → `assurance`). `ok` says the file is intact; `assurance` says whether its values\ncan be trusted. Filled by the `check` command when the header can be read."
      -    },
      -    "checks_performed": {
      -      "description": "What was verified, in plain words, so the caller knows what \"ok\" covers.",
      -      "items": {
      -        "type": "string"
      -      },
      -      "type": "array"
      -    },
      -    "findings": {
      -      "description": "Everything found, in the order checked.",
      -      "items": {
      -        "$ref": "#/$defs/Finding"
      -      },
      -      "type": "array"
      -    },
      -    "format": {
      -      "description": "Format id of the input file.",
      -      "type": "string"
      -    },
      -    "ok": {
      -      "description": "True when no finding has severity `error`.",
      -      "type": "boolean"
      -    },
      -    "path": {
      -      "description": "The input file.",
      -      "type": "string"
      -    }
      -  },
      -  "required": [
      -    "path",
      -    "format",
      -    "ok",
      -    "checks_performed",
      -    "findings"
      -  ],
      -  "type": "object"
      -}
    • removedOutput schema / $defs / CompareOutput
      Removed value: -{
      -  "description": "Output of `check --against`.",
      -  "properties": {
      -    "identical": {
      -      "description": "Nothing compared differs: metadata (unless skipped), geometry, channel names,\nphysical sizes and planes (within the tolerance). The exit code is 0 when true, 1\nwhen false.",
      -      "type": "boolean"
      -    },
      -    "images": {
      -      "description": "Geometry, channel-name and physical-size comparison per image index.",
      -      "items": {
      -        "$ref": "#/$defs/ImageComparison"
      -      },
      -      "type": "array"
      -    },
      -    "metadata": {
      -      "$ref": "#/$defs/MetadataComparison",
      -      "description": "The normalized-metadata diff."
      -    },
      -    "notes": {
      -      "description": "Caveats (e.g. formats that store different metadata for the same acquisition).",
      -      "items": {
      -        "type": "string"
      -      },
      -      "type": "array"
      -    },
      -    "ours": {
      -      "$ref": "#/$defs/CompareSide",
      -      "description": "The first file."
      -    },
      -    "planes": {
      -      "$ref": "#/$defs/PlaneComparison",
      -      "description": "The plane-by-plane comparison."
      -    },
      -    "theirs": {
      -      "$ref": "#/$defs/CompareSide",
      -      "description": "The second file."
      -    }
      -  },
      -  "required": [
      -    "identical",
      -    "ours",
      -    "theirs",
      -    "metadata",
      -    "images",
      -    "planes",
      -    "notes"
      -  ],
      -  "type": "object"
      -}
    • removedOutput schema / $defs / CompareSide
      Removed value: -{
      -  "description": "One file of the pair.",
      -  "properties": {
      -    "format": {
      -      "description": "Its format id.",
      -      "type": "string"
      -    },
      -    "images": {
      -      "description": "Number of images.",
      -      "format": "uint32",
      -      "minimum": 0,
      -      "type": "integer"
      -    },
      -    "path": {
      -      "description": "The file as given.",
      -      "type": "string"
      -    },
      -    "tables": {
      -      "description": "Number of tables.",
      -      "format": "uint32",
      -      "minimum": 0,
      -      "type": "integer"
      -    },
      -    "traces": {
      -      "description": "Number of traces.",
      -      "format": "uint32",
      -      "minimum": 0,
      -      "type": "integer"
      -    }
      -  },
      -  "required": [
      -    "path",
      -    "format",
      -    "images",
      -    "tables",
      -    "traces"
      -  ],
      -  "type": "object"
      -}
    • removedOutput schema / $defs / DetectionSummary
      Removed value: -{
      -  "description": "The reader that claimed the input.",
      -  "properties": {
      -    "confidence": {
      -      "description": "`definite`, `likely` or `extension_only`.",
      -      "type": "string"
      -    },
      -    "format": {
      -      "description": "Format id.",
      -      "type": "string"
      -    },
      -    "note": {
      -      "description": "Why the match is less than definite.",
      -      "type": [
      -        "string",
      -        "null"
      -      ]
      -    },
      -    "reader_confidence": {
      -      "description": "The reader's confidence level (`high`, `medium`, `low`).",
      -      "type": "string"
      -    }
      -  },
      -  "required": [
      -    "format",
      -    "confidence",
      -    "reader_confidence"
      -  ],
      -  "type": "object"
      -}
    • removedOutput schema / $defs / Difference
      Removed value: -{
      -  "description": "A value that differs, at an RFC 6901 JSON pointer into `info --json` `data`.",
      -  "properties": {
      -    "ours": {
      -      "description": "Value in the first file; absent when the first file lacks the field."
      -    },
      -    "pointer": {
      -      "description": "RFC 6901 JSON pointer to the value, e.g. `/images/0/physical_size/x`.",
      -      "type": "string"
      -    },
      -    "theirs": {
      -      "description": "Value in the second file; absent when the second file lacks the field."
      -    }
      -  },
      -  "required": [
      -    "pointer"
      -  ],
      -  "type": "object"
      -}
    • removedOutput schema / $defs / Generator
      Removed value: -{
      -  "description": "Program name and version.",
      -  "properties": {
      -    "name": {
      -      "description": "`openreadout`.",
      -      "type": "string"
      -    },
      -    "version": {
      -      "description": "Its version.",
      -      "type": "string"
      -    }
      -  },
      -  "required": [
      -    "name",
      -    "version"
      -  ],
      -  "type": "object"
      -}
    • removedOutput schema / $defs / Geometry
      Removed value: -{
      -  "description": "Geometry of one image.",
      -  "properties": {
      -    "pixel_type": {
      -      "$ref": "#/$defs/PixelType",
      -      "description": "Sample type."
      -    },
      -    "samples_per_pixel": {
      -      "description": "1 for grayscale, 3 for interleaved RGB.",
      -      "format": "uint32",
      -      "minimum": 0,
      -      "type": "integer"
      -    },
      -    "size_c": {
      -      "description": "Number of channels.",
      -      "format": "uint32",
      -      "minimum": 0,
      -      "type": "integer"
      -    },
      -    "size_t": {
      -      "description": "Number of time points.",
      -      "format": "uint32",
      -      "minimum": 0,
      -      "type": "integer"
      -    },
      -    "size_x": {
      -      "description": "Width in pixels.",
      -      "format": "uint32",
      -      "minimum": 0,
      -      "type": "integer"
      -    },
      -    "size_y": {
      -      "description": "Height in pixels.",
      -      "format": "uint32",
      -      "minimum": 0,
      -      "type": "integer"
      -    },
      -    "size_z": {
      -      "description": "Number of Z planes.",
      -      "format": "uint32",
      -      "minimum": 0,
      -      "type": "integer"
      -    }
      -  },
      -  "required": [
      -    "size_x",
      -    "size_y",
      -    "size_z",
      -    "size_c",
      -    "size_t",
      -    "pixel_type",
      -    "samples_per_pixel"
      -  ],
      -  "type": "object"
      -}
    • removedOutput schema / $defs / HexSample
      Removed value: -{
      -  "description": "A hex excerpt.",
      -  "properties": {
      -    "at": {
      -      "description": "`head` or the structure entry (`kind name`).",
      -      "type": "string"
      -    },
      -    "hex": {
      -      "description": "Space-separated bytes; masked text bytes are `__`.",
      -      "type": "string"
      -    },
      -    "offset": {
      -      "description": "Byte offset.",
      -      "format": "uint64",
      -      "minimum": 0,
      -      "type": "integer"
      -    }
      -  },
      -  "required": [
      -    "at",
      -    "offset",
      -    "hex"
      -  ],
      -  "type": "object"
      -}
    • removedOutput schema / $defs / ImageComparison
      Removed value: -{
      -  "description": "One image index present in either file.",
      -  "properties": {
      -    "channel_names_equal": {
      -      "description": "Channel names agree.",
      -      "type": "boolean"
      -    },
      -    "geometry_equal": {
      -      "description": "Both files have the image and their geometries agree (with `selected`, after the\nselection).",
      -      "type": "boolean"
      -    },
      -    "image": {
      -      "description": "Image index.",
      -      "format": "uint32",
      -      "minimum": 0,
      -      "type": "integer"
      -    },
      -    "ours": {
      -      "anyOf": [
      -        {
      -          "$ref": "#/$defs/Geometry"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ],
      -      "description": "Absent when the first file has no image with this index."
      -    },
      -    "ours_channels": {
      -      "description": "Channel names of the first file (listed only when they differ).",
      -      "items": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "type": "array"
      -    },
      -    "ours_physical_size": {
      -      "anyOf": [
      -        {
      -          "$ref": "#/$defs/PhysicalSize"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ],
      -      "description": "Physical pixel size in the first file (listed only when the sizes differ)."
      -    },
      -    "physical_size_equal": {
      -      "description": "Physical sizes agree to a relative 1e-6 (both absent counts as equal).",
      -      "type": "boolean"
      -    },
      -    "selected": {
      -      "description": "The second file holds only the selected planes of this image (an export made with the\nsame selection): planes, channels and the metadata diff were matched in selection\norder, and `ours` is the geometry after the selection.",
      -      "type": "boolean"
      -    },
      -    "theirs": {
      -      "anyOf": [
      -        {
      -          "$ref": "#/$defs/Geometry"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ],
      -      "description": "Absent when the second file has no image with this index."
      -    },
      -    "theirs_channels": {
      -      "description": "Channel names of the second file (listed only when they differ).",
      -      "items": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "type": "array"
      -    },
      -    "theirs_physical_size": {
      -      "anyOf": [
      -        {
      -          "$ref": "#/$defs/PhysicalSize"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ],
      -      "description": "Physical pixel size in the second file (listed only when the sizes differ)."
      -    }
      -  },
      -  "required": [
      -    "image",
      -    "geometry_equal",
      -    "channel_names_equal",
      -    "ours_channels",
      -    "theirs_channels",
      -    "physical_size_equal"
      -  ],
      -  "type": "object"
      -}
    • removedOutput schema / $defs / InputSummary
      Removed value: -{
      -  "description": "The input without its name.",
      -  "properties": {
      -    "extension": {
      -      "description": "Lower-case extension without the dot (`nd2`, `raw`, `d`), when there is one.",
      -      "type": [
      -        "string",
      -        "null"
      -      ]
      -    },
      -    "kind": {
      -      "description": "`file` or `directory`.",
      -      "type": "string"
      -    },
      -    "member_extensions": {
      -      "additionalProperties": {
      -        "format": "uint64",
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "description": "Member counts per extension.",
      -      "type": "object"
      -    },
      -    "members": {
      -      "description": "A directory's members: relative paths with names that are not plain tokens replaced.",
      -      "items": {
      -        "$ref": "#/$defs/Member"
      -      },
      -      "type": "array"
      -    },
      -    "members_omitted": {
      -      "description": "Members not listed (more than 2000).",
      -      "format": "uint64",
      -      "minimum": 0,
      -      "type": "integer"
      -    },
      -    "sha256": {
      -      "description": "SHA-256 of the whole file (files up to 1 GiB).",
      -      "type": [
      -        "string",
      -        "null"
      -      ]
      -    },
      -    "sha256_first_64mib": {
      -      "description": "SHA-256 of the first 64 MiB (larger files).",
      -      "type": [
      -        "string",
      -        "null"
      -      ]
      -    },
      -    "signature_hex": {
      -      "description": "The first 16 bytes in hex; printable runs that are not a plain token are masked (`__`).",
      -      "type": [
      -        "string",
      -        "null"
      -      ]
      -    },
      -    "signature_text": {
      -      "description": "The same bytes as text where they are a plain token (`ZISRAWFILE`, `ABF2`).",
      -      "type": [
      -        "string",
      -        "null"
      -      ]
      -    },
      -    "size_bytes": {
      -      "description": "Bytes (a directory: the sum over its members).",
      -      "format": "uint64",
      -      "minimum": 0,
      -      "type": "integer"
      -    },
      -    "text_like": {
      -      "description": "The file looks like text (a delimited export, XML, JSON).",
      -      "type": "boolean"
      -    }
      -  },
      -  "required": [
      -    "kind",
      -    "size_bytes"
      -  ],
      -  "type": "object"
      -}
    • removedOutput schema / $defs / Integrity
      Removed value: -{
      -  "description": "Integrity findings.",
      -  "properties": {
      -    "checks_performed": {
      -      "description": "What was verified.",
      -      "items": {
      -        "type": "string"
      -      },
      -      "type": "array"
      -    },
      -    "findings": {
      -      "description": "Findings: severity, code, message (scrubbed), offset.",
      -      "items": true,
      -      "type": "array"
      -    },
      -    "mode": {
      -      "description": "`headers` (`check --headers-only`) or `full`.",
      -      "type": "string"
      -    },
      -    "ok": {
      -      "description": "No finding of severity error.",
      -      "type": "boolean"
      -    }
      -  },
      -  "required": [
      -    "mode",
      -    "ok",
      -    "checks_performed",
      -    "findings"
      -  ],
      -  "type": "object"
      -}
    • removedOutput schema / $defs / KindCount
      Removed value: -{
      -  "description": "Count and bytes of one entry kind.",
      -  "properties": {
      -    "bytes": {
      -      "description": "Their total size, where sizes are known.",
      -      "format": "uint64",
      -      "minimum": 0,
      -      "type": "integer"
      -    },
      -    "count": {
      -      "description": "How many.",
      -      "format": "uint64",
      -      "minimum": 0,
      -      "type": "integer"
      -    },
      -    "kind": {
      -      "description": "Entry kind.",
      -      "type": "string"
      -    }
      -  },
      -  "required": [
      -    "kind",
      -    "count",
      -    "bytes"
      -  ],
      -  "type": "object"
      -}
    • removedOutput schema / $defs / Member
      Removed value: -{
      -  "description": "One member of a directory data set.",
      -  "properties": {
      -    "path": {
      -      "description": "Path relative to the data set, `/`-separated.",
      -      "type": "string"
      -    },
      -    "size": {
      -      "description": "Bytes.",
      -      "format": "uint64",
      -      "minimum": 0,
      -      "type": "integer"
      -    }
      -  },
      -  "required": [
      -    "path",
      -    "size"
      -  ],
      -  "type": "object"
      -}
    • removedOutput schema / $defs / MetadataComparison
      Removed value: -{
      -  "description": "The normalized-metadata diff.",
      -  "properties": {
      -    "compared": {
      -      "description": "False with `--no-metadata`.",
      -      "type": "boolean"
      -    },
      -    "difference_count": {
      -      "description": "Total number of differences (the list holds at most 1000).",
      -      "format": "uint64",
      -      "minimum": 0,
      -      "type": "integer"
      -    },
      -    "differences": {
      -      "description": "The differences, at most 1000.",
      -      "items": {
      -        "$ref": "#/$defs/Difference"
      -      },
      -      "type": "array"
      -    },
      -    "equal": {
      -      "description": "True when no difference was found.",
      -      "type": "boolean"
      -    },
      -    "ignored": {
      -      "description": "Pointers left out (defaults plus `--ignore`); `extra` objects are also left out unless\n`include_extra`.",
      -      "items": {
      -        "type": "string"
      -      },
      -      "type": "array"
      -    },
      -    "include_extra": {
      -      "description": "Whether `extra` objects were compared.",
      -      "type": "boolean"
      -    }
      -  },
      -  "required": [
      -    "compared",
      -    "equal",
      -    "ignored",
      -    "include_extra",
      -    "difference_count",
      -    "differences"
      -  ],
      -  "type": "object"
      -}
    • removedOutput schema / $defs / PhysicalSize
      Removed value: -{
      -  "description": "Physical pixel size in micrometres (the OME default unit). Every present value is > 0.",
      -  "properties": {
      -    "unit": {
      -      "description": "Always `µm` in this schema version.",
      -      "type": "string"
      -    },
      -    "x": {
      -      "description": "Pixel width in µm (the distance between neighbouring columns).",
      -      "format": "double",
      -      "type": [
      -        "number",
      -        "null"
      -      ]
      -    },
      -    "y": {
      -      "description": "Pixel height in µm (the distance between neighbouring rows).",
      -      "format": "double",
      -      "type": [
      -        "number",
      -        "null"
      -      ]
      -    },
      -    "z": {
      -      "description": "Spacing between Z planes (focal slices) in µm.",
      -      "format": "double",
      -      "type": [
      -        "number",
      -        "null"
      -      ]
      -    }
      -  },
      -  "required": [
      -    "unit"
      -  ],
      -  "type": "object"
      -}
    • removedOutput schema / $defs / PixelType
      Removed value: -{
      -  "description": "Sample type of one channel value. Names follow OME-XML `PixelType` values.",
      -  "oneOf": [
      -    {
      -      "const": "int8",
      -      "description": "Signed 8-bit integer.",
      -      "type": "string"
      -    },
      -    {
      -      "const": "int16",
      -      "description": "Signed 16-bit integer.",
      -      "type": "string"
      -    },
      -    {
      -      "const": "int32",
      -      "description": "Signed 32-bit integer.",
      -      "type": "string"
      -    },
      -    {
      -      "const": "uint8",
      -      "description": "Unsigned 8-bit integer.",
      -      "type": "string"
      -    },
      -    {
      -      "const": "uint16",
      -      "description": "Unsigned 16-bit integer (the usual microscope camera output).",
      -      "type": "string"
      -    },
      -    {
      -      "const": "uint32",
      -      "description": "Unsigned 32-bit integer.",
      -      "type": "string"
      -    },
      -    {
      -      "const": "float",
      -      "description": "32-bit IEEE 754 floating point.",
      -      "type": "string"
      -    },
      -    {
      -      "const": "double",
      -      "description": "64-bit IEEE 754 floating point.",
      -      "type": "string"
      -    },
      -    {
      -      "const": "int64",
      -      "description": "Signed 64-bit integer.",
      -      "type": "string"
      -    },
      -    {
      -      "const": "uint64",
      -      "description": "Unsigned 64-bit integer.",
      -      "type": "string"
      -    },
      -    {
      -      "const": "complex",
      -      "description": "Complex number of two 32-bit floats (real, then imaginary): OME `complex`.",
      -      "type": "string"
      -    },
      -    {
      -      "const": "double-complex",
      -      "description": "Complex number of two 64-bit floats (real, then imaginary): OME `double-complex`.",
      -      "type": "string"
      -    }
      -  ]
      -}
    • removedOutput schema / $defs / PlaneComparison
      Removed value: -{
      -  "description": "Plane-by-plane comparison.",
      -  "properties": {
      -    "compared": {
      -      "description": "False with `--no-pixels`.",
      -      "type": "boolean"
      -    },
      -    "identical": {
      -      "description": "Planes with identical xxh3-128.",
      -      "format": "uint64",
      -      "minimum": 0,
      -      "type": "integer"
      -    },
      -    "mismatched": {
      -      "description": "Planes that differ beyond the tolerance (or at all, without one).",
      -      "format": "uint64",
      -      "minimum": 0,
      -      "type": "integer"
      -    },
      -    "mismatches": {
      -      "description": "At most 1000 entries, in plane order.",
      -      "items": {
      -        "$ref": "#/$defs/PlaneMismatch"
      -      },
      -      "type": "array"
      -    },
      -    "planes": {
      -      "description": "Planes read from both files.",
      -      "format": "uint64",
      -      "minimum": 0,
      -      "type": "integer"
      -    },
      -    "skipped_images": {
      -      "description": "Image indices not compared plane by plane (missing on one side or geometry differs).",
      -      "items": {
      -        "format": "uint32",
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "type": "array"
      -    },
      -    "tolerance": {
      -      "description": "The `--tolerance` used, if any.",
      -      "format": "double",
      -      "type": [
      -        "number",
      -        "null"
      -      ]
      -    },
      -    "within_tolerance": {
      -      "description": "Planes that differ but within the tolerance.",
      -      "format": "uint64",
      -      "minimum": 0,
      -      "type": "integer"
      -    }
      -  },
      -  "required": [
      -    "compared",
      -    "planes",
      -    "identical",
      -    "within_tolerance",
      -    "mismatched",
      -    "skipped_images",
      -    "mismatches"
      -  ],
      -  "type": "object"
      -}
    • removedOutput schema / $defs / PlaneMismatch
      Removed value: -{
      -  "description": "A plane that differs.",
      -  "properties": {
      -    "c": {
      -      "description": "Channel index.",
      -      "format": "uint32",
      -      "minimum": 0,
      -      "type": "integer"
      -    },
      -    "differing_samples": {
      -      "description": "Samples that differ (absent when the planes' shapes differ).",
      -      "format": "uint64",
      -      "minimum": 0,
      -      "type": [
      -        "integer",
      -        "null"
      -      ]
      -    },
      -    "image": {
      -      "description": "Image index.",
      -      "format": "uint32",
      -      "minimum": 0,
      -      "type": "integer"
      -    },
      -    "max_abs_diff": {
      -      "description": "Largest absolute difference between corresponding samples.",
      -      "format": "double",
      -      "type": [
      -        "number",
      -        "null"
      -      ]
      -    },
      -    "note": {
      -      "description": "Why the samples could not be compared (e.g. the plane shapes differ).",
      -      "type": [
      -        "string",
      -        "null"
      -      ]
      -    },
      -    "ours_xxh3": {
      -      "description": "xxh3-128 of the plane in the first file.",
      -      "type": "string"
      -    },
      -    "t": {
      -      "description": "Time index.",
      -      "format": "uint32",
      -      "minimum": 0,
      -      "type": "integer"
      -    },
      -    "theirs_xxh3": {
      -      "description": "xxh3-128 of the plane in the second file.",
      -      "type": "string"
      -    },
      -    "within_tolerance": {
      -      "description": "With a tolerance: whether `max_abs_diff` is within it (then the plane counts as equal).",
      -      "type": "boolean"
      -    },
      -    "z": {
      -      "description": "Z index.",
      -      "format": "uint32",
      -      "minimum": 0,
      -      "type": "integer"
      -    }
      -  },
      -  "required": [
      -    "image",
      -    "c",
      -    "z",
      -    "t",
      -    "ours_xxh3",
      -    "theirs_xxh3",
      -    "within_tolerance"
      -  ],
      -  "type": "object"
      -}
    • removedOutput schema / $defs / Privacy
      Removed value: -{
      -  "description": "The privacy statement of a bundle.",
      -  "properties": {
      -    "excluded": {
      -      "description": "What it leaves out.",
      -      "items": {
      -        "type": "string"
      -      },
      -      "type": "array"
      -    },
      -    "included": {
      -      "description": "What the bundle contains, in plain words.",
      -      "items": {
      -        "type": "string"
      -      },
      -      "type": "array"
      -    },
      -    "mode": {
      -      "description": "`structure_only` (default) or `with_text` (`--include-text`).",
      -      "type": "string"
      -    },
      -    "personal_data": {
      -      "description": "Personal-data flags (kind and rule, never the value) found in the metadata.",
      -      "items": {
      -        "type": "string"
      -      },
      -      "type": "array"
      -    },
      -    "redacted_strings": {
      -      "description": "Distinct strings from the file replaced by `<redacted-N>` or `<text:LEN>` placeholders.",
      -      "format": "uint32",
      -      "minimum": 0,
      -      "type": "integer"
      -    }
      -  },
      -  "required": [
      -    "mode",
      -    "included",
      -    "excluded",
      -    "redacted_strings"
      -  ],
      -  "type": "object"
      -}
    • removedOutput schema / $defs / Report
      Removed value: -{
      -  "description": "The diagnostic bundle.",
      -  "properties": {
      -    "assurance": {
      -      "anyOf": [
      -        {
      -          "$ref": "#/$defs/Assurance"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ],
      -      "description": "The assurance block (`info` → `assurance`), text scrubbed."
      -    },
      -    "candidates": {
      -      "description": "Readers registered for the input's extension (what the user probably expected).",
      -      "items": {
      -        "type": "string"
      -      },
      -      "type": "array"
      -    },
      -    "detection": {
      -      "anyOf": [
      -        {
      -          "$ref": "#/$defs/DetectionSummary"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ],
      -      "description": "The reader that claimed the input, when one did."
      -    },
      -    "generator": {
      -      "$ref": "#/$defs/Generator",
      -      "description": "The program that wrote it."
      -    },
      -    "input": {
      -      "$ref": "#/$defs/InputSummary",
      -      "description": "The input, without its name or path."
      -    },
      -    "integrity": {
      -      "anyOf": [
      -        {
      -          "$ref": "#/$defs/Integrity"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ],
      -      "description": "Integrity findings (`check`)."
      -    },
      -    "metadata": {
      -      "description": "The normalized metadata (`info`) with numbers kept and free text replaced."
      -    },
      -    "privacy": {
      -      "$ref": "#/$defs/Privacy",
      -      "description": "What the bundle contains and leaves out; read before sharing."
      -    },
      -    "report_version": {
      -      "description": "Bundle layout version ([`REPORT_VERSION`]).",
      -      "type": "string"
      -    },
      -    "samples": {
      -      "description": "Hex excerpts (only with `hex_bytes`).",
      -      "items": {
      -        "$ref": "#/$defs/HexSample"
      -      },
      -      "type": "array"
      -    },
      -    "stages": {
      -      "description": "The decode path: each stage in order with its result.",
      -      "items": {
      -        "$ref": "#/$defs/Stage"
      -      },
      -      "type": "array"
      -    },
      -    "structure": {
      -      "anyOf": [
      -        {
      -          "$ref": "#/$defs/StructureMap"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ],
      -      "description": "The container's structure (`info --view structure`)."
      -    },
      -    "vendor_keys": {
      -      "anyOf": [
      -        {
      -          "$ref": "#/$defs/VendorKeys"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ],
      -      "description": "Key skeleton of the vendor metadata tree (`info --view full` → `vendor`): paths and value\ntypes."
      -    }
      -  },
      -  "required": [
      -    "report_version",
      -    "generator",
      -    "privacy",
      -    "input",
      -    "stages"
      -  ],
      -  "type": "object"
      -}
    • removedOutput schema / $defs / ReportOutput
      Removed value: -{
      -  "description": "What `openreadout check FILE --report` prints under `--json`.",
      -  "properties": {
      -    "bytes": {
      -      "description": "Size of the written bundle.",
      -      "format": "uint64",
      -      "minimum": 0,
      -      "type": [
      -        "integer",
      -        "null"
      -      ]
      -    },
      -    "issue_url": {
      -      "description": "Where to file it (never contacted by the program).",
      -      "type": "string"
      -    },
      -    "output": {
      -      "description": "Where the bundle was written; `None` with `--dry-run` (or from MCP without `output`).",
      -      "type": [
      -        "string",
      -        "null"
      -      ]
      -    },
      -    "report": {
      -      "$ref": "#/$defs/Report",
      -      "description": "The bundle, exactly as written."
      -    }
      -  },
      -  "required": [
      -    "issue_url",
      -    "report"
      -  ],
      -  "type": "object"
      -}
    • changedOutput schema / $defs / Scope / oneOf
      Previous value: -[
      -  {
      -    "const": "metadata",
      -    "description": "The normalized metadata (`info`, all its views): sizes, channels, instrument, times.",
      -    "type": "string"
      -  },
      -  {
      -    "const": "pixels",
      -    "description": "Image planes (`check --planes`, `stats`, `export` of images, `preview`).",
      -    "type": "string"
      -  },
      -  {
      -    "const": "spectra",
      -    "description": "Mass spectra and scan headers (`spectra`, `analyze chromatogram`, mzML export).",
      -    "type": "string"
      -  },
      -  {
      -    "const": "traces",
      -    "description": "Sampled signals (`trace`, electrophysiology, chromatograms, NMR and IR/Raman spectra).",
      -    "type": "string"
      -  },
      -  {
      -    "const": "tables",
      -    "description": "Tables (FCS events, plate reads, qPCR results, event and peak tables).",
      -    "type": "string"
      -  }
      -]New value: +[
      +  {
      +    "const": "metadata",
      +    "description": "The normalized metadata (`info`, all its views): sizes, channels, instrument, times.",
      +    "type": "string"
      +  },
      +  {
      +    "const": "pixels",
      +    "description": "Image planes (`planes`, `stats`, `export` of images, `preview`).",
      +    "type": "string"
      +  },
      +  {
      +    "const": "spectra",
      +    "description": "Mass spectra and scan headers (`scans`, `spectrum`, `analyze chromatogram`, mzML export).",
      +    "type": "string"
      +  },
      +  {
      +    "const": "traces",
      +    "description": "Sampled signals (`trace`, electrophysiology, chromatograms, NMR and IR/Raman spectra).",
      +    "type": "string"
      +  },
      +  {
      +    "const": "tables",
      +    "description": "Tables (FCS events, plate reads, qPCR results, event and peak tables).",
      +    "type": "string"
      +  }
      +]
    • removedOutput schema / $defs / Stage
      Removed value: -{
      -  "description": "One stage of the decode path.",
      -  "properties": {
      -    "detail": {
      -      "description": "What the stage found, in a few words (`12 entries`, `plane 512x512 uint16`).",
      -      "type": [
      -        "string",
      -        "null"
      -      ]
      -    },
      -    "elapsed_ms": {
      -      "description": "Milliseconds the stage took.",
      -      "format": "uint64",
      -      "minimum": 0,
      -      "type": [
      -        "integer",
      -        "null"
      -      ]
      -    },
      -    "error": {
      -      "anyOf": [
      -        {
      -          "$ref": "#/$defs/StageError"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ],
      -      "description": "The error, when the stage failed."
      -    },
      -    "stage": {
      -      "description": "`detect`, `open`, `info`, `assurance`, `ls`, `check`, `vendor`, `first_read`.",
      -      "type": "string"
      -    },
      -    "status": {
      -      "description": "`ok`, `error`, `skipped` or `panic` (a bug: the reader crashed in this stage).",
      -      "type": "string"
      -    }
      -  },
      -  "required": [
      -    "stage",
      -    "status"
      -  ],
      -  "type": "object"
      -}
    • removedOutput schema / $defs / StageError
      Removed value: -{
      -  "description": "An error as the CLI would report it, text scrubbed.",
      -  "properties": {
      -    "code": {
      -      "description": "Stable code (`corrupt_file`, `unsupported_feature`, ...).",
      -      "type": "string"
      -    },
      -    "exit_code": {
      -      "description": "Process exit code the CLI would return.",
      -      "format": "int32",
      -      "type": "integer"
      -    },
      -    "hint": {
      -      "description": "The hint.",
      -      "type": [
      -        "string",
      -        "null"
      -      ]
      -    },
      -    "message": {
      -      "description": "The message.",
      -      "type": "string"
      -    },
      -    "offset": {
      -      "description": "Byte offset of the problem, when the reader knows it.",
      -      "format": "uint64",
      -      "minimum": 0,
      -      "type": [
      -        "integer",
      -        "null"
      -      ]
      -    }
      -  },
      -  "required": [
      -    "code",
      -    "exit_code",
      -    "message"
      -  ],
      -  "type": "object"
      -}
    • removedOutput schema / $defs / StructureMap
      Removed value: -{
      -  "description": "The container's structure.",
      -  "properties": {
      -    "by_kind": {
      -      "description": "Count and bytes per entry kind.",
      -      "items": {
      -        "$ref": "#/$defs/KindCount"
      -      },
      -      "type": "array"
      -    },
      -    "entries": {
      -      "description": "The first 400 entries in file order.",
      -      "items": true,
      -      "type": "array"
      -    },
      -    "entries_total": {
      -      "description": "Entries `info --view structure` lists.",
      -      "format": "uint64",
      -      "minimum": 0,
      -      "type": "integer"
      -    }
      -  },
      -  "required": [
      -    "entries_total",
      -    "by_kind",
      -    "entries"
      -  ],
      -  "type": "object"
      -}
    • removedOutput schema / $defs / VendorKeys
      Removed value: -{
      -  "description": "Key skeleton of the vendor tree.",
      -  "properties": {
      -    "omitted": {
      -      "description": "Paths not listed (beyond 3000).",
      -      "format": "uint64",
      -      "minimum": 0,
      -      "type": "integer"
      -    },
      -    "paths": {
      -      "description": "`path`, value `type` (`string`, `number`, `bool`, `null`, `object`, `array`), `count`.",
      -      "items": {
      -        "$ref": "#/$defs/VendorPath"
      -      },
      -      "type": "array"
      -    },
      -    "total_paths": {
      -      "description": "Distinct key paths (array indices folded to `[]`).",
      -      "format": "uint64",
      -      "minimum": 0,
      -      "type": "integer"
      -    }
      -  },
      -  "required": [
      -    "total_paths",
      -    "paths"
      -  ],
      -  "type": "object"
      -}
    • removedOutput schema / $defs / VendorPath
      Removed value: -{
      -  "description": "One vendor key path.",
      -  "properties": {
      -    "count": {
      -      "description": "Occurrences.",
      -      "format": "uint64",
      -      "minimum": 0,
      -      "type": "integer"
      -    },
      -    "path": {
      -      "description": "Dotted key path, arrays as `[]`.",
      -      "type": "string"
      -    },
      -    "type": {
      -      "description": "JSON type of the values (several joined by `|`).",
      -      "type": "string"
      -    }
      -  },
      -  "required": [
      -    "path",
      -    "type",
      -    "count"
      -  ],
      -  "type": "object"
      -}
    • removedOutput schema / anyOf
      Removed value: -[
      -  {
      -    "$ref": "#/$defs/CheckReport",
      -    "description": "The integrity check."
      -  },
      -  {
      -    "$ref": "#/$defs/CompareOutput",
      -    "description": "against: the comparison."
      -  },
      -  {
      -    "$ref": "#/$defs/ReportOutput",
      -    "description": "report: the diagnostic bundle."
      -  }
      -]
    • addedOutput schema / properties
      Added value: +{
      +  "acquisition": {
      +    "anyOf": [
      +      {
      +        "$ref": "#/$defs/Acquisition"
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ],
      +    "description": "Present when the file is not finished: still being written (`in_progress`: findings\nabout the unfinished tail are warnings and `ok` covers the complete part) or stopped\nbefore the end (`interrupted`). See `book/src/guides/lab-shares.md`."
      +  },
      +  "assurance": {
      +    "anyOf": [
      +      {
      +        "$ref": "#/$defs/Assurance"
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ],
      +    "description": "Whether the file lies inside what its reader has been validated on (the same block as\n`info` → `assurance`). `ok` says the file is intact; `assurance` says whether its values\ncan be trusted. Filled by the `check` command when the header can be read."
      +  },
      +  "checks_performed": {
      +    "description": "What was verified, in plain words, so the caller knows what \"ok\" covers.",
      +    "items": {
      +      "type": "string"
      +    },
      +    "type": "array"
      +  },
      +  "findings": {
      +    "description": "Everything found, in the order checked.",
      +    "items": {
      +      "$ref": "#/$defs/Finding"
      +    },
      +    "type": "array"
      +  },
      +  "format": {
      +    "description": "Format id of the input file.",
      +    "type": "string"
      +  },
      +  "ok": {
      +    "description": "True when no finding has severity `error`.",
      +    "type": "boolean"
      +  },
      +  "path": {
      +    "description": "The input file.",
      +    "type": "string"
      +  }
      +}
    • addedOutput schema / required
      Added value: +[
      +  "path",
      +  "format",
      +  "ok",
      +  "checks_performed",
      +  "findings"
      +]
  3. First observedv0.1.0

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the bar is lower, and the description adds real behavioral detail: the shape of findings (severity, code, message), the plate-folder per-well reporting mode, and the acquisition_in_progress special case. It does not explain the strict/exit_code 6 behavior that only the schema hints at.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence that front-loads the outcome (ok plus findings) before enumerating detection categories. No filler, though the semicolon-chained clauses make it slightly harder to parse than it needs to be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, yet the description still usefully summarizes the finding structure and the folder-mode behavior. Complete enough to call correctly; the only gap is sibling differentiation and strict-mode behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all three parameters are already documented, making 3 the baseline. The description adds only slight context (a directory argument triggers per-well reporting) and does not elaborate on strict or headers_only semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action (integrity check) on a specific resource (file/data-set directory) and enumerates what it detects: truncation, missing planes or parts, bad blocks. An agent can tell it is a damage check, but the description never distinguishes it from the similarly-scoped sibling openreadout_health.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the content: the tool is for verifying file/folder integrity. There is no explicit when-to-use statement, no when-not-to, and no routing to alternatives such as openreadout_info or openreadout_health.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.