///|
/// Capture private worker bytes under the same aggregate limit as file import.
/// The shared reader owns tree layout, version and semantic validation.
fn inspect_tree(request : Json) -> @data.CheckpointInspection raise {
  let entries = @wire.array(@wire.field(request, "sourceTree"))
  guard !entries.is_empty() && entries.length() <= @data.model_tree_file_limit else {
    raise @data.Invalid("data.byte_limit", "Tree exceeds the file budget")
  }
  let files : Map[String, Bytes] = Map([])
  let mut total = 0
  let mut path_units = 0
  for entry in entries {
    @wire.fields(entry, ["path", "contentBase64"])
    let path = @wire.string(@wire.field(entry, "path"))
    guard path.length() <= 4096 && !files.contains(path) else {
      raise @data.Invalid(
        "data.invalid_path", "Duplicate or oversized tree path",
      )
    }
    guard path.length() <= 1048576 - path_units else {
      raise @data.Invalid(
        "data.tree_limit", "Tree exceeds the path text budget",
      )
    }
    path_units += path.length()
    let encoded = @wire.string(@wire.field(entry, "contentBase64"))
    let remaining = 16 * 1024 * 1024 - total
    guard encoded.length() <= (remaining + 2) / 3 * 4 else {
      raise @data.Invalid(
        "data.byte_limit", "Tree exceeds the source byte budget",
      )
    }
    let bytes = @base64.decode(encoded[:])
    guard bytes.length() <= remaining && @base64.encode(bytes[:]) == encoded else {
      raise @data.Invalid(
        "data.invalid_encoding", "Invalid captured tree bytes",
      )
    }
    total += bytes.length()
    files[path] = bytes
  }
  @data.inspect_model_tree(files, limits={
    max_bytes: 16 * 1024 * 1024,
    max_depth: 128,
    max_values: 100000,
  })
}