{
  "snapshotVersion": 1,
  "definitionsVersion": "1",
  "asOf": "2026-09-27",
  "dataSchemaVersion": "2.2",
  "dataGitHead": "f5f41e3b8debfce3422f9e7fac4a89d5a7ab8e2a",
  "generator": {
    "algorithm": "sha256",
    "framing": "JSON array of [repository-relative path, raw UTF-8 content], sorted by path",
    "sha256": "1fb139a5b5c20f0c5444b56902c1a69731eb37eceee2380df710943ec79035c3",
    "files": [
      {
        "path": "tools/data-quality.js",
        "raw": "#!/usr/bin/env node\n\"use strict\";\n\nconst crypto = require(\"crypto\");\nconst fs = require(\"fs\");\nconst path = require(\"path\");\nconst { execFileSync } = require(\"child_process\");\n\nconst ROOT = path.join(__dirname, \"..\");\nconst DATE_RE = /^\\d{4}-\\d{2}-\\d{2}$/;\nconst SOURCE_MEDIA_TYPES = [\"article\", \"video\", \"paper\", \"repository\", \"documentation\", \"unknown\"];\nconst NON_VIDEO_SOURCE_MEDIA_TYPES = new Set([\"article\", \"paper\", \"repository\", \"documentation\"]);\nconst REVIEW_PROBLEM_STATUSES = new Set([\"insufficient\", \"inaccessible\", \"conflicting\"]);\nconst ROBOT_MEDIA_TYPES = [\"photo\", \"drawing\", \"patent\"];\n\nfunction byPath(a, b) {\n  return a.path < b.path ? -1 : a.path > b.path ? 1 : 0;\n}\n\nfunction datasetSha256(rawFiles) {\n  const framed = [...rawFiles]\n    .sort(byPath)\n    .map((file) => [file.path, file.raw]);\n  return crypto.createHash(\"sha256\").update(JSON.stringify(framed), \"utf8\").digest(\"hex\");\n}\n\nfunction countKnown(values, known) {\n  const counts = Object.fromEntries(known.map((value) => [value, 0]));\n  counts.unknown = 0;\n  for (const value of values) {\n    if (known.includes(value)) counts[value] += 1;\n    else counts.unknown += 1;\n  }\n  return counts;\n}\n\nfunction isCalendarDate(value) {\n  if (!DATE_RE.test(value || \"\")) return false;\n  const [year, month, day] = value.split(\"-\").map(Number);\n  if (year < 1 || month < 1 || month > 12 || day < 1) return false;\n  const leap = year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n  const days = [31, leap ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n  return day <= days[month - 1];\n}\n\nfunction sourceMediaBucket(value) {\n  if (value === \"video\") return \"video\";\n  if (NON_VIDEO_SOURCE_MEDIA_TYPES.has(value)) return \"non_video\";\n  return \"unknown\";\n}\n\nfunction escapePointerPart(value) {\n  return String(value).replace(/~/g, \"~0\").replace(/\\//g, \"~1\");\n}\n\nfunction sourceReviewQueue(robots) {\n  const queue = [];\n  for (const robot of [...robots].sort((a, b) => String(a.slug).localeCompare(String(b.slug)))) {\n    const visit = (value, pathParts) => {\n      if (!value || typeof value !== \"object\") return;\n      if (!Array.isArray(value) && value.source && typeof value.source === \"object\") {\n        const source = value.source;\n        const review = source.review;\n        const reasons = [];\n        if (!SOURCE_MEDIA_TYPES.includes(source.media_type)) reasons.push({ code: \"missing_media_type\" });\n        if (source.publisher_type === undefined) reasons.push({ code: \"missing_publisher_type\" });\n        if (!review || typeof review !== \"object\" || Array.isArray(review)) {\n          reasons.push({ code: \"missing_review\" });\n        } else if (review.status === \"unreviewed\") {\n          reasons.push({ code: \"unreviewed\" });\n        } else if (REVIEW_PROBLEM_STATUSES.has(review.status)) {\n          reasons.push({ code: review.status, reason: review.reason });\n        }\n        if (value.status === \"demonstrated\" && source.media_type === \"video\" &&\n            !(review && review.status === \"supported\" && review.method === \"video\" && source.timestamp)) {\n          reasons.push({ code: \"demonstrated_video_without_reviewed_segment\" });\n        }\n        if (reasons.length > 0) {\n          queue.push({\n            robot: String(robot.slug || \"\"),\n            pointer: `/${[...pathParts, \"source\"].map(escapePointerPart).join(\"/\")}`,\n            url: typeof source.url === \"string\" && source.url ? source.url : `/robots/${encodeURIComponent(String(robot.slug || \"\"))}/`,\n            reasons,\n          });\n        }\n      }\n      for (const key of Object.keys(value).sort()) {\n        if (key === \"source\" || pathParts[0] === \"media\") continue;\n        visit(value[key], [...pathParts, key]);\n      }\n    };\n    visit(robot, []);\n  }\n  return queue.sort((a, b) => a.robot.localeCompare(b.robot) || a.pointer.localeCompare(b.pointer));\n}\n\nfunction maintenanceReviewQueue(robots) {\n  const queue = sourceReviewQueue(robots).map((item) => ({\n    ...item,\n    category: \"source\",\n  }));\n  const fields = [\"actuator_architecture\", \"simulation\"];\n\n  for (const robot of [...robots].sort((a, b) => String(a.slug).localeCompare(String(b.slug)))) {\n    for (const field of fields) {\n      const value = robot && robot[field];\n      const reviewUrl = value && value.review && Array.isArray(value.review.urls) &&\n        typeof value.review.urls[0] === \"string\" ? value.review.urls[0] : null;\n      const robotUrl = `/robots/${encodeURIComponent(String(robot.slug || \"\"))}/`;\n      if (value === undefined) {\n        queue.push({\n          robot: String(robot.slug || \"\"),\n          pointer: `/${field}`,\n          url: robotUrl,\n          category: field,\n          reasons: [{ code: `${field}_missing` }],\n        });\n      } else if (value && typeof value === \"object\" && value.review &&\n                 value.review.status === \"not_confirmed\") {\n        queue.push({\n          robot: String(robot.slug || \"\"),\n          pointer: `/${field}/review`,\n          url: reviewUrl || robotUrl,\n          category: field,\n          reasons: [{ code: `${field}_not_confirmed` }],\n        });\n      }\n    }\n  }\n\n  const unique = new Map();\n  for (const item of queue) {\n    const key = `${item.robot}\\0${item.pointer}\\0${item.category}`;\n    if (!unique.has(key)) unique.set(key, item);\n  }\n  return [...unique.values()].sort((a, b) =>\n    a.robot.localeCompare(b.robot) ||\n    a.pointer.localeCompare(b.pointer) ||\n    a.category.localeCompare(b.category)\n  );\n}\n\nfunction hasSpec(robot, key) {\n  return Boolean(robot && robot.specs && robot.specs[key] !== undefined);\n}\n\nfunction buildQualityReport({ rawFiles, asOf, code }) {\n  if (!isCalendarDate(asOf)) {\n    throw new Error(\"asOf is required and must be a calendar-valid YYYY-MM-DD\");\n  }\n  if (!code || typeof code.gitHead !== \"string\" || !code.gitHead.trim() ||\n      typeof code.generatorSha256 !== \"string\" || !/^[a-f0-9]{64}$/.test(code.generatorSha256) ||\n      typeof code.dirty !== \"boolean\") {\n    throw new Error(\"code.gitHead, code.generatorSha256 and code.dirty are required\");\n  }\n  if (!Array.isArray(rawFiles) || rawFiles.length === 0) {\n    throw new Error(\"rawFiles must contain the dataset and schema inputs\");\n  }\n\n  const sortedFiles = [...rawFiles].sort(byPath);\n  const robotFiles = sortedFiles.filter((file) => /^data\\/robots\\/[^/]+\\.json$/.test(file.path));\n  const robots = robotFiles.map((file) => JSON.parse(file.raw));\n  const capabilities = robots.flatMap((robot) => Array.isArray(robot.capabilities) ? robot.capabilities : []);\n  const media = robots.flatMap((robot) => Array.isArray(robot.media) ? robot.media : []);\n  const mediaTypeOf = (capability) => sourceMediaBucket(capability && capability.source && capability.source.media_type);\n\n  return {\n    schemaVersion: 1,\n    asOf,\n    code: {\n      gitHead: code.gitHead.trim(),\n      generatorSha256: code.generatorSha256,\n      dirty: code.dirty,\n    },\n    snapshot: {\n      algorithm: \"sha256\",\n      framing: \"JSON array of [repository-relative path, raw UTF-8 content], sorted by path\",\n      sha256: datasetSha256(sortedFiles),\n      files: sortedFiles.map((file) => file.path),\n    },\n    counts: {\n      robots: {\n        total: robots.length,\n        withCapabilities: robots.filter((robot) => Array.isArray(robot.capabilities) && robot.capabilities.length > 0).length,\n      },\n      capabilityRecords: {\n        total: capabilities.length,\n        status: countKnown(capabilities.map((capability) => capability && capability.status), [\"claimed\", \"demonstrated\", \"shipped\"]),\n        autonomy: countKnown(capabilities.map((capability) => capability && capability.autonomy), [\"teleoperated\", \"scripted\", \"autonomous\", \"unknown\"]),\n        sourceMediaType: countKnown(capabilities.map(mediaTypeOf), [\"video\", \"non_video\"]),\n      },\n      media: {\n        total: media.length,\n        type: countKnown(media.map((entry) => entry && entry.type), ROBOT_MEDIA_TYPES),\n      },\n    },\n    missing: {\n      robotsWithoutCapabilities: robots.filter((robot) => !Array.isArray(robot.capabilities) || robot.capabilities.length === 0).length,\n      capabilityRecordsWithoutSourceMediaType: capabilities.filter((capability) => {\n        const value = capability && capability.source && capability.source.media_type;\n        return !SOURCE_MEDIA_TYPES.includes(value);\n      }).length,\n      capabilityRecordsWithoutTimestamp: capabilities.filter((capability) => !(capability && capability.source && capability.source.timestamp)).length,\n      robotsWithoutHandDof: robots.filter((robot) => !hasSpec(robot, \"hand_dof\")).length,\n      robotsWithoutFingersPerHand: robots.filter((robot) => !hasSpec(robot, \"fingers_per_hand\")).length,\n      robotsWithoutSimulation: robots.filter((robot) => robot.simulation === undefined).length,\n      robotsWithoutActuatorArchitecture: robots.filter((robot) => robot.actuator_architecture === undefined).length,\n    },\n    sourceReviewQueue: sourceReviewQueue(robots),\n    maintenanceReviewQueue: maintenanceReviewQueue(robots),\n  };\n}\n\nfunction listSnapshotFiles(root = ROOT) {\n  const relative = [];\n  for (const dir of [\"data/robots\", \"data/events\"]) {\n    for (const name of fs.readdirSync(path.join(root, dir)).filter((file) => file.endsWith(\".json\")).sort()) {\n      relative.push(`${dir}/${name}`);\n    }\n  }\n  relative.push(\"data/capabilities.json\", \"data/schema.md\", \"data/schema-version.json\");\n  return relative.sort().map((file) => ({\n    path: file,\n    raw: fs.readFileSync(path.join(root, file), \"utf8\"),\n  }));\n}\n\nfunction parseArgs(argv) {\n  let asOf = \"\";\n  let output = \"\";\n  for (let i = 0; i < argv.length; i += 1) {\n    if (argv[i] === \"--as-of\") asOf = argv[++i] || \"\";\n    else if (argv[i].startsWith(\"--as-of=\")) asOf = argv[i].slice(8);\n    else if (argv[i] === \"--output\") output = argv[++i] || \"\";\n    else if (argv[i].startsWith(\"--output=\")) output = argv[i].slice(9);\n    else throw new Error(`unknown argument: ${argv[i]}`);\n  }\n  if (!isCalendarDate(asOf)) throw new Error(\"--as-of must be a calendar-valid YYYY-MM-DD\");\n  return { asOf, output };\n}\n\nfunction main(argv = process.argv.slice(2)) {\n  const { asOf, output } = parseArgs(argv);\n  const gitHead = execFileSync(\"git\", [\"rev-parse\", \"HEAD\"], { cwd: ROOT, encoding: \"utf8\" }).trim();\n  const generatorRaw = fs.readFileSync(__filename, \"utf8\");\n  const code = {\n    gitHead,\n    generatorSha256: crypto.createHash(\"sha256\").update(generatorRaw, \"utf8\").digest(\"hex\"),\n    dirty: Boolean(execFileSync(\"git\", [\"status\", \"--porcelain\", \"--untracked-files=normal\"], {\n      cwd: ROOT,\n      encoding: \"utf8\",\n    }).trim()),\n  };\n  const report = buildQualityReport({ rawFiles: listSnapshotFiles(ROOT), asOf, code });\n  const outputPath = output ? path.resolve(ROOT, output) : path.join(ROOT, \"var\", \"quality\", `quality-${asOf}.json`);\n  fs.mkdirSync(path.dirname(outputPath), { recursive: true });\n  fs.writeFileSync(outputPath, `${JSON.stringify(report, null, 2)}\\n`);\n  process.stdout.write(`${outputPath}\\n`);\n  return report;\n}\n\nif (require.main === module) {\n  try {\n    main();\n  } catch (error) {\n    process.stderr.write(`data-quality: ${error.message}\\n`);\n    process.exitCode = 1;\n  }\n}\n\nmodule.exports = {\n  buildQualityReport,\n  datasetSha256,\n  isCalendarDate,\n  listSnapshotFiles,\n  parseArgs,\n  maintenanceReviewQueue,\n  sourceMediaBucket,\n  sourceReviewQueue,\n  main,\n};\n",
        "sha256": "fda08cb19d25ba5cc10305579506c5671deb0943c418db4a900b43b3dc475973"
      },
      {
        "path": "tools/factsheet.js",
        "raw": "#!/usr/bin/env node\n\"use strict\";\n\nconst fs = require(\"fs\");\nconst path = require(\"path\");\nconst {\n  buildQualityReport,\n  datasetSha256,\n  isCalendarDate,\n} = require(\"./data-quality.js\");\n\nconst DEFINITIONS_VERSION = \"1\";\nconst SHA256_RE = /^[a-f0-9]{64}$/;\nconst GIT_COMMIT_RE = /^[a-f0-9]{40,64}$/;\nconst REQUIRED_GENERATOR_FILES = [\"tools/data-quality.js\", \"tools/factsheet.js\"];\nconst SOURCE_REVIEW_STATUSES = [\"supported\", \"insufficient\", \"inaccessible\", \"conflicting\", \"unreviewed\"];\nconst SIMULATION_REVIEW_STATUSES = [\"found\", \"not_confirmed\"];\nconst COMPATIBILITY_LEVELS = [\"documented\", \"tested\"];\n\nfunction compareText(a, b) {\n  return a < b ? -1 : a > b ? 1 : 0;\n}\n\nfunction countKnown(values, known) {\n  const counts = Object.fromEntries(known.map((value) => [value, 0]));\n  counts.unknown = 0;\n  for (const value of values) {\n    if (known.includes(value)) counts[value] += 1;\n    else counts.unknown += 1;\n  }\n  return counts;\n}\n\nfunction validateRawFiles(rawFiles) {\n  if (!Array.isArray(rawFiles) || rawFiles.length === 0) {\n    throw new Error(\"rawFiles must be a non-empty array\");\n  }\n  const paths = new Set();\n  for (const file of rawFiles) {\n    if (!file || typeof file.path !== \"string\" || !file.path || typeof file.raw !== \"string\") {\n      throw new Error(\"every raw file needs a non-empty path and exact UTF-8 string content\");\n    }\n    if (paths.has(file.path)) throw new Error(`duplicate raw file path: ${file.path}`);\n    paths.add(file.path);\n  }\n  return [...rawFiles].sort((a, b) => compareText(a.path, b.path));\n}\n\nfunction schemaVersionFromFiles(rawFiles) {\n  const file = rawFiles.find((entry) => entry.path === \"data/schema-version.json\");\n  if (!file) throw new Error(\"snapshot must include data/schema-version.json\");\n  let parsed;\n  try {\n    parsed = JSON.parse(file.raw);\n  } catch (error) {\n    throw new Error(`data/schema-version.json is invalid JSON: ${error.message}`);\n  }\n  if (!parsed || typeof parsed.schemaVersion !== \"string\" || !parsed.schemaVersion) {\n    throw new Error(\"data/schema-version.json must contain schemaVersion\");\n  }\n  return parsed.schemaVersion;\n}\n\nfunction sha256(raw) {\n  return require(\"crypto\").createHash(\"sha256\").update(raw, \"utf8\").digest(\"hex\");\n}\n\nfunction normalizeGeneratorFiles(generatorFiles) {\n  const files = validateRawFiles(generatorFiles);\n  const paths = files.map((file) => file.path);\n  if (JSON.stringify(paths) !== JSON.stringify(REQUIRED_GENERATOR_FILES)) {\n    throw new Error(`generatorFiles must contain exactly: ${REQUIRED_GENERATOR_FILES.join(\", \")}`);\n  }\n  return files.map((file) => ({ ...file, sha256: sha256(file.raw) }));\n}\n\nfunction generatorCombinedSha256(files) {\n  return datasetSha256(files.map((file) => ({ path: file.path, raw: file.raw })));\n}\n\nfunction createSnapshot({ rawFiles, asOf, schemaVersion, dataGitHead, generatorFiles }) {\n  if (!isCalendarDate(asOf)) throw new Error(\"asOf must be a calendar-valid YYYY-MM-DD\");\n  if (typeof schemaVersion !== \"string\" || !schemaVersion) throw new Error(\"schemaVersion is required\");\n  if (typeof dataGitHead !== \"string\" || !GIT_COMMIT_RE.test(dataGitHead)) {\n    throw new Error(\"dataGitHead must be a pinned 40- or 64-character lowercase Git commit id\");\n  }\n  const sortedFiles = validateRawFiles(rawFiles);\n  const normalizedGeneratorFiles = normalizeGeneratorFiles(generatorFiles);\n  const exportedSchemaVersion = schemaVersionFromFiles(sortedFiles);\n  if (exportedSchemaVersion !== schemaVersion) {\n    throw new Error(`schemaVersion mismatch: requested ${schemaVersion}, dataset exports ${exportedSchemaVersion}`);\n  }\n  if (!sortedFiles.some((file) => /^data\\/robots\\/[^/]+\\.json$/.test(file.path))) {\n    throw new Error(\"snapshot must include all selected data/robots JSON records\");\n  }\n  return {\n    snapshotVersion: 1,\n    definitionsVersion: DEFINITIONS_VERSION,\n    asOf,\n    dataSchemaVersion: schemaVersion,\n    dataGitHead,\n    generator: {\n      algorithm: \"sha256\",\n      framing: \"JSON array of [repository-relative path, raw UTF-8 content], sorted by path\",\n      sha256: generatorCombinedSha256(normalizedGeneratorFiles),\n      files: normalizedGeneratorFiles,\n    },\n    dataset: {\n      algorithm: \"sha256\",\n      framing: \"JSON array of [repository-relative path, raw UTF-8 content], sorted by path\",\n      sha256: datasetSha256(sortedFiles),\n    },\n    rawFiles: sortedFiles,\n  };\n}\n\nfunction validateSnapshot(snapshot) {\n  if (!snapshot || snapshot.snapshotVersion !== 1 || snapshot.definitionsVersion !== DEFINITIONS_VERSION) {\n    throw new Error(`snapshotVersion 1 and definitionsVersion ${DEFINITIONS_VERSION} are required`);\n  }\n  if (!isCalendarDate(snapshot.asOf)) throw new Error(\"snapshot asOf must be a calendar-valid YYYY-MM-DD\");\n  if (typeof snapshot.dataSchemaVersion !== \"string\" || !snapshot.dataSchemaVersion) {\n    throw new Error(\"snapshot dataSchemaVersion is required\");\n  }\n  if (typeof snapshot.dataGitHead !== \"string\" || !GIT_COMMIT_RE.test(snapshot.dataGitHead)) {\n    throw new Error(\"snapshot dataGitHead must be a pinned Git commit id\");\n  }\n  if (!snapshot.generator || snapshot.generator.algorithm !== \"sha256\") {\n    throw new Error(\"snapshot generator provenance is required\");\n  }\n  const generatorFiles = normalizeGeneratorFiles(snapshot.generator.files);\n  for (const file of generatorFiles) {\n    const stored = snapshot.generator.files.find((entry) => entry.path === file.path);\n    if (!stored || !SHA256_RE.test(stored.sha256 || \"\") || stored.sha256 !== file.sha256) {\n      throw new Error(`snapshot generator file hash does not match ${file.path}`);\n    }\n  }\n  if (!SHA256_RE.test(snapshot.generator.sha256 || \"\") ||\n      snapshot.generator.sha256 !== generatorCombinedSha256(generatorFiles)) {\n    throw new Error(\"snapshot combined generator hash does not match its exact code files\");\n  }\n  const sortedFiles = validateRawFiles(snapshot.rawFiles);\n  if (schemaVersionFromFiles(sortedFiles) !== snapshot.dataSchemaVersion) {\n    throw new Error(\"snapshot dataSchemaVersion does not match data/schema-version.json\");\n  }\n  const actualHash = datasetSha256(sortedFiles);\n  if (!snapshot.dataset || snapshot.dataset.algorithm !== \"sha256\" || snapshot.dataset.sha256 !== actualHash) {\n    throw new Error(\"snapshot dataset hash does not match its raw files\");\n  }\n  return sortedFiles;\n}\n\nfunction validateRuntimeGenerator(snapshot) {\n  const runtimeFiles = normalizeGeneratorFiles([\n    { path: \"tools/data-quality.js\", raw: fs.readFileSync(require.resolve(\"./data-quality.js\"), \"utf8\") },\n    { path: \"tools/factsheet.js\", raw: fs.readFileSync(__filename, \"utf8\") },\n  ]);\n  const storedByPath = new Map(snapshot.generator.files.map((file) => [file.path, file]));\n  for (const file of runtimeFiles) {\n    if (!storedByPath.has(file.path) || storedByPath.get(file.path).sha256 !== file.sha256) {\n      throw new Error(`runtime generator code does not match snapshot: ${file.path}`);\n    }\n  }\n  if (generatorCombinedSha256(runtimeFiles) !== snapshot.generator.sha256) {\n    throw new Error(\"runtime generator code does not match snapshot combined hash\");\n  }\n}\n\nfunction robotsFromFiles(rawFiles) {\n  return rawFiles\n    .filter((file) => /^data\\/robots\\/[^/]+\\.json$/.test(file.path))\n    .map((file) => ({ path: file.path, robot: JSON.parse(file.raw), raw: file.raw }))\n    .sort((a, b) => compareText(a.path, b.path));\n}\n\nfunction sourceClaims(robots) {\n  const claims = [];\n  function visit(value, pathParts, robotSlug) {\n    if (!value || typeof value !== \"object\") return;\n    if (!Array.isArray(value) && value.source && typeof value.source === \"object\" && !Array.isArray(value.source)) {\n      claims.push({ robot: robotSlug, pointer: `/${[...pathParts, \"source\"].join(\"/\")}`, source: value.source });\n    }\n    for (const key of Object.keys(value).sort(compareText)) {\n      if (key === \"source\" || pathParts[0] === \"media\") continue;\n      visit(value[key], [...pathParts, key], robotSlug);\n    }\n  }\n  for (const robot of robots) visit(robot, [], String(robot.slug || \"\"));\n  return claims;\n}\n\nfunction sourceMediaBucket(mediaType) {\n  if (mediaType === \"video\") return \"video\";\n  if ([\"article\", \"paper\", \"repository\", \"documentation\"].includes(mediaType)) return \"non_video\";\n  return \"unknown\";\n}\n\nfunction nonEmptyValue(value) {\n  if (typeof value === \"string\") return value.trim() !== \"\";\n  if (value && typeof value === \"object\" && !Array.isArray(value)) return nonEmptyValue(value.value);\n  return value !== undefined && value !== null && value !== false;\n}\n\nfunction buildFactsheet(snapshot) {\n  const rawFiles = validateSnapshot(snapshot);\n  const robotRecords = robotsFromFiles(rawFiles);\n  const robots = robotRecords.map((entry) => entry.robot);\n  const quality = buildQualityReport({\n    rawFiles,\n    asOf: snapshot.asOf,\n    code: {\n      gitHead: snapshot.dataGitHead,\n      generatorSha256: snapshot.generator.sha256,\n      dirty: false,\n    },\n  });\n  const claims = sourceClaims(robots);\n  const sourceReviewStatuses = countKnown(\n    claims.map((claim) => claim.source.review && claim.source.review.status),\n    SOURCE_REVIEW_STATUSES,\n  );\n  const sourceMediaTypes = countKnown(\n    claims.map((claim) => sourceMediaBucket(claim.source.media_type)),\n    [\"video\", \"non_video\"],\n  );\n\n  const simulationReview = [];\n  let simulationArtifacts = 0;\n  const compatibility = [];\n  for (const robot of robots) {\n    const simulation = robot.simulation;\n    simulationReview.push(simulation && simulation.review ? simulation.review.status : \"missing\");\n    const artifacts = simulation && Array.isArray(simulation.artifacts) ? simulation.artifacts : [];\n    simulationArtifacts += artifacts.length;\n    for (const artifact of artifacts) {\n      const entries = Array.isArray(artifact.compatibility) ? artifact.compatibility : [];\n      for (const entry of entries) compatibility.push(entry && entry.level);\n    }\n  }\n\n  const actuatorReview = [];\n  const actuatorGroups = [];\n  for (const robot of robots) {\n    const architecture = robot.actuator_architecture;\n    actuatorReview.push(architecture && architecture.review ? architecture.review.status : \"missing\");\n    if (architecture && Array.isArray(architecture.groups)) actuatorGroups.push(...architecture.groups);\n  }\n  const groupFields = [\"drive\", \"transmission\", \"motion\", \"architecture\"];\n\n  return {\n    factsheetVersion: 1,\n    scope: {\n      statement: \"Counts describe records within this register; they are not estimates of the humanoid robotics market.\",\n      selection: \"All data/robots/*.json records included in the pinned snapshot.\",\n      unitWarning: \"Robot records, capability records, claim sources, artifacts and actuator groups use separate denominators.\",\n      videoAssessment: \"No percentage about demonstrated autonomy or teleoperation is calculated without a defined, reviewed video unit.\",\n    },\n    cutoff: snapshot.asOf,\n    dataSchemaVersion: snapshot.dataSchemaVersion,\n    definitionsVersion: snapshot.definitionsVersion,\n    provenance: {\n      datasetSha256: snapshot.dataset.sha256,\n      dataGitHead: snapshot.dataGitHead,\n      generatorSha256: snapshot.generator.sha256,\n      generatorFiles: snapshot.generator.files.map((file) => ({ path: file.path, sha256: file.sha256 })),\n    },\n    metrics: {\n      robotRecords: quality.counts.robots,\n      capabilityRecords: quality.counts.capabilityRecords,\n      claimSourceRecords: {\n        total: claims.length,\n        reviewStatus: sourceReviewStatuses,\n        mediaType: sourceMediaTypes,\n        queuedForReview: quality.sourceReviewQueue.length,\n      },\n      simulation: {\n        robotReviewStatus: countKnown(simulationReview, [...SIMULATION_REVIEW_STATUSES, \"missing\"]),\n        artifacts: simulationArtifacts,\n        compatibility: countKnown(compatibility, COMPATIBILITY_LEVELS),\n      },\n      actuatorArchitecture: {\n        robotReviewStatus: countKnown(actuatorReview, [...SIMULATION_REVIEW_STATUSES, \"missing\"]),\n        groups: {\n          total: actuatorGroups.length,\n          withDrive: actuatorGroups.filter((group) => nonEmptyValue(group && group.drive)).length,\n          withTransmission: actuatorGroups.filter((group) => nonEmptyValue(group && group.transmission)).length,\n          withMotion: actuatorGroups.filter((group) => nonEmptyValue(group && group.motion)).length,\n          withArchitecture: actuatorGroups.filter((group) => nonEmptyValue(group && group.architecture)).length,\n          unknown: actuatorGroups.filter((group) => !groupFields.some((key) => nonEmptyValue(group && group[key]))).length,\n        },\n      },\n      dataGaps: {\n        robotsWithoutHandDof: quality.missing.robotsWithoutHandDof,\n        robotsWithoutFingersPerHand: quality.missing.robotsWithoutFingersPerHand,\n        robotsWithoutSimulation: quality.missing.robotsWithoutSimulation,\n        robotsWithoutActuatorArchitecture: quality.missing.robotsWithoutActuatorArchitecture,\n        capabilityRecordsWithoutSourceMediaType: quality.missing.capabilityRecordsWithoutSourceMediaType,\n        capabilityRecordsWithoutTimestamp: quality.missing.capabilityRecordsWithoutTimestamp,\n      },\n    },\n  };\n}\n\nfunction renderMarkdown(factsheet) {\n  const m = factsheet.metrics;\n  const capability = m.capabilityRecords;\n  const review = m.claimSourceRecords.reviewStatus;\n  const media = m.claimSourceRecords.mediaType;\n  const simulation = m.simulation;\n  const actuator = m.actuatorArchitecture;\n  const gaps = m.dataGaps;\n  const lines = [\n    \"# Humanoid Record factsheet\",\n    \"\",\n    `Cutoff: ${factsheet.cutoff}`,\n    \"\",\n    factsheet.scope.statement,\n    \"\",\n    factsheet.scope.unitWarning,\n    \"\",\n    \"## Register counts\",\n    \"\",\n    `- Robot records: ${m.robotRecords.total}`,\n    `- Robot records with one or more capability records: ${m.robotRecords.withCapabilities}`,\n    `- Capability records: ${capability.total}`,\n    `- Capability status (denominator ${capability.total} records): claimed ${capability.status.claimed}, demonstrated ${capability.status.demonstrated}, shipped ${capability.status.shipped}, unknown ${capability.status.unknown}`,\n    `- Capability autonomy (denominator ${capability.total} records): autonomous ${capability.autonomy.autonomous}, teleoperated ${capability.autonomy.teleoperated}, scripted ${capability.autonomy.scripted}, unknown ${capability.autonomy.unknown}`,\n    \"\",\n    factsheet.scope.videoAssessment,\n    \"\",\n    \"## Claim-source review\",\n    \"\",\n    `- Claim-source records: ${m.claimSourceRecords.total}`,\n    `- Review status (denominator ${m.claimSourceRecords.total} claim-source records): supported ${review.supported}, insufficient ${review.insufficient}, inaccessible ${review.inaccessible}, conflicting ${review.conflicting}, unreviewed ${review.unreviewed}, unknown or missing ${review.unknown}`,\n    `- Source media type (same denominator): video ${media.video}, non-video ${media.non_video}, unknown or missing ${media.unknown}`,\n    `- Claims queued for review: ${m.claimSourceRecords.queuedForReview}`,\n    \"\",\n    \"## Simulation and actuators\",\n    \"\",\n    `- Simulation review (denominator ${m.robotRecords.total} robot records): found ${simulation.robotReviewStatus.found}, not confirmed ${simulation.robotReviewStatus.not_confirmed}, missing ${simulation.robotReviewStatus.missing}, unknown ${simulation.robotReviewStatus.unknown}`,\n    `- Simulation artifacts: ${simulation.artifacts}`,\n    `- Simulator compatibility statements: documented ${simulation.compatibility.documented}, tested ${simulation.compatibility.tested}, unknown ${simulation.compatibility.unknown}`,\n    `- Actuator review (denominator ${m.robotRecords.total} robot records): found ${actuator.robotReviewStatus.found}, not confirmed ${actuator.robotReviewStatus.not_confirmed}, missing ${actuator.robotReviewStatus.missing}, unknown ${actuator.robotReviewStatus.unknown}`,\n    `- Actuator groups: ${actuator.groups.total}; drive known ${actuator.groups.withDrive}, transmission known ${actuator.groups.withTransmission}, motion known ${actuator.groups.withMotion}, architecture known ${actuator.groups.withArchitecture}, all four unknown ${actuator.groups.unknown}`,\n    \"\",\n    \"## Recorded gaps\",\n    \"\",\n    `- Robot records without hand DoF: ${gaps.robotsWithoutHandDof}`,\n    `- Robot records without fingers per hand: ${gaps.robotsWithoutFingersPerHand}`,\n    `- Robot records without simulation review: ${gaps.robotsWithoutSimulation}`,\n    `- Robot records without actuator architecture review: ${gaps.robotsWithoutActuatorArchitecture}`,\n    `- Capability records without explicit source media type: ${gaps.capabilityRecordsWithoutSourceMediaType}`,\n    `- Capability records without source timestamp: ${gaps.capabilityRecordsWithoutTimestamp}`,\n    \"\",\n    \"## Reproduction metadata\",\n    \"\",\n    `- Data schema: ${factsheet.dataSchemaVersion}`,\n    `- Definitions: ${factsheet.definitionsVersion}`,\n    `- Dataset SHA-256: ${factsheet.provenance.datasetSha256}`,\n    `- Dataset Git commit: ${factsheet.provenance.dataGitHead}`,\n    `- Generator SHA-256: ${factsheet.provenance.generatorSha256}`,\n    ...factsheet.provenance.generatorFiles.map((file) => `- Generator file: ${file.path} (${file.sha256})`),\n    \"\",\n  ];\n  return lines.join(\"\\n\");\n}\n\nfunction robotMap(snapshot) {\n  return new Map(robotsFromFiles(snapshot.rawFiles).map((entry) => [entry.path, entry]));\n}\n\nfunction timelineEvents(robot) {\n  const events = robot && robot.delivery && Array.isArray(robot.delivery.timeline) ? robot.delivery.timeline : [];\n  return events.map((record) => ({\n    identity: {\n      date: record && record.date !== undefined ? record.date : null,\n      event: record && record.event !== undefined ? record.event : null,\n      detail: record && record.detail !== undefined ? record.detail : null,\n    },\n    record,\n  }));\n}\n\nfunction eventKey(pathName, event) {\n  return JSON.stringify([pathName, event.date, event.event, event.detail]);\n}\n\nfunction withoutTimeline(robot) {\n  const copy = JSON.parse(JSON.stringify(robot));\n  if (copy.delivery && typeof copy.delivery === \"object\") delete copy.delivery.timeline;\n  return copy;\n}\n\nfunction compareSnapshots(before, after) {\n  validateSnapshot(before);\n  validateSnapshot(after);\n  if (before.dataSchemaVersion !== after.dataSchemaVersion) {\n    throw new Error(\"cannot compare snapshots with different dataSchemaVersion values\");\n  }\n  if (before.definitionsVersion !== after.definitionsVersion) {\n    throw new Error(\"cannot compare snapshots with different definitionsVersion values\");\n  }\n  const beforeRobots = robotMap(before);\n  const afterRobots = robotMap(after);\n  const allRobotPaths = [...new Set([...beforeRobots.keys(), ...afterRobots.keys()])].sort(compareText);\n  const additions = allRobotPaths.filter((entry) => !beforeRobots.has(entry));\n  const removals = allRobotPaths.filter((entry) => !afterRobots.has(entry));\n  const edits = allRobotPaths.filter((entry) => beforeRobots.has(entry) && afterRobots.has(entry) &&\n    beforeRobots.get(entry).raw !== afterRobots.get(entry).raw);\n\n  const beforeEvents = new Map();\n  const afterEvents = new Map();\n  for (const [pathName, entry] of beforeRobots) {\n    for (const item of timelineEvents(entry.robot)) beforeEvents.set(eventKey(pathName, item.identity), {\n      identity: { path: pathName, ...item.identity }, record: item.record,\n    });\n  }\n  for (const [pathName, entry] of afterRobots) {\n    for (const item of timelineEvents(entry.robot)) afterEvents.set(eventKey(pathName, item.identity), {\n      identity: { path: pathName, ...item.identity }, record: item.record,\n    });\n  }\n  const addedEvents = [...afterEvents].filter(([key]) => !beforeEvents.has(key)).map(([, value]) => value.identity);\n  const removedEvents = [...beforeEvents].filter(([key]) => !afterEvents.has(key)).map(([, value]) => value.identity);\n  const eventSort = (a, b) => compareText(JSON.stringify([a.path, a.date, a.event, a.detail]), JSON.stringify([b.path, b.date, b.event, b.detail]));\n\n  const commonEventRecordChanged = new Set([...beforeEvents]\n    .filter(([key, value]) => afterEvents.has(key) && JSON.stringify(value.record) !== JSON.stringify(afterEvents.get(key).record))\n    .map(([, value]) => value.identity.path));\n  const otherRecordEdits = edits.filter((pathName) =>\n    JSON.stringify(withoutTimeline(beforeRobots.get(pathName).robot)) !==\n    JSON.stringify(withoutTimeline(afterRobots.get(pathName).robot)) || commonEventRecordChanged.has(pathName));\n  const beforeOther = new Map(before.rawFiles.filter((file) => !/^data\\/robots\\/[^/]+\\.json$/.test(file.path)).map((file) => [file.path, file.raw]));\n  const afterOther = new Map(after.rawFiles.filter((file) => !/^data\\/robots\\/[^/]+\\.json$/.test(file.path)).map((file) => [file.path, file.raw]));\n  const otherPaths = [...new Set([...beforeOther.keys(), ...afterOther.keys()])].sort(compareText);\n\n  return {\n    statement: \"These are data changes between register snapshots, not automatically real-world events.\",\n    records: { additions, removals, edits },\n    deliveryTimelineEvents: {\n      identity: \"robot record path + date + event + detail\",\n      additions: addedEvents.sort(eventSort),\n      removals: removedEvents.sort(eventSort),\n    },\n    otherDataChanges: {\n      robotRecordEdits: otherRecordEdits,\n      files: {\n        additions: otherPaths.filter((entry) => !beforeOther.has(entry)),\n        removals: otherPaths.filter((entry) => !afterOther.has(entry)),\n        edits: otherPaths.filter((entry) => beforeOther.has(entry) && afterOther.has(entry) && beforeOther.get(entry) !== afterOther.get(entry)),\n      },\n    },\n  };\n}\n\nfunction parseArgs(argv) {\n  let snapshotPath = \"\";\n  let output = \"\";\n  for (let index = 0; index < argv.length; index += 1) {\n    if (argv[index] === \"--snapshot\") snapshotPath = argv[++index] || \"\";\n    else if (argv[index].startsWith(\"--snapshot=\")) snapshotPath = argv[index].slice(11);\n    else if (argv[index] === \"--output\") output = argv[++index] || \"\";\n    else if (argv[index].startsWith(\"--output=\")) output = argv[index].slice(9);\n    else throw new Error(`unknown argument: ${argv[index]}`);\n  }\n  if (!snapshotPath || !output) throw new Error(\"--snapshot and --output are required\");\n  return { snapshotPath, output };\n}\n\nfunction main(argv = process.argv.slice(2)) {\n  const args = parseArgs(argv);\n  const snapshot = JSON.parse(fs.readFileSync(path.resolve(args.snapshotPath), \"utf8\"));\n  validateSnapshot(snapshot);\n  validateRuntimeGenerator(snapshot);\n  const factsheet = buildFactsheet(snapshot);\n  const outputDir = path.resolve(args.output);\n  fs.mkdirSync(outputDir, { recursive: true });\n  fs.writeFileSync(path.join(outputDir, \"snapshot.json\"), `${JSON.stringify(snapshot, null, 2)}\\n`);\n  fs.writeFileSync(path.join(outputDir, \"factsheet.json\"), `${JSON.stringify(factsheet, null, 2)}\\n`);\n  fs.writeFileSync(path.join(outputDir, \"factsheet.md\"), renderMarkdown(factsheet));\n  process.stdout.write(`${outputDir}\\n`);\n  return factsheet;\n}\n\nif (require.main === module) {\n  try {\n    main();\n  } catch (error) {\n    process.stderr.write(`factsheet: ${error.message}\\n`);\n    process.exitCode = 1;\n  }\n}\n\nmodule.exports = {\n  DEFINITIONS_VERSION,\n  REQUIRED_GENERATOR_FILES,\n  buildFactsheet,\n  compareSnapshots,\n  createSnapshot,\n  main,\n  parseArgs,\n  renderMarkdown,\n  validateRuntimeGenerator,\n  validateSnapshot,\n};\n",
        "sha256": "bbabc458b6d2a7da8e901756ff647b41de342e98097bacda5dd6d9032199f786"
      }
    ]
  },
  "dataset": {
    "algorithm": "sha256",
    "framing": "JSON array of [repository-relative path, raw UTF-8 content], sorted by path",
    "sha256": "b02f89a04d032a6742704175872b5b3050c0832fb6222e78627808e07cc64b5c"
  },
  "rawFiles": [
    {
      "path": "data/capabilities.json",
      "raw": "[\n  { \"id\": \"walk-uneven-terrain\", \"label\": \"Walk uneven terrain\", \"definition\": \"Locomotion over non-flat, unstructured ground (rubble, grass, slopes) without falling.\" },\n  { \"id\": \"stairs\", \"label\": \"Stairs\", \"definition\": \"Ascending or descending a staircase under the robot's own balance control.\" },\n  { \"id\": \"run\", \"label\": \"Run\", \"definition\": \"A gait with an aerial (both-feet-off-ground) phase, sustained, not a single stumble-recovery step.\" },\n  { \"id\": \"fall-recovery\", \"label\": \"Fall recovery\", \"definition\": \"Getting back to a standing posture after a fall or being knocked down, without being picked up by a person.\" },\n  { \"id\": \"pick-and-place\", \"label\": \"Pick and place\", \"definition\": \"Grasping an object and placing it at a target location as a discrete task.\" },\n  { \"id\": \"bimanual-manipulation\", \"label\": \"Bimanual manipulation\", \"definition\": \"Coordinated use of both arms/hands on a single task (e.g. holding with one hand, working with the other).\" },\n  { \"id\": \"tool-use\", \"label\": \"Tool use\", \"definition\": \"Operating a hand tool or implement (screwdriver, drill, kitchen tool) as intended.\" },\n  { \"id\": \"open-door\", \"label\": \"Open door\", \"definition\": \"Operating a door handle/knob and passing through, including holding it open if needed.\" },\n  { \"id\": \"carry-payload\", \"label\": \"Carry payload\", \"definition\": \"Transporting an object or load over a distance while walking, not just lifting in place.\" },\n  { \"id\": \"box-handling\", \"label\": \"Box handling\", \"definition\": \"Picking, moving, sorting, or stacking boxes/totes/containers as a repeated task.\" },\n  { \"id\": \"voice-interaction\", \"label\": \"Voice interaction\", \"definition\": \"Responding to spoken language with speech or action in a demonstrated exchange.\" },\n  { \"id\": \"facial-expressions\", \"label\": \"Facial expressions\", \"definition\": \"A face/head capable of displaying expressions, shown in use.\" },\n  { \"id\": \"tactile-sensing\", \"label\": \"Tactile sensing\", \"definition\": \"Sensors in hands/fingers that detect contact/force, shown affecting behavior (not just listed as a spec).\" },\n  { \"id\": \"teleoperation-shown\", \"label\": \"Teleoperation shown\", \"definition\": \"A demonstrated session where a human operator directly drives the robot's motion.\" },\n  { \"id\": \"continuous-operation-1h\", \"label\": \"Continuous operation (1h+)\", \"definition\": \"A single demonstrated run of at least one continuous hour without a battery swap or manual reset.\" },\n  { \"id\": \"outdoor-operation\", \"label\": \"Outdoor operation\", \"definition\": \"Operating outside a controlled indoor facility, in real outdoor conditions.\" }\n]\n"
    },
    {
      "path": "data/events/beijing-etown-half-marathon-2025.json",
      "raw": "{\n  \"slug\": \"beijing-etown-half-marathon-2025\",\n  \"name\": \"Beijing E-Town Half-Marathon (humanoid robot division)\",\n  \"organizer\": \"Beijing Economic-Technological Development Area (Beijing E-Town / Yizhuang)\",\n  \"date\": \"2025-04-19\",\n  \"location\": \"Beijing E-Town (Yizhuang), China\",\n  \"rules_url\": \"https://en.wikipedia.org/wiki/Beijing_E-Town_Half-Marathon\",\n  \"autonomy_rule\": {\n    \"value\": \"unknown\",\n    \"source\": {\n      \"url\": \"https://www.nbcnews.com/news/world/china-robots-race-humans-half-marathon-rcna195586\",\n      \"quote\": \"Midway through the race, some robots became too 'tired' to continue on their own, and their human operators had to guide them with leashes.\",\n      \"accessed\": \"2026-09-21\"\n    }\n  },\n  \"source\": {\n    \"url\": \"https://news.cgtn.com/news/2025-04-19/-Tiangong-Ultra-wins-world-s-first-ever-humanoid-robot-half-marathon-1CHdanwJVzG/p.html\",\n    \"quote\": \"The 'Tiangong Ultra' humanoid robot wins the world's first humanoid robot half marathon in Beijing, China, April 19, 2025.\",\n    \"accessed\": \"2026-09-21\"\n  },\n  \"notes\": [\n    \"21 humanoid robots started alongside human runners over the 21.0975 km course; only 6 reached the finish line within the 3h10m time limit (nbcnews.com, en.wikipedia.org/wiki/Beijing_E-Town_Half-Marathon, accessed 2026-09-21).\",\n    \"No single published rule fixes autonomy for this event: entrants ranged from fully remote-controlled to more autonomous locomotion, and operators were allowed to intervene (e.g. leashes) when a robot could not continue -- recorded here as 'unknown' at the event level; per-robot autonomy is on each result entry.\"\n  ]\n}\n"
    },
    {
      "path": "data/events/darpa-robotics-challenge-2015.json",
      "raw": "{\n  \"slug\": \"darpa-robotics-challenge-2015\",\n  \"name\": \"DARPA Robotics Challenge Finals 2015\",\n  \"organizer\": \"Defense Advanced Research Projects Agency (DARPA)\",\n  \"date\": \"2015-06-05\",\n  \"location\": \"Fairplex, Pomona, California, US\",\n  \"rules_url\": \"https://www.darpa.mil/news/2015/robotics-challenge-finals\",\n  \"autonomy_rule\": {\n    \"value\": \"mixed\",\n    \"source\": {\n      \"url\": \"https://www.darpa.mil/news/2015/robotics-challenge-finals\",\n      \"quote\": \"the DARPA Robotics Challenge (DRC) Finals, a competition of robots and their human supervisors to be held June 5-6, 2015, at Fairplex in Pomona, Calif.\",\n      \"accessed\": \"2026-09-21\"\n    }\n  },\n  \"source\": {\n    \"url\": \"https://www.darpa.mil/news/2015/robotics-challenge-finals\",\n    \"quote\": \"the DARPA Robotics Challenge (DRC) Finals, a competition of robots and their human supervisors to be held June 5-6, 2015, at Fairplex in Pomona, Calif.\",\n    \"accessed\": \"2026-09-21\"\n  },\n  \"notes\": [\n    \"Seven of the 25 competing teams used the (hydraulic) Boston Dynamics Atlas robot, including Team IHMC's second-place 'Running Man' (kaist.ac.kr, dvidshub.net, accessed 2026-09-21). That Atlas generation is a different, discontinued platform from the all-electric Atlas in this dataset (boston-dynamics-atlas-electric), unveiled by Boston Dynamics in 2024 as its successor -- so no result entry is recorded against that robot record for this event. Event kept for reference and to document why it is excluded rather than silently omitted.\",\n    \"Supervised, intermittently-degraded network links between operators and robots were a core rule of this DRC (simulating disaster-response conditions), making autonomy genuinely mixed/task-dependent rather than a single fixed value -- recorded here as 'mixed'.\"\n  ]\n}\n"
    },
    {
      "path": "data/events/robocup-2025-humanoid-adultsize.json",
      "raw": "{\n  \"slug\": \"robocup-2025-humanoid-adultsize\",\n  \"name\": \"RoboCup 2025 Humanoid League, AdultSize\",\n  \"organizer\": \"RoboCup Federation\",\n  \"date\": \"2025-07-21\",\n  \"location\": \"Salvador, Brazil\",\n  \"rules_url\": \"https://humanoid.robocup.org/robocup-2025/schedule-and-results-rc-hl-2025/\",\n  \"autonomy_rule\": {\n    \"value\": \"autonomous\",\n    \"source\": {\n      \"url\": \"https://humanoid.robocup.org/\",\n      \"quote\": \"In the Humanoid League, autonomous robots with a human-like body plan and human-like senses play soccer against each other.\",\n      \"accessed\": \"2026-09-21\"\n    }\n  },\n  \"source\": {\n    \"url\": \"https://global.chinadaily.com.cn/a/202507/25/WS6882e633a310ad07b5d91f03.html\",\n    \"quote\": \"Tsinghua's Hephaestus team beat China Agricultural University's Mountain & Sea team 5:3 in the finals\",\n    \"accessed\": \"2026-09-21\"\n  },\n  \"notes\": [\n    \"RoboCup's Humanoid League rulebook requires autonomous play (tele-operation is barred except for a safety e-stop), unlike the World Humanoid Robot Games and the Beijing half marathon, which allow or expect human remote control -- this is the one tracked event with a hard autonomy rule rather than a mixed or unclear one.\"\n  ]\n}\n"
    },
    {
      "path": "data/events/world-humanoid-robot-games-2025.json",
      "raw": "{\n  \"slug\": \"world-humanoid-robot-games-2025\",\n  \"name\": \"World Humanoid Robot Games 2025\",\n  \"organizer\": \"World Humanoid Robot Sports Federation, with the Beijing Municipal People's Government, China Media Group, the World Robot Cooperation Organization, and the RoboCup Asia-Pacific Confederation Board of Trustees\",\n  \"date\": \"2025-08-15\",\n  \"location\": \"Beijing, China (National Speed Skating Oval)\",\n  \"rules_url\": \"https://www.whrgoc.com/\",\n  \"autonomy_rule\": {\n    \"value\": \"mixed\",\n    \"source\": {\n      \"url\": \"https://www.therobotreport.com/inaugural-world-humanoid-robot-games-step-into-the-spotlight/\",\n      \"quote\": \"autonomously controlled robots were given a 0.8 time-coefficient advantage\",\n      \"accessed\": \"2026-09-21\"\n    }\n  },\n  \"source\": {\n    \"url\": \"https://mikekalil.com/blog/world-humanoid-robot-games/\",\n    \"quote\": \"most of the robot's actions throughout the games were executed by remote control\",\n    \"accessed\": \"2026-09-21\"\n  },\n  \"notes\": [\n    \"280 teams from 16 countries competed in 487 matches across 26 events, August 15-17, 2025 (therobotreport.com, accessed 2026-09-21).\",\n    \"Autonomy is mixed by design: entries run without remote control get a 0.8x time-coefficient scoring bonus in timed events, but most competitors at this first edition still relied on teleoperation for most of their actions; X-Humanoid's Tiangong is reported as the only entrant that ran entirely on its own (interestingengineering.com, accessed 2026-09-21). Per-result autonomy is recorded on each result entry rather than assumed from the event default alone.\"\n  ]\n}\n"
    },
    {
      "path": "data/robots/1x-neo.json",
      "raw": "{\n  \"slug\": \"1x-neo\",\n  \"name\": \"Neo\",\n  \"manufacturer\": {\n    \"name\": \"1X Technologies\",\n    \"country\": \"NO\",\n    \"url\": \"https://www.1x.tech\"\n  },\n  \"category\": \"full-size\",\n  \"announced\": {\n    \"date\": \"2024-08-01\",\n    \"source\": {\n      \"url\": \"https://www.therobotreport.com/1x-announces-pre-order-launch-neo-humanoid-robot/\",\n      \"quote\": \"NEO's Original Strategy Reveal: August 2024 — when the company unveiled its strategy to develop NEO\",\n      \"accessed\": \"2026-09-20\"\n    }\n  },\n  \"specs\": {\n    \"weight_kg\": {\n      \"value\": 30,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.1x.tech/discover/neo-home-robot\",\n        \"quote\": \"At just 66 pounds (29.94 kg), NEO is capable of lifting over 150 pounds\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"payload_kg\": {\n      \"value\": 68,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.1x.tech/discover/neo-home-robot\",\n        \"quote\": \"capable of lifting over 150 pounds (68 kg) and carrying 55 pounds (24.95kg)\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"hands\": {\n      \"value\": \"22 DoF\",\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.1x.tech/discover/neo-home-robot\",\n        \"quote\": \"22 DoF Hands with Human Level Dexterity\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"hand_dof\": {\n      \"value\": 22,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.1x.tech/discover/neo-home-robot\",\n        \"quote\": \"22 DoF Hands with Human Level Dexterity\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"documentation\",\n        \"publisher_type\": \"official\",\n        \"variant\": \"Neo\",\n        \"review\": {\n          \"status\": \"supported\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The official Neo product page states 22 DoF hands for Neo, matching the recorded value and claim scope.\"\n        }\n      }\n    },\n    \"battery_wh\": {\n      \"value\": 842,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.1x.tech/order\",\n        \"quote\": \"842 Wh\",\n        \"accessed\": \"2026-09-21\"\n      }\n    },\n    \"locomotion\": {\n      \"value\": \"bipedal\",\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.1x.tech/discover/announcement-1x-unveils-neo-beta-a-humanoid-robot-for-the-home\",\n        \"quote\": \"a bipedal humanoid designed for home use\",\n        \"accessed\": \"2026-09-21\"\n      }\n    }\n  },\n  \"price_history\": [\n    {\n      \"date\": \"2025-10-30\",\n      \"amount\": 20000,\n      \"currency\": \"USD\",\n      \"variant\": \"Early Access (purchase, $200 deposit)\",\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.1x.tech/discover/neo-home-robot\",\n        \"quote\": \"$20,000, which includes priority delivery in 2026\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    {\n      \"date\": \"2025-10-30\",\n      \"amount\": 499,\n      \"currency\": \"USD\",\n      \"variant\": \"monthly subscription\",\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.1x.tech/discover/neo-home-robot\",\n        \"quote\": \"A subscription offering is also available for $499 per month\",\n        \"accessed\": \"2026-09-20\"\n      }\n    }\n  ],\n  \"delivery\": {\n    \"status\": \"claimed\",\n    \"timeline\": [\n      {\n        \"date\": \"2024-08-01\",\n        \"event\": \"announced\",\n        \"detail\": \"1X unveils its strategy to develop a consumer home robot, later named Neo.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://www.therobotreport.com/1x-announces-pre-order-launch-neo-humanoid-robot/\",\n          \"quote\": \"NEO's Original Strategy Reveal: August 2024 — when the company unveiled its strategy to develop NEO\",\n          \"accessed\": \"2026-09-20\"\n        }\n      },\n      {\n        \"date\": \"2025-10-30\",\n        \"event\": \"preorders-open\",\n        \"detail\": \"Preorders open with a $200 deposit; company states first units ship to US consumer homes in 2026, other markets from 2027.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://www.1x.tech/discover/neo-home-robot\",\n          \"quote\": \"first orders shipping to consumer homes in 2026\",\n          \"accessed\": \"2026-09-20\"\n        }\n      }\n    ]\n  },\n  \"promises\": [\n    {\n      \"id\": \"1x-neo-us-delivery-2026\",\n      \"claim\": \"First Neo orders shipping to US consumer homes\",\n      \"target\": \"2026\",\n      \"made_on\": \"2025-10-30\",\n      \"quote\": \"NEO is now available for pre-order, with first orders shipping to consumer homes in 2026.\",\n      \"source_url\": \"https://www.therobotreport.com/1x-announces-pre-order-launch-neo-humanoid-robot/\",\n      \"source_name\": \"The Robot Report\",\n      \"accessed\": \"2026-09-27\",\n      \"status\": \"open\"\n    },\n    {\n      \"id\": \"1x-neo-international-2027\",\n      \"claim\": \"Neo delivery expansion beyond the US\",\n      \"target\": \"2027\",\n      \"made_on\": \"2025-10-30\",\n      \"quote\": \"1X said it will start delivering NEOs primarily in the U.S and expand to other markets starting in 2027.\",\n      \"source_url\": \"https://www.therobotreport.com/1x-announces-pre-order-launch-neo-humanoid-robot/\",\n      \"source_name\": \"The Robot Report\",\n      \"accessed\": \"2026-09-27\",\n      \"status\": \"open\"\n    }\n  ],\n  \"order_type\": {\n    \"value\": \"preorder\",\n    \"status\": \"claimed\",\n    \"source\": {\n      \"url\": \"https://www.1x.tech/order\",\n      \"quote\": \"$200 Deposit Due Today\",\n      \"accessed\": \"2026-09-21\"\n    },\n    \"note\": \"1x.tech/order takes a fully refundable $200 deposit against either a $20,000 Ownership plan or a $499/mo subscription, with US deliveries starting in 2026 -- a deposit-and-wait-for-delivery flow, not an immediate cart checkout.\"\n  },\n  \"warranty\": [\n    {\n      \"months\": 36,\n      \"region\": \"US (Early Access / Ownership plan)\",\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.1x.tech/order\",\n        \"quote\": \"Ownership with 3-Year Warranty\",\n        \"accessed\": \"2026-09-21\"\n      }\n    }\n  ],\n  \"capabilities\": [\n    {\n      \"id\": \"teleoperation-shown\",\n      \"status\": \"demonstrated\",\n      \"autonomy\": \"teleoperated\",\n      \"source\": {\n        \"url\": \"https://www.engadget.com/ai/1x-neo-is-a-20000-home-robot-that-will-learn-chores-via-teleoperation-040252200.html\",\n        \"quote\": \"much of the work will be done by teleoperators in the beginning\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"independent\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The text source was reviewed, but no video segment was watched; the existing capability status and autonomy classification for Neo were not fully verified.\"\n        }\n      },\n      \"note\": \"1X CEO Bernt Børnich, quoted 2025-10-29, confirms Neo home demos and early customer units rely on remote human operators (1X calls them 'Experts') viewing the home via the robot's cameras, not autonomous operation.\"\n    }\n  ],\n  \"notes\": [\n    \"As of 2026-09-20, 1X has not published evidence of any consumer unit delivered — only preorder/deposit terms and a 2026 shipping promise. Per this dataset's rules, that keeps delivery.status at claimed, not shipped, regardless of marketing language like \\\"order today\\\".\",\n    \"Height was not found stated on 1X's own current page during this build; third-party coverage estimates \\\"5-foot-6\\\" but that is not a manufacturer source, so height_cm is omitted here rather than sourced to a secondary outlet.\",\n    \"charge_time_min, battery_swappable, actuator_torque_nm, and sdk were left out (2026-09-21): 1x.tech/order states only a charge rate (\\\"6min per hour runtime\\\", not a single full-charge minutes figure) and does not state swappability, joint torque, or any developer SDK/API.\"\n  ],\n  \"updated\": \"2026-09-21\",\n  \"simulation\": {\n    \"review\": {\n      \"status\": \"not_confirmed\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://www.1x.tech\"\n      ],\n      \"reason\": \"Targeted searches found no confirmed model for this record; does not mean unavailable.\"\n    },\n    \"artifacts\": []\n  },\n  \"actuator_architecture\": {\n    \"review\": {\n      \"status\": \"found\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://www.1x.tech/discover/neo-factory\"\n      ],\n      \"reason\": \"Exact-variant actuator architecture evidence was found in the listed official source and is recorded per group.\"\n    },\n    \"groups\": [\n      {\n        \"id\": \"revo2-electric-motor\",\n        \"scope\": \"Revo2 actuator motor\",\n        \"variant\": \"Neo\",\n        \"drive\": \"electric\",\n        \"transmission\": null,\n        \"motion\": null,\n        \"architecture\": null,\n        \"status\": \"claimed\",\n        \"source\": {\n          \"url\": \"https://www.1x.tech/discover/neo-factory\",\n          \"quote\": \"the world’s highest-performance, lowest cost electric motor for humanoid robotics\",\n          \"accessed\": \"2026-09-27\",\n          \"media_type\": \"article\",\n          \"publisher_type\": \"official\",\n          \"variant\": \"Neo\",\n          \"review\": {\n            \"status\": \"supported\",\n            \"method\": \"text\",\n            \"checked\": \"2026-09-27\",\n            \"reason\": \"The official Neo factory article explicitly describes its humanoid actuator motor as electric.\"\n          }\n        }\n      },\n      {\n        \"id\": \"tendon-actuation\",\n        \"scope\": \"Neo actuation transmission\",\n        \"variant\": \"Neo\",\n        \"drive\": null,\n        \"transmission\": \"tendon\",\n        \"motion\": null,\n        \"architecture\": null,\n        \"status\": \"claimed\",\n        \"source\": {\n          \"url\": \"https://www.1x.tech/discover/neo-factory\",\n          \"quote\": \"the heart of NEO’s tendon-driven actuation system\",\n          \"accessed\": \"2026-09-27\",\n          \"media_type\": \"article\",\n          \"publisher_type\": \"official\",\n          \"variant\": \"Neo\",\n          \"review\": {\n            \"status\": \"supported\",\n            \"method\": \"text\",\n            \"checked\": \"2026-09-27\",\n            \"reason\": \"The official Neo factory article explicitly describes Neo's actuation system as tendon-driven.\"\n          }\n        }\n      }\n    ]\n  }\n}\n"
    },
    {
      "path": "data/robots/agibot-a2.json",
      "raw": "{\n  \"slug\": \"agibot-a2\",\n  \"name\": \"A2\",\n  \"manufacturer\": {\n    \"name\": \"AgiBot (Zhiyuan Robotics)\",\n    \"country\": \"CN\",\n    \"url\": \"https://www.agibot.com\"\n  },\n  \"category\": \"full-size\",\n  \"announced\": {\n    \"date\": \"2024-08-18\",\n    \"source\": {\n      \"url\": \"https://inspenet.com/en/noticias/agibot-present-5-new-humanoid-robots/\",\n      \"quote\": \"169 centimeters tall\",\n      \"accessed\": \"2026-09-20\"\n    }\n  },\n  \"specs\": {\n    \"height_cm\": {\n      \"value\": 169,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.agibot.com/products/A2\",\n        \"quote\": \"169 cm\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"weight_kg\": {\n      \"value\": 69,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.agibot.com/products/A2\",\n        \"quote\": \"69 kg\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"dof\": {\n      \"value\": 40,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.agibot.com/products/A2\",\n        \"quote\": \"40 + Active DoF\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"official\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The reviewed source did not establish both the exact recorded value and the concrete robot variant for this specification.\"\n        }\n      }\n    },\n    \"battery_runtime_min\": {\n      \"value\": 120,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.agibot.com/products/A2\",\n        \"quote\": \"2 h Support battery swapping\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"actuator_torque_nm\": {\n      \"value\": 512,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.agibot.com/products/A2\",\n        \"quote\": \"delivering peak torque of 512Nm and stable operation for thousands of hours\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"official\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The reviewed source did not establish both the exact recorded value and the concrete robot variant for this specification.\"\n        }\n      }\n    },\n    \"battery_wh\": {\n      \"value\": 700,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.agibot.com/products/A2\",\n        \"quote\": \"Battery 700 wh\",\n        \"accessed\": \"2026-09-21\"\n      }\n    },\n    \"battery_swappable\": {\n      \"value\": true,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.agibot.com/products/A2\",\n        \"quote\": \"Runtime 2 h Support battery swapping\",\n        \"accessed\": \"2026-09-21\"\n      }\n    },\n    \"locomotion\": {\n      \"value\": \"bipedal\",\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.agibot.com/products/A2\",\n        \"quote\": \"Autonomous Mobility and Reliable Walking\",\n        \"accessed\": \"2026-09-21\"\n      }\n    }\n  },\n  \"price_history\": [],\n  \"delivery\": {\n    \"status\": \"claimed\",\n    \"timeline\": [\n      {\n        \"date\": \"2024-08-18\",\n        \"event\": \"announced\",\n        \"detail\": \"Unveiled at AgiBot's 'Commercial Voyage' 2024 product launch alongside four sibling models (A2-Max, A2-W, X1, X1-W).\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://inspenet.com/en/noticias/agibot-present-5-new-humanoid-robots/\",\n          \"quote\": \"169 centimeters tall\",\n          \"accessed\": \"2026-09-20\"\n        }\n      },\n      {\n        \"date\": \"2025-12-02\",\n        \"event\": \"volume-estimate\",\n        \"detail\": \"Shown as 'special guest' at a Fortune China event in Macau and awarded Fortune China's Best Design Award 2025; press release does not disclose unit counts.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://www.prnewswire.com/news-releases/agibot-makes-debut-at-fortune-event-with-full-size-humanoid-robot-agibot-a2-as-special-guest-302630428.html\",\n          \"quote\": \"AGIBOT Makes Debut at Fortune Event with Full-Size Humanoid Robot AGIBOT A2 as Special Guest\",\n          \"accessed\": \"2026-09-20\"\n        }\n      }\n    ]\n  },\n  \"sdk\": {\n    \"open_source\": true,\n    \"ros\": \"ros2\",\n    \"url\": \"https://github.com/AimRT/AimRT\",\n    \"status\": \"shipped\",\n    \"source\": {\n      \"url\": \"https://github.com/AimRT/AimRT\",\n      \"quote\": \"AimRT also provides a comprehensive plug-in development interface, which is highly scalable and compatible with ROS2, HTTP, Grpc and other traditional robot ecosystems\",\n      \"accessed\": \"2026-09-21\"\n    },\n    \"note\": \"AGIBOT A2's own product page links its 'Open Source' section directly to AimRT (aimrt.org, GitHub org github.com/AimRT/AimRT), the runtime framework AgiBot publishes for its robots; GitHub reports the license metadata as 'Other/NOASSERTION' rather than a named permissive license, but the source is publicly published. This is the general AgiBot runtime, not an A2-exclusive SDK repo.\"\n  },\n  \"order_type\": {\n    \"value\": \"quote\",\n    \"status\": \"claimed\",\n    \"source\": {\n      \"url\": \"https://www.agibot.com/products/A2\",\n      \"quote\": \"for business inquiries. Contact us\",\n      \"accessed\": \"2026-09-21\"\n    }\n  },\n  \"notes\": [\n    \"No sourced warranty terms or charge-time-in-minutes figure for A2 could be found on agibot.com/products/A2 (accessed 2026-09-21); both fields left out rather than guessed.\",\n    \"AgiBot (the brand) is run by Shanghai Zhiyuan New Innovation Technology Co., Ltd. ('Zhiyuan Robotics'); the two names refer to the same company in coverage.\",\n    \"Walking speed (3.3 m/s) and payload (15 kg) are widely repeated by secondary outlets (e.g. RoboZaps, Aparobot) citing the August 2024 launch event, but were not found on a page directly attributable to the manufacturer during this build, so they are omitted here rather than sourced to a non-manufacturer repeat of the claim.\",\n    \"No manufacturer or press source with a named customer and delivery evidence (invoice, serial number, unboxing, customs record) was found during this build; AgiBot separately claims a '5,000th mass-produced humanoid robot' milestone across its whole product line (PR Newswire, 2026), but that figure is not broken out by model, so delivery status here stays 'claimed' rather than 'shipped'.\",\n    \"AgiBot's own product page (agibot.com/products/A2) does not list a price; no primary price source was found during this build, so price_history is left empty rather than using third-party reseller prices (e.g. Top3DShop, RoboZaps).\",\n    \"Capabilities research (2026-09-20): AgiBot's own product page (agibot.com/products/A2, accessed 2026-09-20) lists a 'Dexterous Hand', 'Force/Torque Sensors' and 'L4-level autonomous mobility' among the A2's features, and separately advertises 'ActionGPT' for 'natural movement generation ... for task execution'. These are manufacturer capability claims, but the page gives no hand DOF number, no video/demo link, and no description of a specific demonstrated task (e.g. a bimanual grasp or a stair climb) that would satisfy this schema's 'demonstrated' bar or match a fixed capability id with confidence. Reseller/aggregator pages (Top3DShop, Americansatellite) repeat a 19-DOF dexterous hand figure and stair/curb navigation claims, but do not trace these to a primary AgiBot source. No capabilities entry was added for this build rather than recording an under-sourced claim; this should be revisited if a primary AgiBot demo video or spec page with DOF figures surfaces.\"\n  ],\n  \"updated\": \"2026-09-21\",\n  \"simulation\": {\n    \"review\": {\n      \"status\": \"not_confirmed\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://www.agibot.com\"\n      ],\n      \"reason\": \"Targeted searches found no confirmed model for this record; does not mean unavailable.\"\n    },\n    \"artifacts\": []\n  },\n  \"actuator_architecture\": {\n    \"review\": {\n      \"status\": \"not_confirmed\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://www.agibot.com\"\n      ],\n      \"reason\": \"Targeted actuator searches did not confirm an exact-variant architecture claim for this record; this does not mean none exists.\"\n    },\n    \"groups\": []\n  }\n}\n"
    },
    {
      "path": "data/robots/agility-digit-gen4.json",
      "raw": "{\n  \"slug\": \"agility-digit-gen4\",\n  \"name\": \"Digit (2020 generation)\",\n  \"manufacturer\": {\n    \"name\": \"Agility Robotics\",\n    \"country\": \"US\",\n    \"url\": \"https://www.agilityrobotics.com\"\n  },\n  \"category\": \"full-size\",\n  \"announced\": {\n    \"date\": \"2019-10-15\",\n    \"source\": {\n      \"url\": \"https://www.futuretimeline.net/blog/2019/10/15.htm\",\n      \"quote\": \"The company, based in Albany, Oregon, USA, has just revealed the latest iteration of its 'Digit' robot.\",\n      \"accessed\": \"2026-09-20\"\n    }\n  },\n  \"specs\": {\n    \"locomotion\": {\n      \"value\": \"bipedal\",\n      \"status\": \"shipped\",\n      \"source\": {\n        \"url\": \"https://www.aboutamazon.com/news/operations/amazon-introduces-new-robotics-solutions\",\n        \"quote\": \"we will begin testing their bipedal robot, Digit, for use in our operations\",\n        \"accessed\": \"2026-09-21\"\n      },\n      \"note\": \"Amazon's own newsroom names Digit a 'bipedal robot' directly, for the same generation covered by this record's shipped Ford/Amazon/GXO deployments.\"\n    }\n  },\n  \"price_history\": [],\n  \"delivery\": {\n    \"status\": \"shipped\",\n    \"timeline\": [\n      {\n        \"date\": \"2020-01-06\",\n        \"event\": \"first-customer-delivery\",\n        \"detail\": \"Ford Motor Company becomes Digit's first named commercial customer, testing it for last-mile delivery paired with autonomous vehicles.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://en.wikipedia.org/wiki/Agility_Robotics\",\n          \"quote\": \"Ford Motor Company (2020) — First commercial customer; Purpose: explore last-mile delivery\",\n          \"accessed\": \"2026-09-27\",\n          \"media_type\": \"article\",\n          \"publisher_type\": \"independent\",\n          \"review\": {\n            \"status\": \"insufficient\",\n            \"method\": \"text\",\n            \"checked\": \"2026-09-27\",\n            \"reason\": \"The reviewed text does not establish a first-customer-delivery event for the exact recorded variant and date; testing, integration, or presence is not delivery evidence.\"\n          }\n        },\n        \"sector\": \"automotive\"\n      },\n      {\n        \"date\": \"2024-01-01\",\n        \"event\": \"first-customer-delivery\",\n        \"detail\": \"GXO Logistics deploys Digit at its SPANX facility near Atlanta, Georgia, under a Robots-as-a-Service contract; GXO's own news page shows a photo of the unit and describes it as GXO's most advanced live humanoid deployment.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://gxo.com/news_article/shaping-supply-chains-with-humanoid-technology/\",\n          \"quote\": \"GXO has made the most progress with Digit, a humanoid robot that has been optimized to fit our needs and integrated with other automated technology in the warehouse.\",\n          \"accessed\": \"2026-09-27\",\n          \"media_type\": \"article\",\n          \"publisher_type\": \"independent\",\n          \"review\": {\n            \"status\": \"insufficient\",\n            \"method\": \"text\",\n            \"checked\": \"2026-09-27\",\n            \"reason\": \"The reviewed text does not establish a first-customer-delivery event for the exact recorded variant and date; testing, integration, or presence is not delivery evidence.\"\n          }\n        },\n        \"sector\": \"logistics\"\n      },\n      {\n        \"date\": \"2023-10-18\",\n        \"event\": \"first-customer-delivery\",\n        \"detail\": \"Amazon begins testing Digit at its own robotics facility for tote recycling; Amazon's own newsroom names itself as the customer and publishes photos of the physical unit working alongside Amazon employees.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://www.aboutamazon.com/news/operations/amazon-introduces-new-robotics-solutions\",\n          \"quote\": \"Broadening our partnership with Agility Robotics, we will begin testing their bipedal robot, Digit, for use in our operations.\",\n          \"accessed\": \"2026-09-27\",\n          \"media_type\": \"article\",\n          \"publisher_type\": \"independent\",\n          \"review\": {\n            \"status\": \"insufficient\",\n            \"method\": \"text\",\n            \"checked\": \"2026-09-27\",\n            \"reason\": \"The reviewed text does not establish a first-customer-delivery event for the exact recorded variant and date; testing, integration, or presence is not delivery evidence.\"\n          }\n        },\n        \"sector\": \"logistics\"\n      }\n    ]\n  },\n  \"capabilities\": [\n    {\n      \"id\": \"box-handling\",\n      \"status\": \"shipped\",\n      \"autonomy\": \"unknown\",\n      \"source\": {\n        \"url\": \"https://www.agilityrobotics.com/content/digit-moves-over-100k-totes\",\n        \"quote\": \"picking items on and off an AMR to a conveyor\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"official\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The text source was reviewed, but no video segment was watched; the existing capability status and autonomy classification for Digit (2020 generation) were not fully verified.\"\n        }\n      },\n      \"note\": \"GXO's Flowery Branch facility, named customer, 100,000+ totes moved by late 2025. Agility's own page describes the task and separately states the underlying pipeline 'blends traditional control methods, teleoperated demonstrations, policy training, and refinement' -- it does not explicitly say current day-to-day operation runs with no human in the loop, so autonomy is recorded as unknown rather than autonomous, per this dataset's strict rule.\"\n    }\n  ],\n  \"promises\": [\n    {\n      \"id\": \"agility-digit-app-delivery-2024\",\n      \"claim\": \"First Digit deliveries to Agility Partner Program customers\",\n      \"target\": \"2024\",\n      \"made_on\": \"2023-09-18\",\n      \"quote\": \"customers that are participating in the Agility Partner Program (APP) can expect delivery of the first Digits in 2024, with general market availability in 2025\",\n      \"source_url\": \"https://www.agilityrobotics.com/content/opening-robofab-worlds-first-factory-for-humanoid-robots\",\n      \"source_name\": \"Agility Robotics, RoboFab opening announcement\",\n      \"accessed\": \"2026-09-27\",\n      \"status\": \"met\",\n      \"met_evidence\": \"https://gxo.com/news_article/shaping-supply-chains-with-humanoid-technology/\"\n    },\n    {\n      \"id\": \"agility-digit-general-availability-2025\",\n      \"claim\": \"General market availability of Digit\",\n      \"target\": \"2025\",\n      \"made_on\": \"2023-09-18\",\n      \"quote\": \"with general market availability in 2025\",\n      \"source_url\": \"https://www.agilityrobotics.com/content/opening-robofab-worlds-first-factory-for-humanoid-robots\",\n      \"source_name\": \"Agility Robotics, RoboFab opening announcement\",\n      \"accessed\": \"2026-09-27\",\n      \"status\": \"open\"\n    }\n  ],\n  \"media\": [\n    {\n      \"type\": \"patent\",\n      \"file\": \"media/agility-digit-gen4/usd888120-fig3.png\",\n      \"caption\": \"Figure 3 (front view) from Agility Robotics' design patent for this Digit generation, filed 2019-10-15.\",\n      \"source\": {\n        \"url\": \"https://patents.google.com/patent/USD888120S1/en\",\n        \"accessed\": \"2026-09-21\"\n      },\n      \"license\": {\n        \"name\": \"USPTO design patent\",\n        \"terms_url\": \"https://patents.google.com/patent/USD888120S1/en\",\n        \"note\": \"Public record; design patent drawing, not a copyrighted photograph. Priority date 2019-01-22, filing date 2019-10-15, matching this generation's announcement date.\"\n      },\n      \"patent_number\": \"USD888,120 S\",\n      \"credit\": \"USPTO / Agility Robotics, Inc.\"\n    }\n  ],\n  \"notes\": [\n    \"This record covers the hardware generation of Digit that actually shipped to named customers (Ford 2020, Amazon 2023, GXO 2023-2024; Agility also claims a Toyota Motor Manufacturing Canada deployment per its own account, not independently sourced here).\",\n    \"No independently sourced height/weight/payload/battery specs for this specific generation were located during this build, so specs is intentionally empty rather than reusing the newer Digit 5 numbers. See agility-digit for the current (Digit 5) generation's claimed specs, which is a different, not-yet-shipped hardware generation.\",\n    \"Digit is sold as Robots-as-a-Service, not a one-time purchase, so price_history is intentionally empty.\",\n    \"Shipped bar applied (2026-09-20): both GXO's own news page (gxo.com, real photo file Digit-image-min.jpg served from GXO's own domain) and Amazon's own newsroom (aboutamazon.com, two photos of the physical unit) name themselves as customers with images of the unit on their own channels, replacing the earlier Wikipedia-sourced GXO citation and adding Amazon as a second named, photographed 2023-2024 delivery of this same generation.\",\n    \"actuator_torque_nm, battery_wh, charge_time_min, sdk, warranty, and order_type were left out (2026-09-21): no independently sourced spec sheet for this specific (2020-2024) hardware generation was located, consistent with the existing note that height/weight/battery specs for this generation are intentionally left unsourced rather than reused from the newer Digit 5. delivery.timeline[].sector set to automotive (Ford) and logistics (GXO, Amazon).\"\n  ],\n  \"updated\": \"2026-09-21\",\n  \"simulation\": {\n    \"review\": {\n      \"status\": \"not_confirmed\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://www.agilityrobotics.com\"\n      ],\n      \"reason\": \"Targeted searches found no confirmed model for this record; does not mean unavailable.\"\n    },\n    \"artifacts\": []\n  },\n  \"actuator_architecture\": {\n    \"review\": {\n      \"status\": \"not_confirmed\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://www.agilityrobotics.com\"\n      ],\n      \"reason\": \"Targeted actuator searches did not confirm an exact-variant architecture claim for this record; this does not mean none exists.\"\n    },\n    \"groups\": []\n  }\n}\n"
    },
    {
      "path": "data/robots/agility-digit.json",
      "raw": "{\n  \"slug\": \"agility-digit\",\n  \"name\": \"Digit 5\",\n  \"manufacturer\": {\n    \"name\": \"Agility Robotics\",\n    \"country\": \"US\",\n    \"url\": \"https://www.agilityrobotics.com\"\n  },\n  \"category\": \"full-size\",\n  \"announced\": {\n    \"date\": \"2026-09-15\",\n    \"source\": {\n      \"url\": \"https://www.agilityrobotics.com/content/agility-unveils-digit-5-humanoid-robot-built-for-cooperatively-safe-work-at-scale\",\n      \"quote\": \"Agility announces next-generation Digit 5\",\n      \"accessed\": \"2026-09-20\"\n    }\n  },\n  \"specs\": {\n    \"height_cm\": {\n      \"value\": 181,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.agilityrobotics.com/content/agility-unveils-digit-5-humanoid-robot-built-for-cooperatively-safe-work-at-scale\",\n        \"quote\": \"stands 5' 11\\\" (1.81 m)\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"weight_kg\": {\n      \"value\": 129,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.agilityrobotics.com/content/agility-unveils-digit-5-humanoid-robot-built-for-cooperatively-safe-work-at-scale\",\n        \"quote\": \"weighs 284 lb. (129 kg)\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"payload_kg\": {\n      \"value\": 22.7,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.agilityrobotics.com/content/agility-unveils-digit-5-humanoid-robot-built-for-cooperatively-safe-work-at-scale\",\n        \"quote\": \"repeatedly lift up to 50 lb. (22.7 kg) loads\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"battery_runtime_min\": {\n      \"value\": 90,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.agilityrobotics.com/content/agility-unveils-digit-5-humanoid-robot-built-for-cooperatively-safe-work-at-scale\",\n        \"quote\": \"90-minute runtime battery system charges in just 9 minutes\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"charge_time_min\": {\n      \"value\": 9,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.agilityrobotics.com/content/agility-unveils-digit-5-humanoid-robot-built-for-cooperatively-safe-work-at-scale\",\n        \"quote\": \"90-minute runtime battery system charges in just 9 minutes\",\n        \"accessed\": \"2026-09-21\"\n      }\n    }\n  },\n  \"price_history\": [],\n  \"delivery\": {\n    \"status\": \"claimed\",\n    \"timeline\": [\n      {\n        \"date\": \"2026-09-15\",\n        \"event\": \"announced\",\n        \"detail\": \"Agility announces next-generation Digit 5 (1.81 m, 129 kg), citing more than $300 million in multi-year customer orders and early access targeted for H1 2027. No named-customer delivery of this generation has been reported yet.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://www.agilityrobotics.com/content/agility-unveils-digit-5-humanoid-robot-built-for-cooperatively-safe-work-at-scale\",\n          \"quote\": \"more than $300 million in multi-year customer orders for Digit 5\",\n          \"accessed\": \"2026-09-20\"\n        }\n      }\n    ]\n  },\n  \"promises\": [\n    {\n      \"id\": \"agility-digit-5-early-access\",\n      \"claim\": \"Digit 5 early access\",\n      \"target\": \"2027-H1\",\n      \"made_on\": \"2026-09-15\",\n      \"quote\": \"Early access to Digit 5 is expected to begin in the first half of 2027\",\n      \"source_url\": \"https://www.agilityrobotics.com/content/agility-unveils-digit-5-humanoid-robot-built-for-cooperatively-safe-work-at-scale\",\n      \"source_name\": \"Agility Robotics, Digit 5 announcement\",\n      \"accessed\": \"2026-09-27\",\n      \"status\": \"open\"\n    },\n    {\n      \"id\": \"agility-digit-5-general-availability\",\n      \"claim\": \"Digit 5 general availability for manufacturing, warehouse and distribution operators\",\n      \"target\": \"2027\",\n      \"made_on\": \"2026-09-15\",\n      \"quote\": \"general availability for manufacturing, warehouse and distribution operators expected by the end of 2027\",\n      \"source_url\": \"https://www.agilityrobotics.com/content/agility-unveils-digit-5-humanoid-robot-built-for-cooperatively-safe-work-at-scale\",\n      \"source_name\": \"Agility Robotics, Digit 5 announcement\",\n      \"accessed\": \"2026-09-27\",\n      \"status\": \"open\"\n    }\n  ],\n  \"media\": [\n    {\n      \"type\": \"patent\",\n      \"file\": \"media/agility-digit/usd888120-fig1.png\",\n      \"caption\": \"Figure 1 from Agility Robotics' design patent for its bipedal robot.\",\n      \"source\": {\n        \"url\": \"https://patents.google.com/patent/USD888120S1/en\",\n        \"accessed\": \"2026-09-21\"\n      },\n      \"license\": {\n        \"name\": \"USPTO design patent\",\n        \"terms_url\": \"https://patents.google.com/patent/USD888120S1/en\",\n        \"note\": \"Public record; design patent drawing, not a copyrighted photograph.\"\n      },\n      \"patent_number\": \"USD888,120 S\",\n      \"credit\": \"USPTO / Agility Robotics, Inc.\",\n      \"depicts_current\": false\n    }\n  ],\n  \"notes\": [\n    \"This record covers only the newly announced Digit 5 generation (Sept 2026). Its specs (height/weight/payload/battery) are manufacturer claims for early access targeted H1 2027; no shipped or demonstrated evidence exists yet for this generation.\",\n    \"The prior generation's named, operating deployments (Ford 2020, GXO 2023-2024) are a different hardware generation and are tracked separately as agility-digit-gen4, so shipped status is never implied for a generation that has not shipped.\",\n    \"Digit is sold as Robots-as-a-Service, not a one-time purchase, so price_history is intentionally empty — no credible per-unit or subscription price was located from a manufacturer source during this build.\",\n    \"actuator_torque_nm, battery_wh, battery_swappable, sdk, warranty, and order_type were left out (2026-09-21): the Digit 5 announcement discloses only the 90-min/9-min runtime-and-charge figures and 'proprietary cycloidal actuator technology' without an Nm value, and directs buyers to a sales/quote page ('Deploy Digit') without a literal, quotable ordering-model or warranty statement.\",\n    \"locomotion left out (2026-09-21): agilityrobotics.com/solutions/digit-5, the Sept 2026 Digit 5 press release, IEEE Spectrum's coverage, and Agility's general Digit page were all checked; each describes leg joints, reach, or general humanoid-robot history in a bipedal category, but none gave a literal sentence stating Digit 5 itself is bipedal/two-legged. Left out rather than reused from the gen4 record's Amazon-newsroom quote, which covers a different hardware generation.\"\n  ],\n  \"updated\": \"2026-09-21\",\n  \"simulation\": {\n    \"review\": {\n      \"status\": \"not_confirmed\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://www.agilityrobotics.com\"\n      ],\n      \"reason\": \"Targeted searches found no confirmed model for this record; does not mean unavailable.\"\n    },\n    \"artifacts\": []\n  },\n  \"actuator_architecture\": {\n    \"review\": {\n      \"status\": \"not_confirmed\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://www.agilityrobotics.com\"\n      ],\n      \"reason\": \"Targeted actuator searches did not confirm an exact-variant architecture claim for this record; this does not mean none exists.\"\n    },\n    \"groups\": []\n  }\n}\n"
    },
    {
      "path": "data/robots/apptronik-apollo.json",
      "raw": "{\n  \"slug\": \"apptronik-apollo\",\n  \"name\": \"Apollo\",\n  \"manufacturer\": {\n    \"name\": \"Apptronik\",\n    \"country\": \"US\",\n    \"url\": \"https://apptronik.com\"\n  },\n  \"category\": \"full-size\",\n  \"announced\": {\n    \"date\": \"2023-08-23\",\n    \"source\": {\n      \"url\": \"https://www.therobotreport.com/apptronik-unveils-apollo-humanoid-robot/\",\n      \"quote\": \"Apollo is the first commercial humanoid robot that was designed for friendly interaction, mass manufacturability, performance, and safety.\",\n      \"accessed\": \"2026-09-20\"\n    }\n  },\n  \"specs\": {\n    \"height_cm\": {\n      \"value\": 172,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.therobotreport.com/apptronik-unveils-apollo-humanoid-robot/\",\n        \"quote\": \"5 feet 8 inches (172 cm) tall\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"weight_kg\": {\n      \"value\": 72.5,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.therobotreport.com/apptronik-unveils-apollo-humanoid-robot/\",\n        \"quote\": \"160 lbs (72.5kg)\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"payload_kg\": {\n      \"value\": 25,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.therobotreport.com/apptronik-unveils-apollo-humanoid-robot/\",\n        \"quote\": \"Capable of lifting 55 lbs (25kg)\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"battery_runtime_min\": {\n      \"value\": 240,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.therobotreport.com/apptronik-unveils-apollo-humanoid-robot/\",\n        \"quote\": \"the swappable battery to power the robot for 4 hours\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"battery_swappable\": {\n      \"value\": true,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.therobotreport.com/apptronik-unveils-apollo-humanoid-robot/\",\n        \"quote\": \"the swappable battery to power the robot for 4 hours\",\n        \"accessed\": \"2026-09-21\"\n      }\n    }\n  },\n  \"price_history\": [],\n  \"delivery\": {\n    \"status\": \"shipped\",\n    \"timeline\": [\n      {\n        \"date\": \"2023-08-23\",\n        \"event\": \"announced\",\n        \"detail\": \"Apptronik unveiled Apollo, targeting an end-of-2024 release for warehouse and manufacturing tasks.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://www.therobotreport.com/apptronik-unveils-apollo-humanoid-robot/\",\n          \"quote\": \"Apollo is the first commercial humanoid robot that was designed for friendly interaction, mass manufacturability, performance, and safety.\",\n          \"accessed\": \"2026-09-20\"\n        }\n      },\n      {\n        \"date\": \"2024-03-15\",\n        \"event\": \"first-demo\",\n        \"detail\": \"Mercedes-Benz began testing Apollo at a Hungarian manufacturing plant under a pilot agreement; photos show a physical unit on site, but the article notes scale and scope were unclear.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://www.therobotreport.com/mercedes-benz-testing-apollo-humanoid/\",\n          \"quote\": \"Apptronik today announced that leading automotive brand Mercedes-Benz is testing its Apollo humanoid robot.\",\n          \"accessed\": \"2026-09-20\"\n        },\n        \"sector\": \"automotive\"\n      },\n      {\n        \"date\": \"2025-03-18\",\n        \"event\": \"first-customer-delivery\",\n        \"detail\": \"Pilot at Mercedes-Benz Digital Factory Campus Berlin-Marienfelde: Mercedes-Benz's own press release confirms Apollo units are physically on site collecting production data, published with photos on Mercedes-Benz's own media channel.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://media.mbusa.com/releases/release-cf381cd2fcff624ae37d3911631103dc-mercedes-benz-accelerates-the-transformation-of-its-production-network-by-integrating-ai-and-humanoid-robots-at-its-digital-factory-campus-in-berlin\",\n          \"quote\": \"Mercedes-Benz is testing the use of Apollo, a humanoid robot from Apptronik, in production.\",\n          \"accessed\": \"2026-09-20\",\n          \"media_type\": \"article\",\n          \"publisher_type\": \"official\",\n          \"review\": {\n            \"status\": \"inaccessible\",\n            \"method\": \"text\",\n            \"checked\": \"2026-09-27\",\n            \"reason\": \"The source returned HTTP 404 during the review, so the claim could not be re-established.\"\n          }\n        },\n        \"sector\": \"automotive\"\n      }\n    ]\n  },\n  \"capabilities\": [\n    {\n      \"id\": \"teleoperation-shown\",\n      \"status\": \"demonstrated\",\n      \"autonomy\": \"teleoperated\",\n      \"source\": {\n        \"url\": \"https://www.manus-meta.com/use-cases/mercedes-benz-deploys-apptroniks-apollo-at-factory-floor-using-manus-gloves\",\n        \"quote\": \"human operators wearing MANUS gloves directly teleoperating Apollo demonstrated target movements while the system logged synchronized data in real time.\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"official\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The text source was reviewed, but no video segment was watched; the existing capability status and autonomy classification for Apollo were not fully verified.\"\n        }\n      },\n      \"note\": \"Describes the Mercedes-Benz Digital Factory Campus Berlin-Marienfelde pilot; published by MANUS (the glove vendor involved in the deployment), an independent third party to Apptronik and Mercedes-Benz, not a manufacturer highlight reel.\"\n    }\n  ],\n  \"notes\": [\n    \"Apptronik's own site (apptronik.com/apollo) returned no fetchable content during this research session; all specs here are sourced from The Robot Report's launch and Mercedes-Benz pilot coverage instead.\",\n    \"Shipped bar applied (2026-09-20): Mercedes-Benz's own press release (media.mbusa.com, 2025-03-18) names Mercedes-Benz Digital Factory Campus Berlin-Marienfelde as the site, confirms Apollo units are physically present and collecting production data, and is published with a photo gallery on Mercedes-Benz's own media channel. Per this site's shipped rule (named customer + image via customer's or an independent channel; invoice/serial/unboxing/customs are alternatives, not an added requirement), this qualifies as shipped with 'pilot' noted in the detail, since Mercedes-Benz itself frames it as testing. Upgraded from demonstrated to shipped; an earlier note here required an invoice/serial/unboxing/customs record in addition to the photo, which was too strict, and is removed.\",\n    \"The separate GXO/Apptronik relationship (gxo.com, Aug 2024) does not clear the same bar: GXO's own news page (https://gxo.com/news_article/shaping-supply-chains-with-humanoid-technology/) lists Apollo alongside Digit and 'Reflex' but describes GXO as still evaluating Apollo in a lab setting before any live-facility deployment, unlike Digit which GXO describes as already live -- so Apollo-at-GXO is not treated as a second shipped delivery here; the Mercedes-Benz pilot is what carries this record to shipped.\",\n    \"actuator_torque_nm, battery_wh, charge_time_min, sdk, warranty, and order_type were left out (2026-09-21): apptronik.com/apollo returned HTTP 404 during this pass, and no other manufacturer page with a literal, directly quotable figure for these fields was located; Apollo is sold via direct enterprise pilots (Mercedes-Benz, GXO), not a public storefront. delivery.timeline[].sector set to automotive on the Mercedes-Benz events.\",\n    \"locomotion left out (2026-09-21): this record covers the original 2023 Apollo generation, not the later modular Apollo 2 (which apptronik.com/apollo/apollo-2 explicitly offers as \\\"a bipedal configuration\\\" or \\\"a wheeled base\\\"). The Robot Report's 2023 unveil article and the Mercedes-Benz Digital Factory Campus Berlin-Marienfelde press release/MANUS glove coverage used for this record's shipped status do not state which mobility base was used on site. No literal quote pins the original Apollo or its Mercedes deployment to legs vs. wheels, so the field stays empty per the task's Apollo special case (use what the source says about the Mercedes deployment, else omit).\"\n  ],\n  \"updated\": \"2026-09-21\",\n  \"media\": [\n    {\n      \"type\": \"patent\",\n      \"file\": \"media/apptronik-apollo/usd993296-fig1.png\",\n      \"caption\": \"Figure 1 from Apptronik's design patent for a robotic upper body.\",\n      \"source\": {\n        \"url\": \"https://ppubs.uspto.gov/pubwebapp/\",\n        \"accessed\": \"2026-09-21\"\n      },\n      \"license\": {\n        \"name\": \"USPTO design patent\",\n        \"terms_url\": \"https://www.uspto.gov/patents/basics/types-patent-applications/design-patent-application\",\n        \"note\": \"Public record; design patent drawing, not a copyrighted photograph.\"\n      },\n      \"patent_number\": \"USD993,296 S\",\n      \"credit\": \"USPTO / Apptronik, Inc.\"\n    }\n  ],\n  \"simulation\": {\n    \"review\": {\n      \"status\": \"not_confirmed\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://apptronik.com\"\n      ],\n      \"reason\": \"Targeted searches found no confirmed model for this record; does not mean unavailable.\"\n    },\n    \"artifacts\": []\n  },\n  \"actuator_architecture\": {\n    \"review\": {\n      \"status\": \"not_confirmed\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://apptronik.com\"\n      ],\n      \"reason\": \"Targeted actuator searches did not confirm an exact-variant architecture claim for this record; this does not mean none exists.\"\n    },\n    \"groups\": []\n  }\n}\n"
    },
    {
      "path": "data/robots/booster-t1.json",
      "raw": "{\n  \"slug\": \"booster-t1\",\n  \"name\": \"T1\",\n  \"manufacturer\": {\n    \"name\": \"Booster Robotics\",\n    \"country\": \"CN\",\n    \"url\": \"https://www.booster.tech\"\n  },\n  \"category\": \"research\",\n  \"announced\": {\n    \"date\": \"2024-12-18\",\n    \"source\": {\n      \"url\": \"https://www.booster.tech/news/\",\n      \"quote\": \"Booster Robotics Becomes RoboCup's Official Partner! Booster T1 shows excellent performance in the football-playing scenario. It is durable and supports secondary development.\",\n      \"accessed\": \"2026-09-20\"\n    }\n  },\n  \"specs\": {\n    \"height_cm\": {\n      \"value\": 118,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.booster.tech/booster-t1/\",\n        \"quote\": \"Dimensions: 118×47×23 cm\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"weight_kg\": {\n      \"value\": 30,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.booster.tech/booster-t1/\",\n        \"quote\": \"Weight: ~30kg\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"dof\": {\n      \"value\": 23,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.booster.tech/booster-t1/\",\n        \"quote\": \"Total DoFs: 23\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"official\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The reviewed source did not establish both the exact recorded value and the concrete robot variant for this specification.\"\n        }\n      }\n    },\n    \"battery_runtime_min\": {\n      \"value\": 120,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.booster.tech/booster-t1/\",\n        \"quote\": \"Battery Life: 2h (walking), 4h (standing)\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"actuator_torque_nm\": {\n      \"value\": 130,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.booster.tech/booster-t1/\",\n        \"quote\": \"Max Peak Torque: 130N·m\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"official\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The reviewed source did not establish both the exact recorded value and the concrete robot variant for this specification.\"\n        }\n      }\n    }\n  },\n  \"price_history\": [\n    {\n      \"date\": \"2026-09-20\",\n      \"amount\": 26000,\n      \"currency\": \"EUR\",\n      \"variant\": \"Standard, VAT excl., promotional price via authorized EU distributor\",\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.generationrobots.com/en/404278-booster-t1-humanoid-robot.html\",\n        \"quote\": \"€31,200.00 VAT incl. €26,000.00 VAT excl.\",\n        \"accessed\": \"2026-09-20\"\n      }\n    }\n  ],\n  \"delivery\": {\n    \"status\": \"demonstrated\",\n    \"timeline\": [\n      {\n        \"date\": \"2024-12-18\",\n        \"event\": \"announced\",\n        \"detail\": \"Earliest pinned press date on Booster's own news page, tied to Booster becoming RoboCup's official partner platform. Multiple secondary sources place an earlier debut at the World Robot Conference in Beijing (Aug 2024) and a competition win at IEEE-RAS Humanoids 2024 (Nov 2024), but no primary Booster source with a specific date for either was found.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://www.booster.tech/news/\",\n          \"quote\": \"Booster Robotics Becomes RoboCup's Official Partner! Booster T1 shows excellent performance in the football-playing scenario.\",\n          \"accessed\": \"2026-09-20\"\n        }\n      },\n      {\n        \"date\": \"2025-01-23\",\n        \"event\": \"preorders-open\",\n        \"detail\": \"Booster's own news page claims T1 is shipping worldwide following a showing at NVIDIA's event with Jensen Huang, and it is listed for direct purchase by EU/US resellers. No named-customer unboxing or serial-number evidence was found, so this is treated as a claimed-level availability signal rather than shipped.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://www.booster.tech/news/\",\n          \"quote\": \"Booster T1, featured at NVIDIA's Spring Party and signed by Jensen Huang, is now shipping worldwide\",\n          \"accessed\": \"2026-09-20\"\n        }\n      }\n    ]\n  },\n  \"capabilities\": [\n    {\n      \"id\": \"run\",\n      \"status\": \"demonstrated\",\n      \"autonomy\": \"autonomous\",\n      \"source\": {\n        \"url\": \"https://humanoid.robocup.org/wp-content/uploads/RC-HL-2025-Rules.pdf\",\n        \"quote\": \"Robots participating in the Humanoid League competitions must act autonomously while a competition is running. No external power supply, teleoperation, remote control, or remote brain of any kind is allowed.\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"independent\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The text source was reviewed, but no video segment was watched; the existing capability status and autonomy classification for T1 were not fully verified.\"\n        }\n      },\n      \"note\": \"RoboCup Humanoid League Laws of the Game 2025, rule 335 (Communication and Control section), bans teleoperation for every robot playing a match under this ruleset. A named team competing with this exact platform: Tsinghua University's 'Hephaestus' team won the AdultSize category at RoboCup 2025 in Salvador, Brazil (July 2025) using Booster T1 robots -- 'Tsinghua dominated the competition using Chinese-developed Booster T1 robots, achieving decisive victories over multiple opponents' and 'Tsinghua University has placed top of the AdultSize category in the RoboCup Humanoid League soccer world championship, in the first time a Chinese team has claimed the top honor' (China Daily, https://global.chinadaily.com.cn/a/202507/25/WS6882e633a310ad07b5d91f03.html, accessed 2026-09-20; corroborated by Xinhua, https://english.news.cn/20250723/1d0f0b61bff142f5954fc42621c68bea/c.html). Booster's own RoboCup demo code (github.com/BoosterRobotics/robocup_demo) confirms the platform's vision/brain/game-controller stack 'makes autonomous decisions to kick the ball and complete the full RoboCup match', consistent with the rule. 'run' is used as the closest fixed capability id for AdultSize soccer play; no dedicated 'soccer' id exists in data/capabilities.json.\"\n    }\n  ],\n  \"sdk\": {\n    \"open_source\": true,\n    \"ros\": \"ros2\",\n    \"url\": \"https://github.com/BoosterRobotics/booster_robotics_sdk\",\n    \"status\": \"shipped\",\n    \"source\": {\n      \"url\": \"https://github.com/BoosterRobotics/booster_robotics_sdk\",\n      \"quote\": \"Booster Robotics SDK aims to provide a simple and easy-to-use interface for developers to control the Booster Robotics products.\",\n      \"accessed\": \"2026-09-21\"\n    },\n    \"note\": \"Public GitHub repo (booster_robotics_sdk) plus a separate ROS2 interface package (booster_robotics_sdk_ros2, 'a ROS 2 interface package that provides a series of message and service definitions for robot control', github.com/BoosterRobotics/booster_robotics_sdk_ros2, accessed 2026-09-21). GitHub reports the main SDK repo's license metadata as 'Other/NOASSERTION' rather than a named permissive license, but the source is publicly published and usable, consistent with the T1 product page's own claim of an 'Open-Source Framework'.\"\n  },\n  \"warranty\": [\n    {\n      \"months\": 12,\n      \"region\": \"Global (standard)\",\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.booster.tech/booster-t1/\",\n        \"quote\": \"Warranty: 1 year\",\n        \"accessed\": \"2026-09-21\"\n      }\n    }\n  ],\n  \"order_type\": {\n    \"value\": \"quote\",\n    \"status\": \"claimed\",\n    \"source\": {\n      \"url\": \"https://www.booster.tech/store\",\n      \"quote\": \"Please fill in the information and Booster Robotics will contact you.\",\n      \"accessed\": \"2026-09-21\"\n    },\n    \"note\": \"Booster's own store page is an inquiry form (name/country/company/email), no price shown and no direct checkout; a lower price point is available via authorized EU resellers such as Generation Robots (see price_history), but Booster's own primary sales channel is quote-based.\"\n  },\n  \"notes\": [\n    \"walking_speed_kmh and payload_kg are widely reported by aggregator sites (e.g. 18 km/h, 3 kg) but no literal quote from Booster's own site or a primary press source could be pinned during this build, so both fields are omitted rather than guessed.\",\n    \"Price is sourced from a French authorized distributor (Generation Robots) rather than Booster's own storefront, since Booster's own site directs buyers to contact sales without listing a public price.\",\n    \"Booster.tech's own product page (booster-t1) does not state degrees-of-freedom variants with grippers/dexterous hands the way older aggregator pages do (23/31/41); only the base 23 DoF figure is confirmed on the current official page.\",\n    \"Shipped-bar research (2026-09-20): Bipedal GmbH (Cologne, Germany) is Booster Robotics' EU distributor and has both a promotional blog post (\\\"Der neue BoosterT1 ist endlich da\\\", 2025-02-09, using manufacturer product photos, not delivery photos) and its own YouTube tutorial series (\\\"Booster Robotic T1 How to start\\\") showing a physical unit. A distributor's own stock unit is not a first customer delivery in the RoboCup-team sense the task asked about, and no RoboCup team's own channel showing a specific received T1 with invoice/serial/customs was found in this pass. Independent buyer unboxings exist on YouTube (e.g. \\\"Unboxing & Getting Started with Booster T1\\\" by Generation Robots, a French robotics reseller) but again show a reseller's demo unit, not a clearly named end-customer delivery. Not upgraded to shipped.\",\n    \"T1 usage for the RoboCup 2025 AdultSize win is separately confirmed by chinadaily.com.cn (\\\"Tsinghua dominated the competition using Chinese-developed Booster T1 robots\\\", accessed 2026-09-21); the 5-3 scoreline itself is the CGTN photo caption cited in the result source above.\",\n    \"battery_wh, battery_swappable and charge_time_min omitted (2026-09-21): booster.tech/booster-t1/ states only 'Battery: 10.5Ah' with no voltage figure, so Wh cannot be derived, and neither swappability nor charge time is stated on the primary page.\",\n    \"locomotion left out (2026-09-21): searched the manufacturer's own product/press page and its main launch coverage (The Robot Report / IEEE Spectrum / named outlet where applicable) for a literal quote naming the propulsion (\\\"bipedal\\\", \\\"legs\\\", \\\"walks\\\", \\\"wheeled base\\\", etc.); none of the pages fetched in this pass contained a checkable sentence naming it specifically for T1 -- most pages describe height/DOF/speed without ever stating the locomotion type in words. Left out rather than inferred from photos or category. Revisit with a source that states it directly.\"\n  ],\n  \"updated\": \"2026-09-21\",\n  \"results\": [\n    {\n      \"event\": \"robocup-2025-humanoid-adultsize\",\n      \"discipline\": \"AdultSize soccer, final\",\n      \"result\": \"5-3\",\n      \"rank\": 1,\n      \"team\": \"Tsinghua Hephaestus\",\n      \"unit\": \"score\",\n      \"autonomy\": \"autonomous\",\n      \"source\": {\n        \"url\": \"https://news.cgtn.com/news/2025-07-23/Two-Chinese-teams-sweep-1-2-in-adult-size-at-Robo-Cup-Humanoid-League-1FeWW0KezmM/p.html\",\n        \"quote\": \"Tsinghua University's Hephaestus pose for a photo after defeating China Agricultural University's Mountain & Sea 5-3 in the final to win the adult size title at the Robo Cup Humanoid League in Brazil, July 21, 2025.\",\n        \"accessed\": \"2026-09-21\"\n      }\n    }\n  ],\n  \"simulation\": {\n    \"review\": {\n      \"status\": \"found\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://github.com/BoosterRobotics/booster_assets/blob/12a97516f57469078707afb587a5f84c1cb110d1/robots/T1/T1_23dof.urdf\",\n        \"https://github.com/BoosterRobotics/booster_assets/blob/12a97516f57469078707afb587a5f84c1cb110d1/robots/T1/T1_23dof.xml\",\n        \"https://github.com/BoosterRobotics/booster_assets/blob/12a97516f57469078707afb587a5f84c1cb110d1/robots/T1/T1_29dof.urdf\",\n        \"https://github.com/BoosterRobotics/booster_deploy/blob/7bb1462e2ac742eba5c01659b815e2e99fbe617f/booster_deploy/robots/t1.py\"\n      ],\n      \"reason\": \"Official repository paths and format markers were checked for three T1 artifacts; the models were not executed. MuJoCo compatibility is registered only for the T1 23 DoF MJCF artifact.\"\n    },\n    \"artifacts\": [\n      {\n        \"id\": \"t1-23dof-urdf\",\n        \"format\": \"urdf\",\n        \"variant\": \"T1 23 DoF\",\n        \"provenance\": \"official\",\n        \"url\": \"https://github.com/BoosterRobotics/booster_assets/blob/12a97516f57469078707afb587a5f84c1cb110d1/robots/T1/T1_23dof.urdf\",\n        \"revision\": \"12a97516f57469078707afb587a5f84c1cb110d1\",\n        \"license\": {\n          \"name\": \"BSD-3-Clause\",\n          \"url\": \"https://github.com/BoosterRobotics/booster_assets/blob/12a97516f57469078707afb587a5f84c1cb110d1/LICENSE\"\n        },\n        \"source\": {\n          \"url\": \"https://github.com/BoosterRobotics/booster_assets/blob/12a97516f57469078707afb587a5f84c1cb110d1/robots/T1/T1_23dof.urdf\",\n          \"quote\": \"robots/T1/T1_23dof.urdf\",\n          \"accessed\": \"2026-09-27\",\n          \"media_type\": \"repository\",\n          \"publisher_type\": \"official\",\n          \"variant\": \"T1 23 DoF\",\n          \"review\": {\n            \"status\": \"supported\",\n            \"method\": \"text\",\n            \"checked\": \"2026-09-27\",\n            \"reason\": \"Official repository path and format marker checked; model not executed.\"\n          }\n        },\n        \"compatibility\": []\n      },\n      {\n        \"id\": \"t1-23dof-mjcf\",\n        \"format\": \"mjcf\",\n        \"variant\": \"T1 23 DoF\",\n        \"provenance\": \"official\",\n        \"url\": \"https://github.com/BoosterRobotics/booster_assets/blob/12a97516f57469078707afb587a5f84c1cb110d1/robots/T1/T1_23dof.xml\",\n        \"revision\": \"12a97516f57469078707afb587a5f84c1cb110d1\",\n        \"license\": {\n          \"name\": \"BSD-3-Clause\",\n          \"url\": \"https://github.com/BoosterRobotics/booster_assets/blob/12a97516f57469078707afb587a5f84c1cb110d1/LICENSE\"\n        },\n        \"source\": {\n          \"url\": \"https://github.com/BoosterRobotics/booster_assets/blob/12a97516f57469078707afb587a5f84c1cb110d1/robots/T1/T1_23dof.xml\",\n          \"quote\": \"robots/T1/T1_23dof.xml\",\n          \"accessed\": \"2026-09-27\",\n          \"media_type\": \"repository\",\n          \"publisher_type\": \"official\",\n          \"variant\": \"T1 23 DoF\",\n          \"review\": {\n            \"status\": \"supported\",\n            \"method\": \"text\",\n            \"checked\": \"2026-09-27\",\n            \"reason\": \"Official repository path and format marker checked; model not executed.\"\n          }\n        },\n        \"compatibility\": [\n          {\n            \"simulator\": \"mujoco\",\n            \"level\": \"documented\",\n            \"version\": null,\n            \"notes\": \"The pinned T1 23-DoF robot configuration points its MuJoCo model path to this exact asset variant.\",\n            \"source\": {\n              \"url\": \"https://github.com/BoosterRobotics/booster_deploy/blob/7bb1462e2ac742eba5c01659b815e2e99fbe617f/booster_deploy/robots/t1.py\",\n              \"quote\": \"mjcf_path=\\\"{BOOSTER_ASSETS_DIR}/robots/T1/T1_23dof.xml\\\"\",\n              \"accessed\": \"2026-09-27\",\n              \"media_type\": \"repository\",\n              \"publisher_type\": \"official\",\n              \"variant\": \"T1 23 DoF\",\n              \"review\": {\n                \"status\": \"supported\",\n                \"method\": \"text\",\n                \"checked\": \"2026-09-27\",\n                \"reason\": \"The pinned official robot configuration gives this exact artifact path as its MuJoCo model; no model was executed.\"\n              }\n            }\n          }\n        ]\n      },\n      {\n        \"id\": \"t1-29dof-urdf\",\n        \"format\": \"urdf\",\n        \"variant\": \"T1 29 DoF with 7-DoF arms\",\n        \"provenance\": \"official\",\n        \"url\": \"https://github.com/BoosterRobotics/booster_assets/blob/12a97516f57469078707afb587a5f84c1cb110d1/robots/T1/T1_29dof.urdf\",\n        \"revision\": \"12a97516f57469078707afb587a5f84c1cb110d1\",\n        \"license\": {\n          \"name\": \"BSD-3-Clause\",\n          \"url\": \"https://github.com/BoosterRobotics/booster_assets/blob/12a97516f57469078707afb587a5f84c1cb110d1/LICENSE\"\n        },\n        \"source\": {\n          \"url\": \"https://github.com/BoosterRobotics/booster_assets/blob/12a97516f57469078707afb587a5f84c1cb110d1/robots/T1/T1_29dof.urdf\",\n          \"quote\": \"robots/T1/T1_29dof.urdf\",\n          \"accessed\": \"2026-09-27\",\n          \"media_type\": \"repository\",\n          \"publisher_type\": \"official\",\n          \"variant\": \"T1 29 DoF with 7-DoF arms\",\n          \"review\": {\n            \"status\": \"supported\",\n            \"method\": \"text\",\n            \"checked\": \"2026-09-27\",\n            \"reason\": \"Official repository path and format marker checked; model not executed.\"\n          }\n        },\n        \"compatibility\": []\n      }\n    ]\n  },\n  \"actuator_architecture\": {\n    \"review\": {\n      \"status\": \"not_confirmed\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://github.com/BoosterRobotics/booster_assets/blob/main/README.md\"\n      ],\n      \"reason\": \"Targeted actuator searches did not confirm an exact-variant architecture claim for this record; this does not mean none exists.\"\n    },\n    \"groups\": []\n  }\n}\n"
    },
    {
      "path": "data/robots/boston-dynamics-atlas-electric.json",
      "raw": "{\n  \"slug\": \"boston-dynamics-atlas-electric\",\n  \"name\": \"Atlas (Electric)\",\n  \"manufacturer\": {\n    \"name\": \"Boston Dynamics\",\n    \"country\": \"US\",\n    \"url\": \"https://bostondynamics.com\"\n  },\n  \"category\": \"full-size\",\n  \"announced\": {\n    \"date\": \"2024-04-17\",\n    \"source\": {\n      \"url\": \"https://bostondynamics.com/news/introducing-electric-atlas/\",\n      \"quote\": \"This week we announced the retirement of our hydraulic Atlas and unveiled what comes next—a fully electric Atlas robot designed for real-world applications.\",\n      \"accessed\": \"2026-09-20\"\n    }\n  },\n  \"specs\": {\n    \"height_cm\": {\n      \"value\": 190,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://bostondynamics.com/atlas/\",\n        \"quote\": \"1.9 m (6.2 ft)\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"weight_kg\": {\n      \"value\": 90,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://bostondynamics.com/atlas/\",\n        \"quote\": \"90 kg (198 lbs)\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"dof\": {\n      \"value\": 56,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://bostondynamics.com/atlas/\",\n        \"quote\": \"56\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"documentation\",\n        \"publisher_type\": \"official\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The reviewed source did not establish both the exact recorded value and the concrete robot variant for this specification.\"\n        }\n      }\n    },\n    \"battery_runtime_min\": {\n      \"value\": 240,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://bostondynamics.com/atlas/\",\n        \"quote\": \"4 hours\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"payload_kg\": {\n      \"value\": 50,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://bostondynamics.com/atlas/\",\n        \"quote\": \"50 kg (110 lbs)\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"battery_swappable\": {\n      \"value\": true,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://bostondynamics.com/atlas/\",\n        \"quote\": \"Atlas autonomously navigates to a charging station and swaps out its own battery\",\n        \"accessed\": \"2026-09-21\"\n      }\n    }\n  },\n  \"price_history\": [],\n  \"delivery\": {\n    \"status\": \"shipped\",\n    \"timeline\": [\n      {\n        \"date\": \"2024-04-17\",\n        \"event\": \"announced\",\n        \"detail\": \"Boston Dynamics retired the hydraulic Atlas and unveiled a fully electric successor.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://bostondynamics.com/news/introducing-electric-atlas/\",\n          \"quote\": \"This week we announced the retirement of our hydraulic Atlas and unveiled what comes next—a fully electric Atlas robot designed for real-world applications.\",\n          \"accessed\": \"2026-09-20\"\n        }\n      },\n      {\n        \"date\": \"2026-01-04\",\n        \"event\": \"first-customer-delivery\",\n        \"detail\": \"Pilot at Hyundai Motor Group Metaplant America (Ellabell, GA): CBS 60 Minutes correspondent Bill Whitaker visited the plant in person and filmed Atlas sorting roof racks; an independent outlet, not Boston Dynamics or Hyundai, observed and photographed the physical unit on Hyundai's site.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://www.therobotreport.com/boston-dynamics-shows-atlas-humanoid-working-georgia-hyundai-plant/\",\n          \"quote\": \"Atlas practiced sorting roof racks without human help\",\n          \"accessed\": \"2026-09-27\",\n          \"media_type\": \"article\",\n          \"publisher_type\": \"independent\",\n          \"review\": {\n            \"status\": \"insufficient\",\n            \"method\": \"text\",\n            \"checked\": \"2026-09-27\",\n            \"reason\": \"The reviewed text does not establish a first-customer-delivery event for the exact recorded variant and date; testing, integration, or presence is not delivery evidence.\"\n          }\n        },\n        \"sector\": \"automotive\"\n      }\n    ]\n  },\n  \"capabilities\": [\n    {\n      \"id\": \"pick-and-place\",\n      \"status\": \"demonstrated\",\n      \"autonomy\": \"autonomous\",\n      \"source\": {\n        \"url\": \"https://spectrum.ieee.org/boston-dynamics-new-atlas\",\n        \"quote\": \"There are no prescribed or teleoperated movements; all motions are generated autonomously online.\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"independent\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The text source was reviewed, but no video segment was watched; the existing capability status and autonomy classification for Atlas (Electric) were not fully verified.\"\n        }\n      },\n      \"note\": \"Boston Dynamics' Scott Kuindersma describing an engine-cover handling clip; the only place this dataset found an explicit no-teleop statement rather than an unspecified highlight reel.\"\n    },\n    {\n      \"id\": \"box-handling\",\n      \"status\": \"demonstrated\",\n      \"autonomy\": \"autonomous\",\n      \"source\": {\n        \"url\": \"https://www.therobotreport.com/boston-dynamics-shows-atlas-humanoid-working-georgia-hyundai-plant/\",\n        \"quote\": \"Atlas practiced sorting roof racks without human help\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"independent\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The text source was reviewed, but no video segment was watched; the existing capability status and autonomy classification for Atlas (Electric) were not fully verified.\"\n        }\n      },\n      \"note\": \"Independent on-site observation (CBS 60 Minutes correspondent, reported via The Robot Report) at the Hyundai Metaplant, not a manufacturer clip.\"\n    }\n  ],\n  \"promises\": [\n    {\n      \"id\": \"boston-dynamics-atlas-hyundai-deployment-2028\",\n      \"claim\": \"Atlas deployment starts at Hyundai Metaplant America\",\n      \"target\": \"2028\",\n      \"made_on\": \"2026-05-20\",\n      \"quote\": \"Atlas will first be deployed at Hyundai Motor Group Metaplant America in Georgia in 2028, with Kia's Georgia plant following in 2029\",\n      \"source_url\": \"https://www.koreaherald.com/article/10741955\",\n      \"source_name\": \"The Korea Herald\",\n      \"accessed\": \"2026-09-27\",\n      \"status\": \"open\"\n    },\n    {\n      \"id\": \"boston-dynamics-atlas-25000-units\",\n      \"claim\": \"Deploy more than 25,000 Atlas robots across Hyundai/Kia plants\",\n      \"target\": \"2028\",\n      \"made_on\": \"2026-05-20\",\n      \"quote\": \"deploy more than 25,000 Atlas humanoid robots developed by its US robotics subsidiary Boston Dynamics\",\n      \"source_url\": \"https://www.koreaherald.com/article/10741955\",\n      \"source_name\": \"The Korea Herald\",\n      \"accessed\": \"2026-09-27\",\n      \"status\": \"open\"\n    },\n    {\n      \"id\": \"boston-dynamics-atlas-30000-annual-2028\",\n      \"claim\": \"Hyundai to produce 30,000 robots per year\",\n      \"target\": \"2028\",\n      \"made_on\": \"2026-05-20\",\n      \"quote\": \"30,000 robots Hyundai aims to produce each year by 2028\",\n      \"source_url\": \"https://www.koreaherald.com/article/10741955\",\n      \"source_name\": \"The Korea Herald\",\n      \"accessed\": \"2026-09-27\",\n      \"status\": \"open\"\n    }\n  ],\n  \"notes\": [\n    \"Height/weight conflict: several outlets covering the April 2024 unveiling (aggregator sites, not manufacturer-sourced) reported roughly 1.5 m and 89 kg for electric Atlas, while the current official bostondynamics.com/atlas page (accessed 2026-09-20) states 1.9 m and 90 kg. Because the 1.5 m figure could not be traced to a manufacturer statement, only the current official page value is recorded here as claimed; the discrepancy is flagged rather than resolved.\",\n    \"Payload: the official page lists 50 kg instant / 30 kg sustained lift capacity; only the instant figure is recorded in the single-value `payload_kg` field per schema.\",\n    \"Full-scale Hyundai production deployment is still ramping (Boston Dynamics/Hyundai have said full introduction to production is targeted for 2028).\",\n    \"Shipped bar applied (2026-09-20): the January 2026 CBS 60 Minutes visit is an independent-party (CBS, not Boston Dynamics or Hyundai) on-site observation of a named customer (Hyundai Motor Group Metaplant America, Ellabell, GA) with video/photo evidence of the physical unit performing real work. Per this site's shipped rule (named customer + image via the customer's own or an independent channel; invoice/serial/unboxing/customs are alternatives, not an added requirement), this qualifies as shipped, with 'pilot' noted since 2028 is cited as the target for full production deployment. Upgraded from demonstrated to shipped; an earlier note here required invoice/serial evidence in addition to the observation, which was too strict, and is removed.\",\n    \"battery_wh, charge_time_min, actuator_torque_nm, sdk, and warranty were left out (2026-09-21): bostondynamics.com/atlas/ discloses only overall 4-hour battery life and does not state Wh capacity, charge time, joint torque in Nm, or any Atlas-specific SDK/API (the only SDK Boston Dynamics publishes is for Spot); delivery.timeline[].sector set to automotive on the Hyundai Metaplant event.\",\n    \"locomotion left out (2026-09-21): searched the manufacturer's own product/press page and its main launch coverage (The Robot Report / IEEE Spectrum / named outlet where applicable) for a literal quote naming the propulsion (\\\"bipedal\\\", \\\"legs\\\", \\\"walks\\\", \\\"wheeled base\\\", etc.); none of the pages fetched in this pass contained a checkable sentence naming it specifically for electric Atlas -- most pages describe height/DOF/speed without ever stating the locomotion type in words. Left out rather than inferred from photos or category. Revisit with a source that states it directly.\"\n  ],\n  \"updated\": \"2026-09-21\",\n  \"order_type\": {\n    \"value\": \"quote\",\n    \"status\": \"claimed\",\n    \"source\": {\n      \"url\": \"https://bostondynamics.com/atlas/\",\n      \"quote\": \"Our team will be in touch with qualified prospects.\",\n      \"accessed\": \"2026-09-21\"\n    },\n    \"note\": \"Atlas is offered through a qualified-prospect contact form, not a public cart/waitlist/preorder flow.\"\n  },\n  \"media\": [\n    {\n      \"type\": \"patent\",\n      \"file\": \"media/boston-dynamics-atlas-electric/usd1103236-fig1.png\",\n      \"caption\": \"Figure 1 from Boston Dynamics' design patent for a robotic device.\",\n      \"source\": {\n        \"url\": \"https://ppubs.uspto.gov/pubwebapp/\",\n        \"accessed\": \"2026-09-21\"\n      },\n      \"license\": {\n        \"name\": \"USPTO design patent\",\n        \"terms_url\": \"https://www.uspto.gov/patents/basics/types-patent-applications/design-patent-application\",\n        \"note\": \"Public record; design patent drawing, not a copyrighted photograph.\"\n      },\n      \"patent_number\": \"USD1,103,236 S\",\n      \"credit\": \"USPTO / Boston Dynamics, Inc.\"\n    }\n  ],\n  \"simulation\": {\n    \"review\": {\n      \"status\": \"not_confirmed\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://bostondynamics.com\"\n      ],\n      \"reason\": \"Targeted searches found no confirmed model for this record; does not mean unavailable.\"\n    },\n    \"artifacts\": []\n  },\n  \"actuator_architecture\": {\n    \"review\": {\n      \"status\": \"found\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://bostondynamics.com/blog/electric-new-era-for-atlas/\"\n      ],\n      \"reason\": \"Exact-variant actuator architecture evidence was found in the listed official source and is recorded per group.\"\n    },\n    \"groups\": [\n      {\n        \"id\": \"electric-platform\",\n        \"scope\": \"Whole robot platform\",\n        \"variant\": \"Atlas (Electric)\",\n        \"drive\": \"electric\",\n        \"transmission\": null,\n        \"motion\": null,\n        \"architecture\": null,\n        \"status\": \"claimed\",\n        \"source\": {\n          \"url\": \"https://bostondynamics.com/blog/electric-new-era-for-atlas/\",\n          \"quote\": \"a fully electric Atlas robot designed for real-world applications\",\n          \"accessed\": \"2026-09-27\",\n          \"media_type\": \"article\",\n          \"publisher_type\": \"official\",\n          \"variant\": \"Atlas (Electric)\",\n          \"review\": {\n            \"status\": \"supported\",\n            \"method\": \"text\",\n            \"checked\": \"2026-09-27\",\n            \"reason\": \"Boston Dynamics explicitly identifies the new Atlas variant as fully electric.\"\n          }\n        }\n      }\n    ]\n  }\n}\n"
    },
    {
      "path": "data/robots/clone-alpha.json",
      "raw": "{\n  \"slug\": \"clone-alpha\",\n  \"name\": \"Alpha\",\n  \"manufacturer\": {\n    \"name\": \"Clone Robotics\",\n    \"country\": \"US\",\n    \"url\": \"https://clonerobotics.com\"\n  },\n  \"category\": \"research\",\n  \"announced\": {\n    \"date\": \"2024-12-06\",\n    \"source\": {\n      \"url\": \"https://humanoidroboticstechnology.com/industry-news/clone-robotics-unveils-its-clone-alpha-humanoid/\",\n      \"quote\": \"Clone Robotics proudly announces that its cutting-edge humanoid android, the Clone Alpha, is now available for pre-order.\",\n      \"accessed\": \"2026-09-20\"\n    }\n  },\n  \"specs\": {\n    \"locomotion\": {\n      \"value\": \"bipedal\",\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://clonerobotics.com/\",\n        \"quote\": \"Clone is a bipedal android companion. Made for individuals and businesses alike.\",\n        \"accessed\": \"2026-09-21\"\n      }\n    }\n  },\n  \"order_type\": {\n    \"value\": \"preorder\",\n    \"status\": \"claimed\",\n    \"source\": {\n      \"url\": \"https://clonerobotics.com/pre-order/\",\n      \"quote\": \"Clone is manufacturing only 279 units of the limited edition Clone Alpha.\",\n      \"accessed\": \"2026-09-21\"\n    },\n    \"note\": \"The /pre-order/ page hosts a free reservation form ('Reserve') for the 279-unit limited edition, with no price or checkout shown as of this build -- a preorder/reservation, not a live cart sale.\"\n  },\n  \"price_history\": [],\n  \"capabilities\": [\n    {\n      \"id\": \"teleoperation-shown\",\n      \"status\": \"demonstrated\",\n      \"autonomy\": \"teleoperated\",\n      \"source\": {\n        \"url\": \"https://interestingengineering.com/ai-robotics/clone-demos-creepy-humanoid-hand\",\n        \"quote\": \"a human wearing a sensor glove\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"independent\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The text source was reviewed, but no video segment was watched; the existing capability status and autonomy classification for Alpha were not fully verified.\"\n        }\n      },\n      \"note\": \"Demo of the Clone hand only (mounted on a desk), not the full Alpha body; operator wears a sensor glove and a neural-network 'V2 Controller' translates finger/wrist motion into the artificial-muscle hand in real time. This dataset only records what is shown on camera, so this entry covers the hand demo, not a claim about Alpha's full-body teleoperation.\"\n    },\n    {\n      \"id\": \"tactile-sensing\",\n      \"status\": \"demonstrated\",\n      \"autonomy\": \"teleoperated\",\n      \"source\": {\n        \"url\": \"https://interestingengineering.com/ai-robotics/clone-demos-creepy-humanoid-hand\",\n        \"quote\": \"pressure pads in the palm\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"independent\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The text source was reviewed, but no video segment was watched; the existing capability status and autonomy classification for Alpha were not fully verified.\"\n        }\n      },\n      \"note\": \"Palm pressure pads reported to detect grip force during the same glove-teleoperated hand demo; shown affecting grip behavior on camera, not just listed as a spec.\"\n    }\n  ],\n  \"delivery\": {\n    \"status\": \"claimed\",\n    \"timeline\": [\n      {\n        \"date\": \"2024-12-06\",\n        \"event\": \"announced\",\n        \"detail\": \"Clone Robotics announced the Clone Alpha as a limited edition of 279 home android units and opened a pre-order waitlist, with pre-orders stated to become available in 2025.\",\n        \"quantity_min\": 279,\n        \"quantity_max\": 279,\n        \"source\": {\n          \"url\": \"https://clonerobotics.com/pre-order/\",\n          \"quote\": \"Clone is manufacturing only 279 units of the limited edition Clone Alpha.\",\n          \"accessed\": \"2026-09-20\"\n        }\n      }\n    ]\n  },\n  \"promises\": [\n    {\n      \"id\": \"clone-alpha-preorders-2025\",\n      \"claim\": \"Pre-orders for the 279-unit Clone Alpha open\",\n      \"target\": \"2025\",\n      \"made_on\": \"2024-12-06\",\n      \"quote\": \"Pre-orders available in 2025\",\n      \"source_url\": \"https://clonerobotics.com/pre-order/\",\n      \"source_name\": \"Clone Robotics, pre-order page\",\n      \"accessed\": \"2026-09-27\",\n      \"status\": \"open\"\n    }\n  ],\n  \"notes\": [\n    \"No manufacturer source states Alpha's height, weight, or degrees-of-freedom with a checkable literal quote. Clone's own /research/ specs page currently reads 'We are currently researching, page will be available soon' (accessed 2026-09-20). Aggregator sites (Humanoid Index, Humanoid.guide, etc.) widely repeat figures of ~170 cm / ~60 kg / 164 DOF, but per the evidence rules these do not qualify as a claimed-status source because they do not cite a traceable manufacturer statement for those exact numbers. Specs are left empty rather than sourced to an aggregator.\",\n    \"No checkout price has ever been published by Clone Robotics; the pre-order page collects a waitlist signup without a stated amount, so price_history is empty rather than guessed. Clone's 2023 pitch mentioned an aspirational ~$20,000 target price, and the founder repeated a similar figure in a March 2026 interview, but neither is an orderable price.\",\n    \"No independent or uncut demonstration video of Alpha walking or performing tasks live could be confirmed during this build; walking is reported by trade press as a 2027 target, and the 2025 preorder window is reported to have passed without shipments. Delivery status is therefore recorded as 'claimed' (announced + preorder claim), not 'demonstrated' or 'shipped'.\",\n    \"Clone Robotics' operational presence is reported in Wrocław, Poland (R&D/manufacturing) while corporate/investor materials list a US entity; manufacturer.country is set to US pending a single authoritative filing, and this should be revisited if a primary source pins one jurisdiction.\"\n  ],\n  \"updated\": \"2026-09-21\",\n  \"simulation\": {\n    \"review\": {\n      \"status\": \"not_confirmed\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://clonerobotics.com\"\n      ],\n      \"reason\": \"Targeted searches found no confirmed model for this record; does not mean unavailable.\"\n    },\n    \"artifacts\": []\n  },\n  \"actuator_architecture\": {\n    \"review\": {\n      \"status\": \"not_confirmed\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://clonerobotics.com\"\n      ],\n      \"reason\": \"Targeted actuator searches did not confirm an exact-variant architecture claim for this record; this does not mean none exists.\"\n    },\n    \"groups\": []\n  }\n}\n"
    },
    {
      "path": "data/robots/engineai-pm01.json",
      "raw": "{\n  \"slug\": \"engineai-pm01\",\n  \"name\": \"PM01\",\n  \"manufacturer\": {\n    \"name\": \"EngineAI Robotics\",\n    \"country\": \"CN\",\n    \"url\": \"https://en.engineai.com.cn\"\n  },\n  \"category\": \"full-size\",\n  \"announced\": {\n    \"date\": \"2024-12-27\",\n    \"source\": {\n      \"url\": \"https://www.therobotreport.com/engineai-releases-pm01-humanoid-robot-for-commercial-educational-use/\",\n      \"quote\": \"EngineAI releases PM01 humanoid robot for commercial, educational use\",\n      \"accessed\": \"2026-09-20\"\n    }\n  },\n  \"specs\": {\n    \"height_cm\": {\n      \"value\": 138,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://en.engineai.com.cn/\",\n        \"quote\": \"138CM\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"weight_kg\": {\n      \"value\": 40,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.therobotreport.com/engineai-releases-pm01-humanoid-robot-for-commercial-educational-use/\",\n        \"quote\": \"weighs about 40 kg (88 lb.)\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"dof\": {\n      \"value\": 24,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://en.engineai.com.cn/\",\n        \"quote\": \"24-DOF\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"official\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The reviewed source did not establish both the exact recorded value and the concrete robot variant for this specification.\"\n        }\n      }\n    },\n    \"walking_speed_kmh\": {\n      \"value\": 7.2,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.therobotreport.com/engineai-releases-pm01-humanoid-robot-for-commercial-educational-use/\",\n        \"quote\": \"2 m/sec. (4.4 mph)\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"battery_runtime_min\": {\n      \"value\": 120,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.therobotreport.com/engineai-releases-pm01-humanoid-robot-for-commercial-educational-use/\",\n        \"quote\": \"can operate for two hours on a single charge\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"actuator_torque_nm\": {\n      \"value\": 164,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://en.engineai.com.cn/product-pm01.html\",\n        \"quote\": \"Max Torque [1] 164 N·m\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"official\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The reviewed source did not establish both the exact recorded value and the concrete robot variant for this specification.\"\n        }\n      },\n      \"note\": \"Manufacturer's own EDU-edition spec table lists 164N.m as the joint 'Max Torque'; a separate marketing line elsewhere on the same page cites 'a peak torque of 130 N·m' for the actuator module -- both figures are the manufacturer's own, the 164N.m table value is used as the more specific per-joint spec.\"\n    },\n    \"battery_swappable\": {\n      \"value\": true,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://en.engineai.com.cn/product-pm01.html\",\n        \"quote\": \"Smart Battery Intelligent Quick Disassembly Supported\",\n        \"accessed\": \"2026-09-21\"\n      }\n    },\n    \"charge_time_min\": {\n      \"value\": 120,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://en.engineai.com.cn/product-pm01.html\",\n        \"quote\": \"Charging Duration 2h for Full Charge\",\n        \"accessed\": \"2026-09-21\"\n      }\n    },\n    \"locomotion\": {\n      \"value\": \"bipedal\",\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://en.engineai.com.cn/product-pm01.html\",\n        \"quote\": \"Walking with a Human-like Gait\",\n        \"accessed\": \"2026-09-21\"\n      }\n    }\n  },\n  \"price_history\": [\n    {\n      \"date\": \"2024-12-27\",\n      \"amount\": 12000,\n      \"currency\": \"USD\",\n      \"variant\": \"unified (business & education)\",\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.therobotreport.com/engineai-releases-pm01-humanoid-robot-for-commercial-educational-use/\",\n        \"quote\": \"unified price of 88,000 yuan ($12,000 U.S.) until March 31, 2025\",\n        \"accessed\": \"2026-09-20\"\n      }\n    }\n  ],\n  \"delivery\": {\n    \"status\": \"demonstrated\",\n    \"timeline\": [\n      {\n        \"date\": \"2024-12-27\",\n        \"event\": \"announced\",\n        \"detail\": \"Launched as an open-source, general-purpose humanoid at 88,000 yuan ($12,000), positioned $3,000 below Unitree's G1.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://www.therobotreport.com/engineai-releases-pm01-humanoid-robot-for-commercial-educational-use/\",\n          \"quote\": \"This positions the PM01 $3,000 below Unitree's G1 humanoid.\",\n          \"accessed\": \"2026-09-20\"\n        }\n      },\n      {\n        \"date\": \"2025-02-23\",\n        \"event\": \"first-demo\",\n        \"detail\": \"EngineAI released video of a PM01 performing what it called the world's first humanoid front flip.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://www.foxnews.com/tech/chinese-humanoid-robot-lands-worlds-first-front-flip\",\n          \"quote\": \"A Chinese humanoid robot lands the world's first front flip\",\n          \"accessed\": \"2026-09-20\"\n        }\n      }\n    ]\n  },\n  \"order_type\": {\n    \"value\": \"cart\",\n    \"status\": \"claimed\",\n    \"source\": {\n      \"url\": \"https://en.engineai.com.cn/product-pm01.html\",\n      \"quote\": \"Purchase now\",\n      \"accessed\": \"2026-09-21\"\n    },\n    \"note\": \"EngineAI's own PM01 page links its 'Buy now'/'Purchase now' buttons directly to a JD.com (3.cn short link) marketplace storefront rather than a sales-inquiry form.\"\n  },\n  \"notes\": [\n    \"battery_wh omitted (2026-09-21): EngineAI's own PM01 page gives charging power/voltage (54.6V/4.5A) but not a capacity in Ah or Wh, so Wh cannot be derived from a primary source; no manufacturer-published Wh figure was found.\",\n    \"No sourced SDK/ROS or warranty information for PM01 could be found on en.engineai.com.cn (searched 2026-09-21); both fields left out rather than guessed.\",\n    \"The front-flip video (2025-02-23) is manufacturer-produced marketing footage; it is recorded here under 'demonstrated' because the maneuver is a specific, visibly performed physical feat rather than a spec claim, but no independent (non-EngineAI) uncut footage was located during this build to confirm it as an unedited take.\",\n    \"Front-flip autonomy determination (2026-09-20): EngineAI's own statement on the flip describes only the *training* method -- 'By leveraging optical motion capture to collect extensive human motion data, it integrates end-to-end neural network learning with adversarial networks to achieve rapid evolution in a simulated environment. It thrives in various complex scenarios, continually refining itself through trial and error' (New Atlas, https://newatlas.com/ai-humanoids/worlds-first-front-flip-humanoid-robot-engineai/, accessed 2026-09-20) -- i.e. the flip is executed by a learned (sim-trained) policy, which suggests it runs onboard rather than being joystick-piloted move-by-move. But no EngineAI engineer or independent party is quoted stating explicitly that no human/teleoperator was in the loop during the filmed take, so per this dataset's strict rule this cannot be marked 'autonomous' or 'scripted' from the sources found in this pass; no capability entry was added for the flip itself since no fixed capability id in data/capabilities.json matches a single acrobatic maneuver (the 'run' id requires a sustained gait, not one flip), so this determination lives here in notes rather than in a capabilities entry.\",\n    \"EngineAI's own site (en.engineai.com.cn) only lists height, DOF and peak torque density; weight, battery runtime, walking speed and price were sourced from The Robot Report's 2024-12-27 launch coverage instead.\",\n    \"No named-customer shipment evidence (invoice, serial number, unboxing, customs record) was found during this build; delivery.status therefore stays 'demonstrated' rather than 'shipped'.\",\n    \"Shipped-bar research (2026-09-20): EngineAI's own claim is ~100 units delivered in five months including \\\"Shenzhen police patrol support\\\", which would be a strong named-customer claim if independently verified -- but this pass found no independent photo/video of a PM01 physically in Shenzhen police possession, nor any consumer unboxing video with a named buyer. Not upgraded to shipped.\"\n  ],\n  \"updated\": \"2026-09-21\",\n  \"simulation\": {\n    \"review\": {\n      \"status\": \"not_confirmed\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://github.com/engineai-robotics/engineai_robotics_description/blob/1d2d7601f520f716863c32a83abe9c77b26ee06c/pm01_edu/urdf/serial_pm01_edu.urdf\"\n      ],\n      \"reason\": \"Targeted searches found no confirmed model for this record; does not mean unavailable. Only a PM01 Edu model was found; equivalence to this unsuffixed PM01 record was not established.\"\n    },\n    \"artifacts\": []\n  },\n  \"actuator_architecture\": {\n    \"review\": {\n      \"status\": \"found\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://www.engineai.com.cn/about-news-media/23.html\"\n      ],\n      \"reason\": \"Exact-variant actuator architecture evidence was found in the listed official source and is recorded per group.\"\n    },\n    \"groups\": [\n      {\n        \"id\": \"planetary-joint-modules\",\n        \"scope\": \"Joint modules\",\n        \"variant\": \"PM01\",\n        \"drive\": null,\n        \"transmission\": \"planetary\",\n        \"motion\": null,\n        \"architecture\": null,\n        \"status\": \"claimed\",\n        \"source\": {\n          \"url\": \"https://www.engineai.com.cn/about-news-media/23.html\",\n          \"quote\": \"PM01使用的是全行星关节模组的方案\",\n          \"accessed\": \"2026-09-27\",\n          \"media_type\": \"article\",\n          \"publisher_type\": \"official\",\n          \"variant\": \"PM01\",\n          \"review\": {\n            \"status\": \"supported\",\n            \"method\": \"text\",\n            \"checked\": \"2026-09-27\",\n            \"reason\": \"EngineAI's official PM01 FAQ states that PM01 uses all-planetary joint modules.\"\n          }\n        }\n      }\n    ]\n  }\n}\n"
    },
    {
      "path": "data/robots/figure-03.json",
      "raw": "{\n  \"slug\": \"figure-03\",\n  \"name\": \"Figure 03\",\n  \"manufacturer\": {\n    \"name\": \"Figure AI\",\n    \"country\": \"US\",\n    \"url\": \"https://www.figure.ai\"\n  },\n  \"category\": \"full-size\",\n  \"announced\": {\n    \"date\": \"2026-06-25\",\n    \"source\": {\n      \"url\": \"https://www.therobotreport.com/bmw-group-deploys-figure-03-humanoid-after-tests-previous-version/\",\n      \"quote\": \"Figure 03 is an upgraded humanoid robot from Figure AI, announced for Spartanburg on June 25, 2026\",\n      \"accessed\": \"2026-09-20\"\n    }\n  },\n  \"specs\": {\n    \"battery_wh\": {\n      \"value\": 2300,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.figure.ai/news/f-03-battery-development\",\n        \"quote\": \"2.3 kWh enables 5 hours of run time at peak performance\",\n        \"accessed\": \"2026-09-21\"\n      }\n    }\n  },\n  \"price_history\": [],\n  \"delivery\": {\n    \"status\": \"shipped\",\n    \"timeline\": [\n      {\n        \"date\": \"2026-06-25\",\n        \"event\": \"announced\",\n        \"detail\": \"Figure 03 announced as successor to Figure 02, with soft safety components, wireless charging, tactile-sensor hands, and speech-to-speech communication.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://www.therobotreport.com/bmw-group-deploys-figure-03-humanoid-after-tests-previous-version/\",\n          \"quote\": \"Figure 03 is an upgraded humanoid robot from Figure AI, announced for Spartanburg on June 25, 2026, with soft safety components, wireless charging, speech-to-speech communication, and improved tactile-sensor hands.\",\n          \"accessed\": \"2026-09-20\"\n        },\n        \"sector\": \"automotive\"\n      },\n      {\n        \"date\": \"2026-06-30\",\n        \"event\": \"first-demo\",\n        \"detail\": \"Figure publishes its own account of Figure 03 arriving and working at BMW Group Plant Spartanburg, Hall 52, performing a parts-sequencing task under whole-body VLA control (Helix 02).\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://www.figure.ai/news/f-03-at-bmw\",\n          \"quote\": \"Figure 03's hands, arms, torso, and feet ... fluidly switches between precise picking and placement of thin-walled, individual parts and forceful manipulation requiring whole-body coordination.\",\n          \"accessed\": \"2026-09-20\"\n        },\n        \"sector\": \"automotive\"\n      },\n      {\n        \"date\": \"2026-06-25\",\n        \"event\": \"first-customer-delivery\",\n        \"detail\": \"Delivered to BMW Group Plant Spartanburg (Hall 52), following on from Figure 02's 30,000-vehicle run at the same plant.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://www.press.bmwgroup.com/global/photo/compilation/T0458778EN/bmw-group-advances-the-use-of-physical-ai-in-production-with-figure-03-project-in-spartanburg\",\n          \"quote\": \"Humanoid robot Figure 03 at BMW Group Plant Spartanburg.\",\n          \"accessed\": \"2026-09-27\",\n          \"media_type\": \"article\",\n          \"publisher_type\": \"official\",\n          \"review\": {\n            \"status\": \"insufficient\",\n            \"method\": \"text\",\n            \"checked\": \"2026-09-27\",\n            \"reason\": \"The reviewed text does not establish a first-customer-delivery event for the exact recorded variant and date; testing, integration, or presence is not delivery evidence.\"\n          }\n        },\n        \"sector\": \"automotive\"\n      }\n    ]\n  },\n  \"promises\": [\n    {\n      \"id\": \"figure-03-100k-four-years\",\n      \"claim\": \"100,000 Figure 03 robots produced via BotQ\",\n      \"target\": \"2029\",\n      \"made_on\": \"2025-10-09\",\n      \"quote\": \"with the goal of producing a total of 100,000 robots over the next four years\",\n      \"source_url\": \"https://www.figure.ai/news/introducing-figure-03\",\n      \"source_name\": \"Figure AI, Introducing Figure 03\",\n      \"accessed\": \"2026-09-27\",\n      \"status\": \"open\"\n    }\n  ],\n  \"capabilities\": [\n    {\n      \"id\": \"box-handling\",\n      \"status\": \"demonstrated\",\n      \"autonomy\": \"unknown\",\n      \"source\": {\n        \"url\": \"https://www.figure.ai/news/f-03-at-bmw\",\n        \"quote\": \"Figure 03's hands, arms, torso, and feet ... fluidly switches between precise picking and placement of thin-walled, individual parts and forceful manipulation requiring whole-body coordination.\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"official\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The text source was reviewed, but no video segment was watched; the existing capability status and autonomy classification for Figure 03 were not fully verified.\"\n        }\n      },\n      \"note\": \"Figure and BMW describe the Helix 02 model driving the behavior but neither states explicitly that no human supervises or intervenes on the line; per this dataset's rule that silence keeps autonomy at unknown rather than autonomous.\"\n    }\n  ],\n  \"notes\": [\n    \"No manufacturer-published height/weight/DoF spec sheet for Figure 03 was located on figure.ai during this build (figure.ai/product returned HTTP 404); specs are left empty rather than filled from secondary blogs. Follow-up: check Figure's press kit or a dated product page once published.\",\n    \"Shipped bar applied (2026-09-20): BMW's own press portal (press.bmwgroup.com) published a 7-photo compilation on 2026-06-25 captioned \\\"Humanoid robot Figure 03 at BMW Group Plant Spartanburg\\\" -- a named customer (BMW Group Plant Spartanburg) with photographic evidence of the physical unit, published via the customer's own channel. Per this site's shipped rule, a named customer plus image via the customer's or an independent channel is sufficient; invoice/serial/unboxing/customs are alternatives, not an added requirement. Upgraded to shipped. (An earlier note in this file required invoice/serial/unboxing/customs in addition to the photo; that conjunctive reading was too strict and is removed.)\",\n    \"delivery.timeline[].sector set to automotive on all three events (2026-09-21): all are tied to the BMW Group Plant Spartanburg deployment.\",\n    \"locomotion left out (2026-09-21): searched the manufacturer's own product/press page and its main launch coverage (The Robot Report / IEEE Spectrum / named outlet where applicable) for a literal quote naming the propulsion (\\\"bipedal\\\", \\\"legs\\\", \\\"walks\\\", \\\"wheeled base\\\", etc.); none of the pages fetched in this pass contained a checkable sentence naming it specifically for Figure 03 -- most pages describe height/DOF/speed without ever stating the locomotion type in words. Left out rather than inferred from photos or category. Revisit with a source that states it directly.\"\n  ],\n  \"updated\": \"2026-09-21\",\n  \"media\": [\n    {\n      \"type\": \"patent\",\n      \"file\": \"media/figure-03/usd1118726-fig1.png\",\n      \"caption\": \"Figure 1 from Figure AI's design patent for a humanoid robot.\",\n      \"source\": {\n        \"url\": \"https://ppubs.uspto.gov/pubwebapp/\",\n        \"accessed\": \"2026-09-21\"\n      },\n      \"license\": {\n        \"name\": \"USPTO design patent\",\n        \"terms_url\": \"https://www.uspto.gov/patents/basics/types-patent-applications/design-patent-application\",\n        \"note\": \"Public record; design patent drawing, not a copyrighted photograph.\"\n      },\n      \"patent_number\": \"USD1,118,726 S\",\n      \"credit\": \"USPTO / Figure AI Inc.\"\n    }\n  ],\n  \"simulation\": {\n    \"review\": {\n      \"status\": \"not_confirmed\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://www.figure.ai\"\n      ],\n      \"reason\": \"Targeted searches found no confirmed model for this record; does not mean unavailable.\"\n    },\n    \"artifacts\": []\n  },\n  \"actuator_architecture\": {\n    \"review\": {\n      \"status\": \"not_confirmed\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://www.figure.ai\"\n      ],\n      \"reason\": \"Targeted actuator searches did not confirm an exact-variant architecture claim for this record; this does not mean none exists.\"\n    },\n    \"groups\": []\n  }\n}\n"
    },
    {
      "path": "data/robots/fourier-gr-2.json",
      "raw": "{\n  \"slug\": \"fourier-gr-2\",\n  \"name\": \"GR-2\",\n  \"manufacturer\": {\n    \"name\": \"Fourier\",\n    \"country\": \"CN\",\n    \"url\": \"https://www.fftai.com\"\n  },\n  \"category\": \"full-size\",\n  \"announced\": {\n    \"date\": \"2024-09-30\",\n    \"source\": {\n      \"url\": \"https://www.prnewswire.com/news-releases/fourier-unveils-the-next-generation-humanoid-robot-gr-2-302262068.html\",\n      \"quote\": \"Standing at 175 cm and weighing 63 kg\",\n      \"accessed\": \"2026-09-20\"\n    }\n  },\n  \"specs\": {\n    \"height_cm\": {\n      \"value\": 175,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.therobotreport.com/fourier-launches-gr-2-humanoid-software-platform/\",\n        \"quote\": \"175 cm (68.9 in.)\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"weight_kg\": {\n      \"value\": 63,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.therobotreport.com/fourier-launches-gr-2-humanoid-software-platform/\",\n        \"quote\": \"63 kg (139 lb.)\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"dof\": {\n      \"value\": 53,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.prnewswire.com/news-releases/fourier-unveils-the-next-generation-humanoid-robot-gr-2-302262068.html\",\n        \"quote\": \"53 degrees of freedom\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"independent\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The reviewed source did not establish both the exact recorded value and the concrete robot variant for this specification.\"\n        }\n      }\n    },\n    \"payload_kg\": {\n      \"value\": 3,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.therobotreport.com/fourier-launches-gr-2-humanoid-software-platform/\",\n        \"quote\": \"single-arm load capacity of 3 kg (6.6 lb.)\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"hands\": {\n      \"value\": \"12 DoF per hand, tactile sensors\",\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.prnewswire.com/news-releases/fourier-unveils-the-next-generation-humanoid-robot-gr-2-302262068.html\",\n        \"quote\": \"12-DoF dexterous hands—double the dexterity of previous models\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"hand_dof\": {\n      \"value\": 12,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.prnewswire.com/news-releases/fourier-unveils-the-next-generation-humanoid-robot-gr-2-302262068.html\",\n        \"quote\": \"12-DoF dexterous hands—double the dexterity of previous models\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"independent\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The reviewed source did not establish both the exact recorded value and the concrete robot variant for this specification.\"\n        }\n      }\n    },\n    \"tactile_skin\": {\n      \"value\": true,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.techeblog.com/new-fourier-gr-2-humanoid-robot-upgrade/\",\n        \"quote\": \"Equipped with six array-type tactile sensors, GR-2 can sense force, identify object shapes and materials, and adjust its grip in real time\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"independent\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The reviewed source did not establish both the exact recorded value and the concrete robot variant for this specification.\"\n        }\n      }\n    },\n    \"actuator_torque_nm\": {\n      \"value\": 380,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.therobotreport.com/fourier-launches-gr-2-humanoid-software-platform/\",\n        \"quote\": \"With peak torques exceeding 380 N.m (280.3 ft.-lb.), the FSA 2.0 actuators boost GR-2's agility and dynamic capabilities.\",\n        \"accessed\": \"2026-09-21\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"independent\",\n        \"review\": {\n          \"status\": \"inaccessible\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The per-host request budget was reached during the review, so the source content and claim could not be re-established.\"\n        }\n      }\n    },\n    \"battery_swappable\": {\n      \"value\": true,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.therobotreport.com/fourier-launches-gr-2-humanoid-software-platform/\",\n        \"quote\": \"Since the battery is now swappable, users will be able to swap batteries quickly and return GR-2 to work.\",\n        \"accessed\": \"2026-09-21\"\n      }\n    }\n  },\n  \"price_history\": [],\n  \"delivery\": {\n    \"status\": \"claimed\",\n    \"timeline\": [\n      {\n        \"date\": \"2024-09-30\",\n        \"event\": \"announced\",\n        \"detail\": \"Fourier (rebranded from Fourier Intelligence earlier in 2024) launched GR-2 as the successor to GR-1, alongside a new software development platform.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://www.prnewswire.com/news-releases/fourier-unveils-the-next-generation-humanoid-robot-gr-2-302262068.html\",\n          \"quote\": \"Standing at 175 cm and weighing 63 kg\",\n          \"accessed\": \"2026-09-20\"\n        }\n      }\n    ]\n  },\n  \"notes\": [\n    \"Payload capacity is single-arm load capacity (3 kg / 6.6 lb) as stated by the manufacturer's press release, not a whole-body payload figure.\",\n    \"No named-customer delivery or independent demonstration video was found during this research session, so delivery.status is 'claimed'; price figures circulating on aggregator sites (e.g. $150,000+, €110,803.55) could not be traced to a manufacturer or press source and were omitted rather than included unsourced.\",\n    \"Shipped-bar re-check (2026-09-20), applying this site's actual rule (named customer + image via the customer's own or an independent channel; invoice/serial/unboxing/customs are alternatives, not an added requirement): searched specifically for a named hospital, university, or lab publishing its own photo of a GR-1 unit (parallel to the Durham University / Unitree G1 case). None was found -- coverage of Fourier's healthcare/rehab use cases describes GR-1 as designed for hospital and care-home tasks and cites '2,000+ organizations and hospitals' served as a manufacturer-side aggregate claim, but no specific institution's own channel or independent report names itself as a GR-1 recipient with a photo of its unit. This is a genuine evidence gap, not an over-strict reading of the rule, so GR-1/GR-2 remains claimed, not shipped. No fourier-gr-1.json record exists in this dataset; if one is added later, this same gap applies to it.\",\n    \"locomotion left out (2026-09-21): searched the manufacturer's own product/press page and its main launch coverage (The Robot Report / IEEE Spectrum / named outlet where applicable) for a literal quote naming the propulsion (\\\"bipedal\\\", \\\"legs\\\", \\\"walks\\\", \\\"wheeled base\\\", etc.); none of the pages fetched in this pass contained a checkable sentence naming it specifically for GR-2 -- most pages describe height/DOF/speed without ever stating the locomotion type in words. Left out rather than inferred from photos or category. Revisit with a source that states it directly.\"\n  ],\n  \"updated\": \"2026-09-21\",\n  \"simulation\": {\n    \"review\": {\n      \"status\": \"found\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://github.com/FFTAI/Wiki-GRx-URDF/blob/7d96c758f048fe1bf92b3258864d94771ae0c093/GRX/GR2/GR2v3.0.1/urdf/GR2v3.0.1.urdf\",\n        \"https://github.com/FFTAI/Wiki-GRx-URDF/blob/7d96c758f048fe1bf92b3258864d94771ae0c093/GRX/GR2/gr2v3_8_7/mjcf/gr2v3_8_7.xml\"\n      ],\n      \"reason\": \"Official repository paths and format markers were checked for two GR-2 artifacts; the models were not executed. Repository-level simulator wording did not establish artifact-specific compatibility.\"\n    },\n    \"artifacts\": [\n      {\n        \"id\": \"gr2-v3-0-1-urdf\",\n        \"format\": \"urdf\",\n        \"variant\": \"GR-2 v3.0.1\",\n        \"provenance\": \"official\",\n        \"url\": \"https://github.com/FFTAI/Wiki-GRx-URDF/blob/7d96c758f048fe1bf92b3258864d94771ae0c093/GRX/GR2/GR2v3.0.1/urdf/GR2v3.0.1.urdf\",\n        \"revision\": \"7d96c758f048fe1bf92b3258864d94771ae0c093\",\n        \"license\": {\n          \"name\": \"GPL-3.0\",\n          \"url\": \"https://github.com/FFTAI/Wiki-GRx-URDF/blob/7d96c758f048fe1bf92b3258864d94771ae0c093/LICENSE\"\n        },\n        \"source\": {\n          \"url\": \"https://github.com/FFTAI/Wiki-GRx-URDF/blob/7d96c758f048fe1bf92b3258864d94771ae0c093/GRX/GR2/GR2v3.0.1/urdf/GR2v3.0.1.urdf\",\n          \"quote\": \"GRX/GR2/GR2v3.0.1/urdf/GR2v3.0.1.urdf\",\n          \"accessed\": \"2026-09-27\",\n          \"media_type\": \"repository\",\n          \"publisher_type\": \"official\",\n          \"variant\": \"GR-2 v3.0.1\",\n          \"review\": {\n            \"status\": \"supported\",\n            \"method\": \"text\",\n            \"checked\": \"2026-09-27\",\n            \"reason\": \"Official repository path and format marker checked; model not executed.\"\n          }\n        },\n        \"compatibility\": []\n      },\n      {\n        \"id\": \"gr2-v3-8-7-mjcf\",\n        \"format\": \"mjcf\",\n        \"variant\": \"GR-2 v3_8_7\",\n        \"provenance\": \"official\",\n        \"url\": \"https://github.com/FFTAI/Wiki-GRx-URDF/blob/7d96c758f048fe1bf92b3258864d94771ae0c093/GRX/GR2/gr2v3_8_7/mjcf/gr2v3_8_7.xml\",\n        \"revision\": \"7d96c758f048fe1bf92b3258864d94771ae0c093\",\n        \"license\": {\n          \"name\": \"GPL-3.0\",\n          \"url\": \"https://github.com/FFTAI/Wiki-GRx-URDF/blob/7d96c758f048fe1bf92b3258864d94771ae0c093/LICENSE\"\n        },\n        \"source\": {\n          \"url\": \"https://github.com/FFTAI/Wiki-GRx-URDF/blob/7d96c758f048fe1bf92b3258864d94771ae0c093/GRX/GR2/gr2v3_8_7/mjcf/gr2v3_8_7.xml\",\n          \"quote\": \"GRX/GR2/gr2v3_8_7/mjcf/gr2v3_8_7.xml\",\n          \"accessed\": \"2026-09-27\",\n          \"media_type\": \"repository\",\n          \"publisher_type\": \"official\",\n          \"variant\": \"GR-2 v3_8_7\",\n          \"review\": {\n            \"status\": \"supported\",\n            \"method\": \"text\",\n            \"checked\": \"2026-09-27\",\n            \"reason\": \"Official repository path and format marker checked; model not executed.\"\n          }\n        },\n        \"compatibility\": []\n      }\n    ]\n  },\n  \"actuator_architecture\": {\n    \"review\": {\n      \"status\": \"not_confirmed\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://github.com/FFTAI/Wiki-GRx-URDF\"\n      ],\n      \"reason\": \"Targeted actuator searches did not confirm an exact-variant architecture claim for this record; this does not mean none exists.\"\n    },\n    \"groups\": []\n  }\n}\n"
    },
    {
      "path": "data/robots/galbot-g1.json",
      "raw": "{\n  \"slug\": \"galbot-g1\",\n  \"name\": \"G1\",\n  \"manufacturer\": {\n    \"name\": \"Galbot (Beijing Galbot AI / Galaxy General Robot)\",\n    \"country\": \"CN\",\n    \"url\": \"https://www.galbot.com\"\n  },\n  \"category\": \"industrial\",\n  \"announced\": {\n    \"date\": \"2025-03-01\",\n    \"source\": {\n      \"url\": \"https://chozan.co/galbot-g1/\",\n      \"quote\": \"first publicly demonstrated in March 2025\",\n      \"accessed\": \"2026-09-20\"\n    }\n  },\n  \"specs\": {\n    \"height_cm\": {\n      \"value\": 173,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"http://www.galbot.com/g1/\",\n        \"quote\": \"1730 mm\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"weight_kg\": {\n      \"value\": 92.5,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"http://www.galbot.com/g1/\",\n        \"quote\": \"机身重量 92.5 kg\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"dof\": {\n      \"value\": 21,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"http://www.galbot.com/g1/\",\n        \"quote\": \"合计 21\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"official\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The reviewed source did not establish both the exact recorded value and the concrete robot variant for this specification.\"\n        }\n      }\n    },\n    \"battery_runtime_min\": {\n      \"value\": 480,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"http://www.galbot.com/g1/\",\n        \"quote\": \"工作时长 8 小时\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"walking_speed_kmh\": {\n      \"value\": 5.4,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"http://www.galbot.com/g1/\",\n        \"quote\": \"最大速度 1.5 m/s\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"payload_kg\": {\n      \"value\": 10,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"http://www.galbot.com/g1/\",\n        \"quote\": \"单臂 5 kg 合计 10 kg\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"battery_wh\": {\n      \"value\": 1440,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"http://www.galbot.com/g1/\",\n        \"quote\": \"电池容量 48 V 30 Ah\",\n        \"accessed\": \"2026-09-21\"\n      },\n      \"note\": \"Manufacturer states capacity as 48V/30Ah rather than Wh directly; 1440Wh is the derived product (48 x 30), not a value Galbot states verbatim.\"\n    },\n    \"charge_time_min\": {\n      \"value\": 210,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"http://www.galbot.com/g1/\",\n        \"quote\": \"适配器充电 3.5 小时\",\n        \"accessed\": \"2026-09-21\"\n      }\n    },\n    \"locomotion\": {\n      \"value\": \"wheeled\",\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"http://www.galbot.com/g1/\",\n        \"quote\": \"底盘形式 4 轮全向移动底盘\",\n        \"accessed\": \"2026-09-21\"\n      },\n      \"note\": \"Manufacturer spec table states the chassis is a '4-wheel omnidirectional mobile base' (4轮全向移动底盘); G1 has articulated legs/torso/arms for manipulation but moves on a wheeled base, not by walking -- consistent with the pick-and-place capability entry above and the JD storefront listing.\"\n    }\n  },\n  \"price_history\": [],\n  \"delivery\": {\n    \"status\": \"claimed\",\n    \"timeline\": [\n      {\n        \"date\": \"2025-03-01\",\n        \"event\": \"announced\",\n        \"detail\": \"First public demonstration of the wheeled mobile-manipulator platform.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://chozan.co/galbot-g1/\",\n          \"quote\": \"first publicly demonstrated in March 2025\",\n          \"accessed\": \"2026-09-20\"\n        }\n      },\n      {\n        \"date\": \"2025-12-23\",\n        \"event\": \"volume-estimate\",\n        \"detail\": \"The Robot Report reported Galbot deployed at named industrial and healthcare customers (CATL, Bosch, Toyota, Hyundai, Xuanwu Hospital) and running warehouse operations 'for over a year', alongside a new funding round; the article states the company 'claimed that it has secured orders for thousands of units' without independent per-unit delivery evidence (invoice, serial number, unboxing).\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://www.therobotreport.com/galbot-brings-in-300m-to-scale-mobile-manipulator-deployments/\",\n          \"quote\": \"Galbot's robots are also deployed in multiple warehouse locations, where they've demonstrated stable and continuous 24/7 operations for over a year.\",\n          \"accessed\": \"2026-09-20\"\n        }\n      }\n    ]\n  },\n  \"capabilities\": [\n    {\n      \"id\": \"pick-and-place\",\n      \"status\": \"demonstrated\",\n      \"autonomy\": \"autonomous\",\n      \"source\": {\n        \"url\": \"https://chozan.co/galbot-g1/\",\n        \"quote\": \"AstraBrain translates natural language into physical actions in real time and supports autonomous task execution without fixed scripts.\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"independent\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The text source was reviewed, but no video segment was watched; the existing capability status and autonomy classification for G1 were not fully verified.\"\n        }\n      },\n      \"note\": \"Galbot's own architecture description (via its AstraBrain control stack) explicitly claims autonomous task execution. A public video, 'Galbot G1 pick-and-deliver from shelf to customers 100% automatically!' (YouTube Shorts, https://www.youtube.com/shorts/kb362y4mB9A), shows the shelf-to-customer pick-and-place task referenced here, though a specific in-video timestamp/control statement could not be independently verified during this build. Treated as a manufacturer claim of autonomy for its own control stack rather than an independent-party observation.\"\n    }\n  ],\n  \"order_type\": {\n    \"value\": \"cart\",\n    \"status\": \"claimed\",\n    \"source\": {\n      \"url\": \"http://www.galbot.com/g1/\",\n      \"quote\": \"前往购买 Buy Now\",\n      \"accessed\": \"2026-09-21\"\n    },\n    \"note\": \"Galbot's own G1 page links its 'Buy Now' button directly to a JD.com product listing (item.jd.com/100296074780.html), a live storefront page, rather than a sales-contact form.\"\n  },\n  \"notes\": [\n    \"No actuator torque figure, SDK open-source/ROS status, or warranty terms for G1 could be pinned to a primary source (galbot.com/g1/ spec table omits joint torque; developer.galbot.com describes a 'GalbotSDK' but does not state an open-source license or ROS/ROS2 support); all three fields left out rather than guessed.\",\n    \"Spec conflict: Galbot's own current Chinese-language product page (galbot.com/g1/, accessed 2026-09-20) states 1730 mm / 92.5 kg / 21 DOF / 8 h runtime / 1.5 m/s max speed / 10 kg combined payload. Widely repeated English-language secondary aggregators (Humanoid.guide, RoboZaps, robotsasia.com, humanoid-robots.io) instead give 173 cm / 85 kg / 47 total DOF (incl. a 12-DOF hand) / 10-hour runtime / 95-97% grasp success rate, none of which trace to a manufacturer page found during this build. Both figures are recorded in this note; the specs above follow the manufacturer's own current page.\",\n    \"https://www.galbot.com/product (the English marketing page linked from search results) returned empty/no renderable content when fetched directly during this build; the specs above come from the manufacturer's Chinese product page (galbot.com/g1/) instead.\",\n    \"The Robot Report (2025-12-23) reports named customers (CATL, Bosch, Toyota, Hyundai, Xuanwu Hospital) and 'Galbot Store' retail deployments in '30+ cities', which is stronger than a bare claim, but the article does not itself supply photo/video evidence of a specific unit, an invoice, a serial number, or a customs record for any single named customer, so delivery.status is kept at 'claimed' rather than 'shipped' or 'demonstrated' per this schema's strict evidentiary bar. This should be revisited if a primary customer case study or unboxing surfaces.\",\n    \"No price was found on a primary manufacturer or press source during this build; price_history is left empty.\",\n    \"Shipped-bar research (2026-09-20): Galbot's own materials and The Robot Report describe G1 running autonomously in pharmacy retail settings (\\\"nearly 10 stores in Beijing\\\") and cite CATL and Bosch as investor/deployment partners, but per our own fetch of the Robot Report piece, no store or partner site is named specifically, and the CATL/Bosch language is about a joint venture and future collaboration, not a documented physical unit in either company's possession with photo plus invoice/serial/unboxing/customs. Not upgraded to shipped.\"\n  ],\n  \"updated\": \"2026-09-21\",\n  \"simulation\": {\n    \"review\": {\n      \"status\": \"not_confirmed\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://www.galbot.com\"\n      ],\n      \"reason\": \"Targeted searches found no confirmed model for this record; does not mean unavailable.\"\n    },\n    \"artifacts\": []\n  },\n  \"actuator_architecture\": {\n    \"review\": {\n      \"status\": \"not_confirmed\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://www.galbot.com\"\n      ],\n      \"reason\": \"Targeted actuator searches did not confirm an exact-variant architecture claim for this record; this does not mean none exists.\"\n    },\n    \"groups\": []\n  }\n}\n"
    },
    {
      "path": "data/robots/hexagon-aeon.json",
      "raw": "{\n  \"slug\": \"hexagon-aeon\",\n  \"name\": \"AEON\",\n  \"manufacturer\": {\n    \"name\": \"Hexagon AB (Hexagon Robotics)\",\n    \"country\": \"SE\",\n    \"url\": \"https://robotics.hexagon.com\"\n  },\n  \"category\": \"industrial\",\n  \"announced\": {\n    \"date\": \"2025-06-17\",\n    \"source\": {\n      \"url\": \"https://www.prnewswire.com/news-releases/hexagon-launches-aeon-a-humanoid-built-for-industry-302482236.html\",\n      \"quote\": \"AEON represents a state-of-the-art, industrially bespoke humanoid.\",\n      \"accessed\": \"2026-09-20\"\n    }\n  },\n  \"specs\": {\n    \"height_cm\": {\n      \"value\": 165,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://robotics.hexagon.com/product\",\n        \"quote\": \"165cm\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"weight_kg\": {\n      \"value\": 60,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://robotics.hexagon.com/product\",\n        \"quote\": \"60kg\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"dof\": {\n      \"value\": 34,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://robotics.hexagon.com/product\",\n        \"quote\": \"34\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"official\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The reviewed source did not establish both the exact recorded value and the concrete robot variant for this specification.\"\n        }\n      }\n    },\n    \"battery_runtime_min\": {\n      \"value\": 240,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://robotics.hexagon.com/product\",\n        \"quote\": \"Auto-swap for continuous work; each charge lasts up to 4 hours\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"walking_speed_kmh\": {\n      \"value\": 8.6,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://robotics.hexagon.com/product\",\n        \"quote\": \"2.4m/s\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"payload_kg\": {\n      \"value\": 15,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://robotics.hexagon.com/product\",\n        \"quote\": \"15 kg short-term, 8 kg constant carry\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"battery_swappable\": {\n      \"value\": true,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://robotics.hexagon.com/product\",\n        \"quote\": \"Auto-swap for continuous work; each charge lasts up to 4 hours\",\n        \"accessed\": \"2026-09-21\"\n      }\n    },\n    \"locomotion\": {\n      \"value\": \"hybrid\",\n      \"status\": \"demonstrated\",\n      \"source\": {\n        \"url\": \"https://www.therobotreport.com/bmw-group-deploys-figure-03-humanoid-after-tests-previous-version/\",\n        \"quote\": \"While AEON does feature two legs, each leg has a wheel instead of a foot.\",\n        \"accessed\": \"2026-09-21\"\n      },\n      \"note\": \"The Robot Report describes AEON's hybrid design directly: bipedal legs with a wheel in place of each foot, distinct from a fully wheeled base.\"\n    }\n  },\n  \"order_type\": {\n    \"value\": \"quote\",\n    \"status\": \"claimed\",\n    \"source\": {\n      \"url\": \"https://robotics.hexagon.com/product/\",\n      \"quote\": \"Contact Us\",\n      \"accessed\": \"2026-09-21\"\n    },\n    \"note\": \"No price or checkout is published; AEON is deployed only through enterprise pilot/rollout partnerships (Schaeffler, Pilatus), reached via the product page's 'Contact Us' link, not a self-service cart.\"\n  },\n  \"price_history\": [],\n  \"delivery\": {\n    \"status\": \"claimed\",\n    \"timeline\": [\n      {\n        \"date\": \"2025-06-17\",\n        \"event\": \"announced\",\n        \"detail\": \"Hexagon launched AEON at its Hexagon LIVE Global 2025 event in Las Vegas, positioning it for manipulation, asset inspection, reality capture and operator support in automotive, aerospace, manufacturing and logistics.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"sector\": \"manufacturing\",\n        \"source\": {\n          \"url\": \"https://www.prnewswire.com/news-releases/hexagon-launches-aeon-a-humanoid-built-for-industry-302482236.html\",\n          \"quote\": \"AEON represents a state-of-the-art, industrially bespoke humanoid.\",\n          \"accessed\": \"2026-09-20\"\n        }\n      },\n      {\n        \"date\": \"2025-06-17\",\n        \"event\": \"preorders-open\",\n        \"detail\": \"Hexagon named Schaeffler and Pilatus as pilot partners evaluating AEON for manipulation, machine tending, part inspection and other use cases; this is a named-partner pilot commitment, not a completed named-customer delivery.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"sector\": \"manufacturing\",\n        \"source\": {\n          \"url\": \"https://www.prnewswire.com/news-releases/hexagon-launches-aeon-a-humanoid-built-for-industry-302482236.html\",\n          \"quote\": \"Schaeffler - piloting AEON for manipulation, machine tending, part inspection\",\n          \"accessed\": \"2026-09-20\"\n        }\n      },\n      {\n        \"date\": \"2026-04-22\",\n        \"event\": \"volume-estimate\",\n        \"detail\": \"Hexagon and Schaeffler expanded their partnership: Schaeffler committed to deploying at least 1,000 AEON humanoids across its global production system by 2032.\",\n        \"quantity_min\": 1000,\n        \"quantity_max\": null,\n        \"sector\": \"manufacturing\",\n        \"source\": {\n          \"url\": \"https://robotics.hexagon.com/hexagon-robotics-and-schaeffler-deploy-a-fleet-of-aeon-humanoids/\",\n          \"quote\": \"at least 1,000 Hexagon Robotics humanoids across its global production system by 2032\",\n          \"accessed\": \"2026-09-21\"\n        }\n      }\n    ]\n  },\n  \"promises\": [\n    {\n      \"id\": \"hexagon-aeon-schaeffler-1000-2032\",\n      \"claim\": \"Deploy at least 1,000 AEON humanoids across Schaeffler's global production system\",\n      \"target\": \"2032\",\n      \"made_on\": \"2026-04-22\",\n      \"quote\": \"at least 1,000 Hexagon Robotics humanoids across its global production system by 2032\",\n      \"source_url\": \"https://robotics.hexagon.com/hexagon-robotics-and-schaeffler-deploy-a-fleet-of-aeon-humanoids/\",\n      \"source_name\": \"Hexagon Robotics\",\n      \"accessed\": \"2026-09-27\",\n      \"status\": \"open\"\n    }\n  ],\n  \"notes\": [\n    \"Capabilities research (2026-09-20): secondary coverage (A3/automate.org, Mike Kalil) describes AEON generalizing from roughly 20 teleoperated demonstrations to autonomous operation via imitation learning, and lists pick-and-place, machine tending and inspection as target tasks. Both automate.org and robotics.hexagon.com returned HTTP 403 when fetched directly during this build, so no literal quote could be verified against the primary text within this session's timebox. The capabilities block is left empty rather than sourced to an unverified paraphrase; this should be revisited once those pages (or an accessible mirror) can be fetched.\",\n    \"AEON is not sold publicly; Hexagon states it is deployed only through enterprise pilot partnerships (named: Schaeffler, Pilatus; BMW is cited by several secondary aggregator sites but was not confirmed on Hexagon's own pages during this build). No price has been published, so price_history is left empty rather than using the speculative ~$20,000 figure some aggregators cite.\",\n    \"A November 2025 Hexagon press item (via Microsoft Ignite 2025 coverage) states AEON 'completed more than 1,600 missions without interruption' during pilot testing — evidence of extended demonstrated operation at partner sites, but not tied to a single uncut video or named unit delivery, so delivery.status is kept at 'claimed' rather than 'demonstrated' or 'shipped'.\",\n    \"walking_speed_kmh is converted from the manufacturer's stated 2.4 m/s (→ 8.64 km/h, rounded to 8.6 km/h).\"\n  ],\n  \"updated\": \"2026-09-21\",\n  \"simulation\": {\n    \"review\": {\n      \"status\": \"not_confirmed\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://robotics.hexagon.com\"\n      ],\n      \"reason\": \"Targeted searches found no confirmed model for this record; does not mean unavailable.\"\n    },\n    \"artifacts\": []\n  },\n  \"actuator_architecture\": {\n    \"review\": {\n      \"status\": \"not_confirmed\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://robotics.hexagon.com\"\n      ],\n      \"reason\": \"Targeted actuator searches did not confirm an exact-variant architecture claim for this record; this does not mean none exists.\"\n    },\n    \"groups\": []\n  }\n}\n"
    },
    {
      "path": "data/robots/kepler-k2.json",
      "raw": "{\n  \"slug\": \"kepler-k2\",\n  \"name\": \"Forerunner K2\",\n  \"manufacturer\": {\n    \"name\": \"Shanghai Kepler Robotics Co., Ltd.\",\n    \"country\": \"CN\",\n    \"url\": \"https://www.gotokepler.com\"\n  },\n  \"category\": \"full-size\",\n  \"announced\": {\n    \"date\": \"2024-10-21\",\n    \"source\": {\n      \"url\": \"https://www.prnewswire.com/news-releases/kepler-debuts-forerunner-k2-humanoid-robot-accelerating-commercial-deployment-302281546.html\",\n      \"quote\": \"The Forerunner K2 represents the Gen 5.0 robot model, showcasing a seamless integration of the humanoid robot's cerebral, cerebellar, and high-load body functions.\",\n      \"accessed\": \"2026-09-20\"\n    }\n  },\n  \"specs\": {\n    \"height_cm\": {\n      \"value\": 175,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.prnewswire.com/news-releases/keplers-forerunner-k2-bumblebee-robot-completes-8-hour-livestream-at-waic-2025-signaling-major-step-toward-real-world-deployment-of-embodied-ai-in-industrial-settings-302520070.html\",\n        \"quote\": \"175 cm (5 ft 9 in)\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"weight_kg\": {\n      \"value\": 75,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.prnewswire.com/news-releases/keplers-forerunner-k2-bumblebee-robot-completes-8-hour-livestream-at-waic-2025-signaling-major-step-toward-real-world-deployment-of-embodied-ai-in-industrial-settings-302520070.html\",\n        \"quote\": \"75 kg (165 lbs)\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"dof\": {\n      \"value\": 52,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.prnewswire.com/news-releases/kepler-debuts-forerunner-k2-humanoid-robot-accelerating-commercial-deployment-302281546.html\",\n        \"quote\": \"52 total; hands feature up to 11 DOF per hand (active and passive)\",\n        \"accessed\": \"2026-09-20\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"independent\",\n        \"review\": {\n          \"status\": \"inaccessible\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The per-host request budget was reached during the review, so the source content and claim could not be re-established.\"\n        }\n      }\n    },\n    \"battery_runtime_min\": {\n      \"value\": 480,\n      \"status\": \"demonstrated\",\n      \"source\": {\n        \"url\": \"https://www.prnewswire.com/news-releases/keplers-forerunner-k2-bumblebee-robot-completes-8-hour-livestream-at-waic-2025-signaling-major-step-toward-real-world-deployment-of-embodied-ai-in-industrial-settings-302520070.html\",\n        \"quote\": \"1-hour charge, 8-hour operation\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"payload_kg\": {\n      \"value\": 30,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.prnewswire.com/news-releases/keplers-forerunner-k2-bumblebee-robot-completes-8-hour-livestream-at-waic-2025-signaling-major-step-toward-real-world-deployment-of-embodied-ai-in-industrial-settings-302520070.html\",\n        \"quote\": \"30 kg (66 lbs)\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"hand_dof\": {\n      \"value\": 11,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.prnewswire.com/news-releases/kepler-debuts-forerunner-k2-humanoid-robot-accelerating-commercial-deployment-302281546.html\",\n        \"quote\": \"up to 11 degrees of freedom (active and passive) per hand\",\n        \"accessed\": \"2026-09-20\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"independent\",\n        \"review\": {\n          \"status\": \"inaccessible\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The per-host request budget was reached during the review, so the source content and claim could not be re-established.\"\n        }\n      }\n    },\n    \"tactile_skin\": {\n      \"value\": true,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.prnewswire.com/news-releases/kepler-debuts-forerunner-k2-humanoid-robot-accelerating-commercial-deployment-302281546.html\",\n        \"quote\": \"Each fingertip is equipped with a flexible sensor that includes up to 96 contact points\",\n        \"accessed\": \"2026-09-20\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"independent\",\n        \"review\": {\n          \"status\": \"inaccessible\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The per-host request budget was reached during the review, so the source content and claim could not be re-established.\"\n        }\n      }\n    },\n    \"charge_time_min\": {\n      \"value\": 60,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.prnewswire.com/news-releases/keplers-forerunner-k2-bumblebee-robot-completes-8-hour-livestream-at-waic-2025-signaling-major-step-toward-real-world-deployment-of-embodied-ai-in-industrial-settings-302520070.html\",\n        \"quote\": \"1-hour charge, 8-hour operation\",\n        \"accessed\": \"2026-09-21\"\n      }\n    },\n    \"locomotion\": {\n      \"value\": \"bipedal\",\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.prnewswire.com/news-releases/kepler-debuts-forerunner-k2-humanoid-robot-accelerating-commercial-deployment-302281546.html\",\n        \"quote\": \"improved gait planning and control algorithms have enhanced K2's stability against external disturbances and its walking speed\",\n        \"accessed\": \"2026-09-21\"\n      }\n    }\n  },\n  \"price_history\": [\n    {\n      \"date\": \"2025-08-01\",\n      \"amount\": 248000,\n      \"currency\": \"CNY\",\n      \"variant\": \"Bumblebee base pre-sale configuration\",\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.prnewswire.com/news-releases/keplers-forerunner-k2-bumblebee-robot-completes-8-hour-livestream-at-waic-2025-signaling-major-step-toward-real-world-deployment-of-embodied-ai-in-industrial-settings-302520070.html\",\n        \"quote\": \"Pre-sales launched with three configurations starting at ¥248,000\",\n        \"accessed\": \"2026-09-20\"\n      }\n    }\n  ],\n  \"delivery\": {\n    \"status\": \"demonstrated\",\n    \"timeline\": [\n      {\n        \"date\": \"2024-10-21\",\n        \"event\": \"announced\",\n        \"detail\": \"Forerunner K2 (Gen 5.0) debuted at Gitex Global 2024 in Dubai.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://www.prnewswire.com/news-releases/kepler-debuts-forerunner-k2-humanoid-robot-accelerating-commercial-deployment-302281546.html\",\n          \"quote\": \"The Forerunner K2 represents the Gen 5.0 robot model, showcasing a seamless integration of the humanoid robot's cerebral, cerebellar, and high-load body functions.\",\n          \"accessed\": \"2026-09-20\"\n        }\n      },\n      {\n        \"date\": \"2025-07-27\",\n        \"event\": \"first-demo\",\n        \"detail\": \"K2 'Bumblebee' completed an 8-hour continuous livestream at WAIC 2025.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://www.prnewswire.com/news-releases/keplers-forerunner-k2-bumblebee-robot-completes-8-hour-livestream-at-waic-2025-signaling-major-step-toward-real-world-deployment-of-embodied-ai-in-industrial-settings-302520070.html\",\n          \"quote\": \"1-hour charge, 8-hour operation\",\n          \"accessed\": \"2026-09-20\"\n        }\n      },\n      {\n        \"date\": \"2025-08-01\",\n        \"event\": \"preorders-open\",\n        \"detail\": \"Pre-sales opened for the K2 'Bumblebee', marketed as the world's first commercially available planetary-roller-screw-driven humanoid robot.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://www.prnewswire.com/news-releases/keplers-forerunner-k2-bumblebee-robot-completes-8-hour-livestream-at-waic-2025-signaling-major-step-toward-real-world-deployment-of-embodied-ai-in-industrial-settings-302520070.html\",\n          \"quote\": \"World's first commercially available planetary roller screw-driven humanoid robot\",\n          \"accessed\": \"2026-09-20\"\n        }\n      }\n    ]\n  },\n  \"capabilities\": [\n    {\n      \"id\": \"continuous-operation-1h\",\n      \"status\": \"demonstrated\",\n      \"autonomy\": \"unknown\",\n      \"source\": {\n        \"url\": \"https://www.prnewswire.com/news-releases/keplers-forerunner-k2-bumblebee-robot-completes-8-hour-livestream-at-waic-2025-signaling-major-step-toward-real-world-deployment-of-embodied-ai-in-industrial-settings-302520070.html\",\n        \"quote\": \"1-hour charge, 8-hour operation\",\n        \"accessed\": \"2026-09-20\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"independent\",\n        \"review\": {\n          \"status\": \"inaccessible\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The per-host request budget was reached during the review, so the source content and claim could not be re-established.\"\n        }\n      },\n      \"note\": \"8-hour continuous livestream at WAIC 2025 -- Kepler's own event and press release, not independently observed; the release does not state whether tasks during the stream were autonomous, scripted, or teleoperated, so autonomy is unknown.\"\n    }\n  ],\n  \"notes\": [\n    \"Height/weight conflict: Kepler's own PR Newswire releases (Oct 2024 and Aug 2025) do not give a consistent single figure across all Kepler materials; several secondary aggregator sites (e.g. humanoid.guide-derived listings) report 178 cm / 85 kg instead of the 175 cm / 75 kg used here. The 175 cm / 75 kg figure is used because it traces to Kepler's own named press release with a direct quote; the 178 cm / 85 kg figure could not be traced to a specific dated primary source and is not used.\",\n    \"An earlier press round (April 2025, SAIC-GM Shanghai plant deployment) and independent coverage cited a $30,000 USD base price; this is not included as a price_history entry because it could not be traced to a specific dated Kepler statement during this build, and it conflicts with the ¥248,000 pre-sale price from the Aug 2025 Kepler release.\",\n    \"The 8-hour livestream is Kepler's own event, described in a Kepler press release rather than fully independent press coverage; it is recorded as 'demonstrated' rather than 'shipped' or bare 'claimed' because it is a real, timestamped, continuous public demonstration.\",\n    \"No named customer with invoice/serial-number/unboxing evidence was found, so delivery.status remains 'demonstrated', not 'shipped'.\",\n    \"Shipped-bar research (2026-09-20): Web search for delivery evidence returned only NASA's unrelated Kepler/K2 space telescope mission and generic spec-sheet pages; no named-customer delivery evidence for the Kepler Robotics K2 humanoid was found in this pass. Remains at prior status.\"\n  ],\n  \"updated\": \"2026-09-21\",\n  \"order_type\": {\n    \"value\": \"preorder\",\n    \"status\": \"claimed\",\n    \"source\": {\n      \"url\": \"https://www.prnewswire.com/news-releases/keplers-forerunner-k2-bumblebee-robot-completes-8-hour-livestream-at-waic-2025-signaling-major-step-toward-real-world-deployment-of-embodied-ai-in-industrial-settings-302520070.html\",\n      \"quote\": \"World's first commercially available planetary roller screw-driven humanoid robot\",\n      \"accessed\": \"2026-09-21\"\n    }\n  },\n  \"simulation\": {\n    \"review\": {\n      \"status\": \"not_confirmed\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://www.gotokepler.com\"\n      ],\n      \"reason\": \"Targeted searches found no confirmed model for this record; does not mean unavailable.\"\n    },\n    \"artifacts\": []\n  },\n  \"actuator_architecture\": {\n    \"review\": {\n      \"status\": \"not_confirmed\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://www.gotokepler.com\"\n      ],\n      \"reason\": \"Targeted actuator searches did not confirm an exact-variant architecture claim for this record; this does not mean none exists.\"\n    },\n    \"groups\": []\n  }\n}\n"
    },
    {
      "path": "data/robots/limx-dynamics-oli.json",
      "raw": "{\n  \"slug\": \"limx-dynamics-oli\",\n  \"name\": \"Oli\",\n  \"manufacturer\": {\n    \"name\": \"LimX Dynamics\",\n    \"country\": \"CN\",\n    \"url\": \"https://www.limxdynamics.com\"\n  },\n  \"category\": \"full-size\",\n  \"announced\": {\n    \"date\": \"2025-07-30\",\n    \"source\": {\n      \"url\": \"https://www.limxdynamics.com/en/news/BK000043\",\n      \"quote\": \"31 active degrees of freedom\",\n      \"accessed\": \"2026-09-20\"\n    }\n  },\n  \"specs\": {\n    \"height_cm\": {\n      \"value\": 165,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.limxdynamics.com/en/products/oli\",\n        \"quote\": \"165cm height\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"dof\": {\n      \"value\": 31,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.limxdynamics.com/en/news/BK000043\",\n        \"quote\": \"31 active degrees of freedom\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"official\",\n        \"variant\": \"Oli\",\n        \"review\": {\n          \"status\": \"supported\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The official Oli specification states 31 active degrees of freedom for Oli, matching the recorded value and claim scope.\"\n        }\n      }\n    },\n    \"walking_speed_kmh\": {\n      \"value\": 5,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.therobotreport.com/limx-dynamics-launches-limx-oli-full-size-humanoid-robot/\",\n        \"quote\": \"Maximum walking speed is 5 km/h.\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"payload_kg\": {\n      \"value\": 3,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.therobotreport.com/limx-dynamics-launches-limx-oli-full-size-humanoid-robot/\",\n        \"quote\": \"Single-arm payload is 3 kg.\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"actuator_torque_nm\": {\n      \"value\": 150,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.limxdynamics.com/en/products/oli/spec\",\n        \"quote\": \"Maximum Joint Torque 150N·m\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"official\",\n        \"variant\": \"Oli\",\n        \"review\": {\n          \"status\": \"supported\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The official Oli specification states a maximum joint torque of 150 N·m for Oli, matching the recorded value and claim scope.\"\n        }\n      },\n      \"note\": \"Spec sheet footnote: 'The maximum torque differs among motors. The value shown represents the maximum torque of the highest-torque motor.'\"\n    },\n    \"battery_swappable\": {\n      \"value\": true,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.limxdynamics.com/en/products/oli/spec\",\n        \"quote\": \"Slide-Out Battery Module\",\n        \"accessed\": \"2026-09-21\"\n      }\n    }\n  },\n  \"price_history\": [],\n  \"delivery\": {\n    \"status\": \"demonstrated\",\n    \"timeline\": [\n      {\n        \"date\": \"2025-07-30\",\n        \"event\": \"announced\",\n        \"detail\": \"LimX Dynamics launched the LimX Oli full-size general-purpose humanoid robot.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://www.limxdynamics.com/en/news/BK000043\",\n          \"quote\": \"31 active degrees of freedom\",\n          \"accessed\": \"2026-09-20\"\n        }\n      },\n      {\n        \"date\": \"2025-08-08\",\n        \"event\": \"first-demo\",\n        \"detail\": \"Oli made its public debut at the World Robot Conference (WRC) in Beijing.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://www.therobotreport.com/limx-dynamics-launches-limx-oli-full-size-humanoid-robot/\",\n          \"quote\": \"will make its public debut this week at the World Robot Conference (WRC) in Beijing\",\n          \"accessed\": \"2026-09-20\"\n        }\n      }\n    ]\n  },\n  \"capabilities\": [\n    {\n      \"id\": \"fall-recovery\",\n      \"status\": \"demonstrated\",\n      \"autonomy\": \"autonomous\",\n      \"source\": {\n        \"url\": \"https://interestingengineering.com/innovation/humanoid-robot-oli-full-body-human-like-sequence\",\n        \"quote\": \"the robotics company showcased two Oli humanoids lying down on the floor and then getting back up autonomously\",\n        \"accessed\": \"2026-09-20\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"independent\",\n        \"review\": {\n          \"status\": \"inaccessible\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The per-host request budget was reached during the review, so the source content and claim could not be re-established.\"\n        }\n      },\n      \"note\": \"From a YouTube video released 2025-10-23, covered by Interesting Engineering (published 2025-10-28); explicit 'autonomously' from the source.\"\n    },\n    {\n      \"id\": \"pick-and-place\",\n      \"status\": \"demonstrated\",\n      \"autonomy\": \"autonomous\",\n      \"source\": {\n        \"url\": \"https://www.humanoidsdaily.com/news/limx-dynamics-secures-200m-pre-ipo-round-unveils-fully-autonomous-oli-in-uncut-demo\",\n        \"quote\": \"no teleoperation and is captured in 'one continuous take'\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"independent\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The text source was reviewed, but no video segment was watched; the existing capability status and autonomy classification for Oli were not fully verified.\"\n        }\n      },\n      \"note\": \"LimX's own uncut, single-take household-chores demo (published around 2026-07-25), described by LimX and Humanoids Daily as fully autonomous long-horizon mobile manipulation ('entirely autonomously'); the source does not itemize the specific objects picked and placed.\"\n    }\n  ],\n  \"notes\": [\n    \"Weight, battery runtime and price were not stated on the manufacturer product page or in The Robot Report's launch article fetched during this build; a 9,500 mAh / 58.8V pack and ~2-hour runtime, and a ~55 kg weight for the Lite/EDU variants, are reported on third-party retailer/aggregator listings (e.g. RobotShop) but could not be traced to a dated manufacturer statement, so these fields are omitted rather than guessed.\",\n    \"Oli ships in Lite, EDU and Super editions with different specs and pricing; the values recorded here are the ones stated without a variant qualifier on the manufacturer's product/news pages.\",\n    \"Currently sold in Mainland China only per the manufacturer's news page, with a global version described as forthcoming.\",\n    \"locomotion left out (2026-09-21): searched the manufacturer's own product/press page and its main launch coverage (The Robot Report / IEEE Spectrum / named outlet where applicable) for a literal quote naming the propulsion (\\\"bipedal\\\", \\\"legs\\\", \\\"walks\\\", \\\"wheeled base\\\", etc.); none of the pages fetched in this pass contained a checkable sentence naming it specifically for Oli -- most pages describe height/DOF/speed without ever stating the locomotion type in words. Left out rather than inferred from photos or category. Revisit with a source that states it directly.\"\n  ],\n  \"updated\": \"2026-09-21\",\n  \"warranty\": [\n    {\n      \"months\": 12,\n      \"region\": \"Not specified (single value on spec sheet)\",\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.limxdynamics.com/en/products/oli/spec\",\n        \"quote\": \"12 Months\",\n        \"accessed\": \"2026-09-21\"\n      }\n    }\n  ],\n  \"simulation\": {\n    \"review\": {\n      \"status\": \"not_confirmed\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://www.limxdynamics.com\"\n      ],\n      \"reason\": \"Targeted searches found no confirmed model for this record; does not mean unavailable.\"\n    },\n    \"artifacts\": []\n  },\n  \"actuator_architecture\": {\n    \"review\": {\n      \"status\": \"not_confirmed\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://www.limxdynamics.com\"\n      ],\n      \"reason\": \"Targeted actuator searches did not confirm an exact-variant architecture claim for this record; this does not mean none exists.\"\n    },\n    \"groups\": []\n  }\n}\n"
    },
    {
      "path": "data/robots/mentee-menteebot.json",
      "raw": "{\n  \"slug\": \"mentee-menteebot\",\n  \"name\": \"MenteeBot V3\",\n  \"manufacturer\": {\n    \"name\": \"Mentee Robotics\",\n    \"country\": \"IL\",\n    \"url\": \"https://www.menteebot.com\"\n  },\n  \"category\": \"full-size\",\n  \"announced\": {\n    \"date\": \"2025-02-17\",\n    \"source\": {\n      \"url\": \"https://interestingengineering.com/innovation/israel-humanoid-robot-with-360-vision\",\n      \"quote\": \"Israel's Mentee Robotics has unveiled an updated version of its versatile Menteebot humanoid. MenteeBot V3.0 is a fully integrated humanoid robot with full-stack AI and proprietary hardware.\",\n      \"accessed\": \"2026-09-20\"\n    }\n  },\n  \"specs\": {\n    \"height_cm\": {\n      \"value\": 175,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.menteebot.com/bot/\",\n        \"quote\": \"175cmHeight\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"weight_kg\": {\n      \"value\": 70,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.menteebot.com/bot/\",\n        \"quote\": \"70kgWeight\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"dof\": {\n      \"value\": 40,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.menteebot.com/bot/\",\n        \"quote\": \"40\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"documentation\",\n        \"publisher_type\": \"official\",\n        \"variant\": \"MenteeBot V3\",\n        \"review\": {\n          \"status\": \"supported\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The official MenteeBot product page states 40 DoF for MenteeBot V3, matching the recorded value and claim scope.\"\n        }\n      }\n    },\n    \"walking_speed_kmh\": {\n      \"value\": 5.4,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.menteebot.com/bot/\",\n        \"quote\": \"1.5m/s\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"payload_kg\": {\n      \"value\": 25,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.menteebot.com/bot/\",\n        \"quote\": \"Can carry up to 25kg\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"battery_swappable\": {\n      \"value\": true,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://interestingengineering.com/innovation/israel-humanoid-robot-with-360-vision\",\n        \"quote\": \"With its hot-swappable battery system, the robot can operate continuously for more than three hours without any disruptions.\",\n        \"accessed\": \"2026-09-21\"\n      }\n    }\n  },\n  \"order_type\": {\n    \"value\": \"none\",\n    \"status\": \"claimed\",\n    \"source\": {\n      \"url\": \"https://www.mobileye.com/news/mobileye-to-acquire-mentee-robotics-to-accelerate-physical-ai-leadership/\",\n      \"quote\": \"Mentee has signed an agreement to be acquired by Mobileye, with the transaction expected to close in the first quarter\",\n      \"accessed\": \"2026-09-21\"\n    },\n    \"note\": \"MenteeBot is not offered for sale; no price, cart, waitlist, or preorder mechanism was found on menteebot.com. Mentee Robotics is being acquired by Mobileye (deal announced Jan 2026) and describes 2026 as a proof-of-concept stage with select enterprise customers ahead of planned 2027 production, not a public buying process.\"\n  },\n  \"price_history\": [],\n  \"delivery\": {\n    \"status\": \"demonstrated\",\n    \"timeline\": [\n      {\n        \"date\": \"2025-02-17\",\n        \"event\": \"announced\",\n        \"detail\": \"Mentee Robotics unveiled MenteeBot V3.0, a fully integrated humanoid with proprietary hardware and hot-swappable batteries for continuous operation.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://interestingengineering.com/innovation/israel-humanoid-robot-with-360-vision\",\n          \"quote\": \"Israel's Mentee Robotics has unveiled an updated version of its versatile Menteebot humanoid.\",\n          \"accessed\": \"2026-09-20\"\n        }\n      },\n      {\n        \"date\": \"2025-11-24\",\n        \"event\": \"first-demo\",\n        \"detail\": \"Mentee published an 18-minute continuous (uncut) shot of two V3 MenteeBots working together in a warehouse, moving boxes between piles and flow racks without human intervention.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://www.humanoidsdaily.com/news/mentee-robotics-demonstrates-warehouse-autonomy-with-dual-robot-uncut-demo\",\n          \"quote\": \"In the 18-minute continuous shot, two V3 MenteeBots transfer a total of 32 boxes from eight different piles into four flow racks.\",\n          \"accessed\": \"2026-09-20\"\n        }\n      }\n    ]\n  },\n  \"capabilities\": [\n    {\n      \"id\": \"box-handling\",\n      \"status\": \"demonstrated\",\n      \"autonomy\": \"unknown\",\n      \"source\": {\n        \"url\": \"https://www.humanoidsdaily.com/news/mentee-robotics-demonstrates-warehouse-autonomy-with-dual-robot-uncut-demo\",\n        \"quote\": \"In the 18-minute continuous shot, two V3 MenteeBots transfer a total of 32 boxes from eight different piles into four flow racks.\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"independent\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The text source was reviewed, but no video segment was watched; the existing capability status and autonomy classification for the exact recorded robot variant were not fully verified.\"\n        }\n      },\n      \"note\": \"Same 2025-11-24 uncut warehouse demo already used for the delivery timeline; Mentee's own release describes it as autonomous dual-robot operation without human intervention.\"\n    }\n  ],\n  \"promises\": [\n    {\n      \"id\": \"mentee-menteebot-poc-2026\",\n      \"claim\": \"First on-site proof-of-concept deployments with customers\",\n      \"target\": \"2026\",\n      \"made_on\": \"2026-01-06\",\n      \"quote\": \"first on-site proof-of-concept deployments with customers expected in 2026\",\n      \"source_url\": \"https://www.mobileye.com/news/mobileye-to-acquire-mentee-robotics-to-accelerate-physical-ai-leadership/\",\n      \"source_name\": \"Mobileye press release\",\n      \"accessed\": \"2026-09-27\",\n      \"status\": \"open\"\n    },\n    {\n      \"id\": \"mentee-menteebot-series-production-2028\",\n      \"claim\": \"Series production and commercialization of MenteeBot\",\n      \"target\": \"2028\",\n      \"made_on\": \"2026-01-06\",\n      \"quote\": \"series production and commercialization are targeted for 2028\",\n      \"source_url\": \"https://www.mobileye.com/news/mobileye-to-acquire-mentee-robotics-to-accelerate-physical-ai-leadership/\",\n      \"source_name\": \"Mobileye press release\",\n      \"accessed\": \"2026-09-27\",\n      \"status\": \"open\"\n    }\n  ],\n  \"notes\": [\n    \"Battery runtime is reported inconsistently across press coverage (Interesting Engineering: 'more than three hours'; other outlets: 'around 4 hours') and is not stated on Mentee's own /bot/ page, so battery_runtime_min is omitted rather than picking one figure.\",\n    \"No official price has been published by Mentee Robotics; a $35,000 figure circulates on aggregator/marketplace sites but was not traced back to a manufacturer statement, so price_history is left empty.\",\n    \"In 2026 press reported Mobileye (whose CEO Amnon Shashua also founded Mentee Robotics) in talks to acquire Mentee Robotics; this is a corporate/ownership development, not a delivery or spec fact, and was not verified further for this record.\",\n    \"locomotion left out (2026-09-21): searched the manufacturer's own product/press page and its main launch coverage (The Robot Report / IEEE Spectrum / named outlet where applicable) for a literal quote naming the propulsion (\\\"bipedal\\\", \\\"legs\\\", \\\"walks\\\", \\\"wheeled base\\\", etc.); none of the pages fetched in this pass contained a checkable sentence naming it specifically for MenteeBot -- most pages describe height/DOF/speed without ever stating the locomotion type in words. Left out rather than inferred from photos or category. Revisit with a source that states it directly.\"\n  ],\n  \"updated\": \"2026-09-21\",\n  \"simulation\": {\n    \"review\": {\n      \"status\": \"not_confirmed\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://www.menteebot.com\"\n      ],\n      \"reason\": \"Targeted searches found no confirmed model for this record; does not mean unavailable.\"\n    },\n    \"artifacts\": []\n  },\n  \"actuator_architecture\": {\n    \"review\": {\n      \"status\": \"not_confirmed\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://www.menteebot.com\"\n      ],\n      \"reason\": \"Targeted actuator searches did not confirm an exact-variant architecture claim for this record; this does not mean none exists.\"\n    },\n    \"groups\": []\n  }\n}\n"
    },
    {
      "path": "data/robots/neura-robotics-4ne-1.json",
      "raw": "{\n  \"slug\": \"neura-robotics-4ne-1\",\n  \"name\": \"4NE-1\",\n  \"manufacturer\": {\n    \"name\": \"NEURA Robotics\",\n    \"country\": \"DE\",\n    \"url\": \"https://neura-robotics.com\"\n  },\n  \"category\": \"full-size\",\n  \"announced\": {\n    \"date\": \"2026-01-06\",\n    \"source\": {\n      \"url\": \"https://neura-robotics.com/neura-robotics-at-ces-2026/\",\n      \"quote\": \"NEURA Robotics at CES 2026\",\n      \"accessed\": \"2026-09-20\"\n    }\n  },\n  \"specs\": {\n    \"height_cm\": {\n      \"value\": 180,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://neura-robotics.com/products/4ne1/\",\n        \"quote\": \"180\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"weight_kg\": {\n      \"value\": 80,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://neura-robotics.com/products/4ne1/\",\n        \"quote\": \"80\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"walking_speed_kmh\": {\n      \"value\": 5,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://neura-robotics.com/products/4ne1/\",\n        \"quote\": \"5\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"payload_kg\": {\n      \"value\": 100,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://neura-robotics.com/products/4ne1/\",\n        \"quote\": \"10-100\",\n        \"accessed\": \"2026-09-20\"\n      }\n    }\n  },\n  \"order_type\": {\n    \"value\": \"preorder\",\n    \"status\": \"claimed\",\n    \"source\": {\n      \"url\": \"https://neura-robotics.com/product/4ne1-reservation/\",\n      \"quote\": \"A reservation fee secures your place in the delivery queue.\",\n      \"accessed\": \"2026-09-21\"\n    },\n    \"note\": \"A refundable €100 reservation fee (credited toward the final purchase price) secures a queue position ahead of expected end-of-2026 delivery -- a preorder, not a waitlist signup with no payment and not a live cart checkout.\"\n  },\n  \"price_history\": [\n    {\n      \"date\": \"2026-09-20\",\n      \"amount\": 98000,\n      \"currency\": \"EUR\",\n      \"variant\": \"Gen 3.5, single unit (1-19)\",\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://neura-robotics.com/product/4ne1-reservation/\",\n        \"quote\": \"98,000 € (excluding taxes and shipping)\",\n        \"accessed\": \"2026-09-20\"\n      }\n    }\n  ],\n  \"delivery\": {\n    \"status\": \"claimed\",\n    \"timeline\": [\n      {\n        \"date\": \"2026-01-06\",\n        \"event\": \"announced\",\n        \"detail\": \"4NE-1 Gen 3.5 and 4NE-1 Mini unveiled at CES 2026, designed with Studio F.A. Porsche.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://neura-robotics.com/neura-robotics-at-ces-2026/\",\n          \"quote\": \"NEURA Robotics at CES 2026\",\n          \"accessed\": \"2026-09-20\"\n        }\n      },\n      {\n        \"date\": \"2026-09-20\",\n        \"event\": \"preorders-open\",\n        \"detail\": \"Reservation open for €100 (refundable) to secure a place in the delivery queue; Gen 3.5 expected end of 2026.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://neura-robotics.com/product/4ne1-reservation/\",\n          \"quote\": \"secures your place in the delivery queue\",\n          \"accessed\": \"2026-09-20\"\n        }\n      }\n    ]\n  },\n  \"promises\": [\n    {\n      \"id\": \"neura-4ne1-gen35-availability-2026\",\n      \"claim\": \"4NE-1 Gen 3.5 available\",\n      \"target\": \"2026\",\n      \"made_on\": \"2026-01-05\",\n      \"quote\": \"4NE1 Gen 3.5 is expected to be available end of 2026.\",\n      \"source_url\": \"https://neura-robotics.com/product/4ne1-reservation/\",\n      \"source_name\": \"NEURA Robotics, 4NE-1 reservation page\",\n      \"accessed\": \"2026-09-27\",\n      \"status\": \"open\"\n    }\n  ],\n  \"capabilities\": [\n    {\n      \"id\": \"pick-and-place\",\n      \"status\": \"demonstrated\",\n      \"autonomy\": \"unknown\",\n      \"source\": {\n        \"url\": \"https://newatlas.com/robotics/neura-4ne1-humanoid-robot/\",\n        \"quote\": \"performing a raft of mediocre or tiresome domestic chores – from doing the ironing to food prep\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"independent\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The text source was reviewed, but no video segment was watched; the existing capability status and autonomy classification for the exact recorded robot variant were not fully verified.\"\n        }\n      },\n      \"note\": \"NEURA's own demo reel, alternating simulation and real-world footage. New Atlas: \\\"It's not clear whether teleoperation was involved here, but the video does mention training the system in a simulated environment.\\\" No explicit no-teleop statement, so autonomy is recorded as unknown rather than autonomous.\"\n    }\n  ],\n  \"notes\": [\n    \"Degrees of freedom is reported inconsistently across secondary sources (35, 42+, 55 DoF) and could not be traced to one dated primary-source figure during this build, so the dof spec field is omitted rather than guessed.\",\n    \"Battery runtime is widely reported as 6-8 hours across secondary/aggregator sites, but the primary product page and reservation page fetched during this build did not state a runtime figure, so battery_runtime_min is omitted.\",\n    \"The manufacturer's official datasheet PDF (linked from the CES 2026 page) was not accessible as text during this build and should be added as a follow-up source for dof/battery.\",\n    \"locomotion left out (2026-09-21): searched the manufacturer's own product/press page and its main launch coverage (The Robot Report / IEEE Spectrum / named outlet where applicable) for a literal quote naming the propulsion (\\\"bipedal\\\", \\\"legs\\\", \\\"walks\\\", \\\"wheeled base\\\", etc.); none of the pages fetched in this pass contained a checkable sentence naming it specifically for 4NE-1 -- most pages describe height/DOF/speed without ever stating the locomotion type in words. Left out rather than inferred from photos or category. Revisit with a source that states it directly.\"\n  ],\n  \"updated\": \"2026-09-21\",\n  \"simulation\": {\n    \"review\": {\n      \"status\": \"not_confirmed\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://neura-robotics.com\"\n      ],\n      \"reason\": \"Targeted searches found no confirmed model for this record; does not mean unavailable.\"\n    },\n    \"artifacts\": []\n  },\n  \"actuator_architecture\": {\n    \"review\": {\n      \"status\": \"not_confirmed\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://neura-robotics.com\"\n      ],\n      \"reason\": \"Targeted actuator searches did not confirm an exact-variant architecture claim for this record; this does not mean none exists.\"\n    },\n    \"groups\": []\n  }\n}\n"
    },
    {
      "path": "data/robots/persona-ai-gen1.json",
      "raw": "{\n  \"slug\": \"persona-ai-gen1\",\n  \"name\": \"Persona Gen 1\",\n  \"manufacturer\": {\n    \"name\": \"Persona AI, Inc.\",\n    \"country\": \"US\",\n    \"url\": \"https://persona.ai\"\n  },\n  \"category\": \"industrial\",\n  \"announced\": {\n    \"date\": \"2025-05-17\",\n    \"source\": {\n      \"url\": \"https://www.therobotreport.com/persona-ai-raises-27m-develops-purpose-built-humanoid-robots-shipyards/\",\n      \"quote\": \"Persona AI Inc., a humanoid robot and embodied artificial intelligence developer, this week said it has closed an oversubscribed pre-seed funding round, raising $27 million.\",\n      \"accessed\": \"2026-09-20\"\n    }\n  },\n  \"specs\": {},\n  \"order_type\": {\n    \"value\": \"quote\",\n    \"status\": \"claimed\",\n    \"source\": {\n      \"url\": \"https://info.persona.ai/lease-a-humanoid\",\n      \"quote\": \"Learn how the Persona Humanoid Leasing Program includes the AI platform, autonomous API updates, custom tooling modules, and comprehensive fleet management training.\",\n      \"accessed\": \"2026-09-21\"\n    },\n    \"note\": \"Gen 1 is not offered with a published price or checkout; acquisition is via a robotics-as-a-service leasing program reached through a 'Contact Us' form, not a self-service cart.\"\n  },\n  \"price_history\": [],\n  \"capabilities\": [\n    {\n      \"id\": \"teleoperation-shown\",\n      \"status\": \"demonstrated\",\n      \"autonomy\": \"teleoperated\",\n      \"source\": {\n        \"url\": \"https://persona.ai/robot-welding-in-a-real-industrial-environment/\",\n        \"quote\": \"our human operators guide the robot through dexterous tasks in real time\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"official\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The text source was reviewed, but no video segment was watched; the existing capability status and autonomy classification for the exact recorded robot variant were not fully verified.\"\n        }\n      },\n      \"note\": \"Persona AI's own account of a VR-headset-teleoperated welding test at ARC Specialties, Houston; explicitly described as human-guided, collecting data toward future autonomous operation.\"\n    },\n    {\n      \"id\": \"tool-use\",\n      \"status\": \"demonstrated\",\n      \"autonomy\": \"teleoperated\",\n      \"source\": {\n        \"url\": \"https://persona.ai/robot-welding-in-a-real-industrial-environment/\",\n        \"quote\": \"strike a lit torch, maintain a steady arc, and successfully lay down a weld path\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"official\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The text source was reviewed, but no video segment was watched; the existing capability status and autonomy classification for the exact recorded robot variant were not fully verified.\"\n        }\n      },\n      \"note\": \"Same teleoperated welding-torch demo; robot squats, welds and stands back up under its own power while under human teleoperation.\"\n    }\n  ],\n  \"delivery\": {\n    \"status\": \"demonstrated\",\n    \"timeline\": [\n      {\n        \"date\": \"2025-05-17\",\n        \"event\": \"announced\",\n        \"detail\": \"Persona AI (Houston) announced a $27M oversubscribed pre-seed round and said it had already signed an agreement with HD Hyundai to deploy humanoids into shipyards, with initial delivery expected within 18 months.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"sector\": \"manufacturing\",\n        \"source\": {\n          \"url\": \"https://www.therobotreport.com/persona-ai-raises-27m-develops-purpose-built-humanoid-robots-shipyards/\",\n          \"quote\": \"Persona AI said it has already signed an agreement with HD Hyundai, a global leader in shipbuilding, to deploy humanoids into shipyards, with initial delivery expected within 18 months.\",\n          \"accessed\": \"2026-09-20\"\n        }\n      },\n      {\n        \"date\": \"2026-07-13\",\n        \"event\": \"first-demo\",\n        \"detail\": \"Persona AI deployed a humanoid welding robot at its own Houston facility, sized to fit human welders' physical envelope in confined shipyard spaces; described as prototype/pre-commercial, with commercial testing targeted for 2027.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"sector\": \"manufacturing\",\n        \"source\": {\n          \"url\": \"https://www.robotaigeek.com/news/persona-ai-deploys-humanoid-welding-robot-in-houston-shipyards\",\n          \"quote\": \"The 175cm, 85kg robot is designed to fit the same physical envelope as human welders in confined shipyard spaces.\",\n          \"accessed\": \"2026-09-20\"\n        }\n      }\n    ]\n  },\n  \"promises\": [\n    {\n      \"id\": \"persona-ai-gen1-prototype-2026\",\n      \"claim\": \"Prototype humanoid welding robots delivered to HD Hyundai\",\n      \"target\": \"2026\",\n      \"made_on\": \"2025-05-07\",\n      \"quote\": \"Prototype completion targeted for end of 2026\",\n      \"source_url\": \"https://www.prnewswire.com/news-releases/hd-hyundai-and-persona-ai-sign-agreement-to-deploy-humanoid-welding-robots-for-shipbuilding-automation-302449258.html\",\n      \"source_name\": \"PR Newswire, HD Hyundai / Persona AI\",\n      \"accessed\": \"2026-09-27\",\n      \"status\": \"open\"\n    },\n    {\n      \"id\": \"persona-ai-gen1-commercial-2027\",\n      \"claim\": \"Field testing and full commercial deployment at shipyards\",\n      \"target\": \"2027\",\n      \"made_on\": \"2025-05-07\",\n      \"quote\": \"field testing and commercialization commencing in 2027\",\n      \"source_url\": \"https://www.prnewswire.com/news-releases/hd-hyundai-and-persona-ai-sign-agreement-to-deploy-humanoid-welding-robots-for-shipbuilding-automation-302449258.html\",\n      \"source_name\": \"PR Newswire, HD Hyundai / Persona AI\",\n      \"accessed\": \"2026-09-27\",\n      \"status\": \"open\"\n    }\n  ],\n  \"notes\": [\n    \"Persona AI's own site (persona.ai) does not publish numeric specs (height/weight/DOF/speed/payload) for Gen 1; specs is left empty rather than sourced to press coverage. Press figures conflict: RobotAIGeek (Jul 2026, on-site Houston deployment) reports '175cm, 85kg', while other secondary aggregators (not traced to a manufacturer statement) report 175 cm / 70 kg and ~32 DOF. Neither height/weight pairing could be confirmed against a Persona AI-published spec sheet during this build.\",\n    \"A later RoboHorizon report (2025-12-31) describes a $42M pre-seed round for Persona AI's humanoid welding bot, which appears inconsistent with (or a follow-on close to) the $27M pre-seed reported in May 2025 by The Robot Report; both figures are recorded here as a discrepancy rather than resolved. See https://robohorizon.com/en-us/news/2025/12/persona-ai-unveils-humanoid-bot-with-42m-to-weld-in-shipyards/ (accessed 2026-09-20).\",\n    \"No named-customer unit with an invoice, serial number, or independent unboxing was found; the HD Hyundai relationship is a signed deployment agreement/MOU with initial delivery 'expected' within 18 months of May 2025, not a completed shipment. delivery.status is set to 'demonstrated' on the strength of the on-site Houston welding-robot deployment (RobotAIGeek, Jul 2026), not 'shipped'.\",\n    \"No public price has been found for Gen 1; Persona AI operates a robotics-as-a-service model without published unit pricing, so price_history is left empty.\",\n    \"locomotion left out (2026-09-21): searched the manufacturer's own product/press page and its main launch coverage (The Robot Report / IEEE Spectrum / named outlet where applicable) for a literal quote naming the propulsion (\\\"bipedal\\\", \\\"legs\\\", \\\"walks\\\", \\\"wheeled base\\\", etc.); none of the pages fetched in this pass contained a checkable sentence naming it specifically for Gen 1 -- most pages describe height/DOF/speed without ever stating the locomotion type in words. Left out rather than inferred from photos or category. Revisit with a source that states it directly.\"\n  ],\n  \"updated\": \"2026-09-21\",\n  \"simulation\": {\n    \"review\": {\n      \"status\": \"not_confirmed\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://persona.ai\"\n      ],\n      \"reason\": \"Targeted searches found no confirmed model for this record; does not mean unavailable.\"\n    },\n    \"artifacts\": []\n  },\n  \"actuator_architecture\": {\n    \"review\": {\n      \"status\": \"not_confirmed\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://persona.ai\"\n      ],\n      \"reason\": \"Targeted actuator searches did not confirm an exact-variant architecture claim for this record; this does not mean none exists.\"\n    },\n    \"groups\": []\n  }\n}\n"
    },
    {
      "path": "data/robots/pndbotics-adam.json",
      "raw": "{\n  \"slug\": \"pndbotics-adam\",\n  \"name\": \"Adam SP\",\n  \"manufacturer\": {\n    \"name\": \"PNDbotics\",\n    \"country\": \"CN\",\n    \"url\": \"https://www.pndbotics.com\"\n  },\n  \"category\": \"full-size\",\n  \"announced\": {\n    \"date\": \"2025-07-25\",\n    \"source\": {\n      \"url\": \"https://newatlas.com/ai-humanoids/pndbotics-adam-humanoid-robot/\",\n      \"quote\": \"1.67-m (5.5-ft)\",\n      \"accessed\": \"2026-09-20\"\n    }\n  },\n  \"specs\": {\n    \"height_cm\": {\n      \"value\": 167,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://newatlas.com/ai-humanoids/pndbotics-adam-humanoid-robot/\",\n        \"quote\": \"1.67-m (5.5-ft)\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"weight_kg\": {\n      \"value\": 62,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://newatlas.com/ai-humanoids/pndbotics-adam-humanoid-robot/\",\n        \"quote\": \"62-kg (136-lb)\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"dof\": {\n      \"value\": 41,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://newatlas.com/ai-humanoids/pndbotics-adam-humanoid-robot/\",\n        \"quote\": \"41 joints driven by PSA quasi-direct-drive actuators\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"independent\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The reviewed source did not establish both the exact recorded value and the concrete robot variant for this specification.\"\n        }\n      }\n    },\n    \"payload_kg\": {\n      \"value\": 5,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://newatlas.com/ai-humanoids/pndbotics-adam-humanoid-robot/\",\n        \"quote\": \"the dexterity to lift payloads of about 5 kg\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"actuator_torque_nm\": {\n      \"value\": 340,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://newatlas.com/ai-humanoids/pndbotics-adam-humanoid-robot/\",\n        \"quote\": \"340 Nm (250 lb.ft) of joint torque\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"independent\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The reviewed source did not establish both the exact recorded value and the concrete robot variant for this specification.\"\n        }\n      }\n    }\n  },\n  \"price_history\": [\n    {\n      \"date\": \"2025-07-25\",\n      \"amount\": 100000,\n      \"currency\": \"USD\",\n      \"variant\": \"Adam SP prototype (listed online)\",\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://newatlas.com/ai-humanoids/pndbotics-adam-humanoid-robot/\",\n        \"quote\": \"$100,000\",\n        \"accessed\": \"2026-09-20\"\n      }\n    }\n  ],\n  \"delivery\": {\n    \"status\": \"demonstrated\",\n    \"timeline\": [\n      {\n        \"date\": \"2025-07-01\",\n        \"event\": \"first-demo\",\n        \"detail\": \"Adam debuted publicly at a music festival in Changchun, China.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://newatlas.com/ai-humanoids/pndbotics-adam-humanoid-robot/\",\n          \"quote\": \"Humanoid robot Adam debuts at music festival in China\",\n          \"accessed\": \"2026-09-20\"\n        }\n      }\n    ]\n  },\n  \"notes\": [\n    \"Capabilities research (2026-09-20): press coverage (Gasgoo/WAIC 2026, YouTube) describes Adam demonstrating stair climbing and a Charleston-style dance, and a separate stationary rig 'Adam-U' used for motion-capture/teleoperation-based AI training. The stair-climbing source page (autonews.gasgoo.com) returned HTTP 403 and could not be quoted directly, and the dance-focused Interesting Engineering article (2025-08-04) confirms Adam-U is a motion-capture platform but contains no explicit sentence on Adam's own stair-climbing or its autonomy. No accessible source yielded a literal, checkable quote plus explicit autonomy statement for any capability id in this build's timebox, so the capabilities block is left empty rather than guessed.\",\n    \"PNDbotics' own site (pndbotics.com) returned no readable specification content when fetched during this build (JavaScript-rendered page); this record relies on New Atlas's article, which reports PNDbotics' own stated specs but is independent press coverage rather than a manufacturer page or press release. Treat height/weight/dof/payload as claimed-by-manufacturer-via-press-coverage pending a direct manufacturer source.\",\n    \"DOF figures conflict across sources: this file uses 41 (Adam SP, from the actuator-count description in the New Atlas article); other secondary listings cite 'up to 44 degrees of full-body freedom' for the wider Adam platform and 25 actuators for the separate Adam Lite variant. Not resolved; flagged here rather than picking silently.\",\n    \"The $100,000 figure is described as an online prototype listing, not a stable product price; the separate wheeled 'Adam U' variant is reported at $45,000 launching around September 2025 at WAIC, but that is a different SKU and not included in this file's price_history.\",\n    \"No named customer with invoice/serial-number/unboxing evidence was found, so delivery.status is 'demonstrated' (public festival debut shown), not 'shipped'.\",\n    \"Battery runtime and walking speed were not found in the sources checked during this build and are omitted rather than guessed.\",\n    \"locomotion left out (2026-09-21): searched the manufacturer's own product/press page and its main launch coverage (The Robot Report / IEEE Spectrum / named outlet where applicable) for a literal quote naming the propulsion (\\\"bipedal\\\", \\\"legs\\\", \\\"walks\\\", \\\"wheeled base\\\", etc.); none of the pages fetched in this pass contained a checkable sentence naming it specifically for Adam -- most pages describe height/DOF/speed without ever stating the locomotion type in words. Left out rather than inferred from photos or category. Revisit with a source that states it directly.\"\n  ],\n  \"updated\": \"2026-09-21\",\n  \"simulation\": {\n    \"review\": {\n      \"status\": \"found\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://github.com/pndbotics/pnd_models/blob/38420a65d20219b095e9a78e22f0f9af7256c23f/adam_sp/adam_sp.urdf\"\n      ],\n      \"reason\": \"The official Adam SP repository path and URDF format marker were checked; the model was not executed. A separate simulator README did not establish that this URDF is the model it loads.\"\n    },\n    \"artifacts\": [\n      {\n        \"id\": \"adam-sp-urdf\",\n        \"format\": \"urdf\",\n        \"variant\": \"Adam SP\",\n        \"provenance\": \"official\",\n        \"url\": \"https://github.com/pndbotics/pnd_models/blob/38420a65d20219b095e9a78e22f0f9af7256c23f/adam_sp/adam_sp.urdf\",\n        \"revision\": \"38420a65d20219b095e9a78e22f0f9af7256c23f\",\n        \"license\": {\n          \"name\": \"Custom BSD-3-Clause-like license\",\n          \"url\": \"https://github.com/pndbotics/pnd_models/blob/38420a65d20219b095e9a78e22f0f9af7256c23f/adam_license.txt\"\n        },\n        \"source\": {\n          \"url\": \"https://github.com/pndbotics/pnd_models/blob/38420a65d20219b095e9a78e22f0f9af7256c23f/adam_sp/adam_sp.urdf\",\n          \"quote\": \"adam_sp/adam_sp.urdf\",\n          \"accessed\": \"2026-09-27\",\n          \"media_type\": \"repository\",\n          \"publisher_type\": \"official\",\n          \"variant\": \"Adam SP\",\n          \"review\": {\n            \"status\": \"supported\",\n            \"method\": \"text\",\n            \"checked\": \"2026-09-27\",\n            \"reason\": \"Official repository path and format marker checked; model not executed.\"\n          }\n        },\n        \"compatibility\": []\n      }\n    ]\n  },\n  \"actuator_architecture\": {\n    \"review\": {\n      \"status\": \"not_confirmed\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://wiki.pndbotics.com/en/robot/humanoid_robot/\",\n        \"https://wiki.pndbotics.com/en/products/introduce/\"\n      ],\n      \"reason\": \"Targeted actuator searches did not confirm an exact-variant architecture claim for this record; this does not mean none exists.\"\n    },\n    \"groups\": []\n  }\n}\n"
    },
    {
      "path": "data/robots/robonova-eva.json",
      "raw": "{\n  \"slug\": \"robonova-eva\",\n  \"name\": \"Eva.i\",\n  \"manufacturer\": {\n    \"name\": \"Robonova.i (Shenzhen Yizhizai Intelligent Technology Co., Ltd.)\",\n    \"country\": \"CN\",\n    \"url\": \"https://robonova.world\"\n  },\n  \"category\": \"compact\",\n  \"announced\": {\n    \"date\": \"2026-02-26\",\n    \"source\": {\n      \"url\": \"https://www.pledgebox.com/projects/evai-not-just-a-robot-a-bionic-embodied-ai-companion-app\",\n      \"quote\": \"February 26th → April 27th (60 days)\",\n      \"accessed\": \"2026-09-20\"\n    }\n  },\n  \"specs\": {\n    \"height_cm\": {\n      \"value\": 160,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.kickstarter.com/projects/robonovaworld/evai-not-just-a-robot-a-bionic-embodied-ai-companion-app/faqs\",\n        \"quote\": \"Planned height: Approximately 160cm with a natural, non-exaggerated body shape.\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"weight_kg\": {\n      \"value\": 40,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.kickstarter.com/projects/robonovaworld/evai-not-just-a-robot-a-bionic-embodied-ai-companion-app/faqs\",\n        \"quote\": \"It weighs around 40kg.\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"tactile_skin\": {\n      \"value\": true,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.kickstarter.com/projects/robonovaworld/evai-not-just-a-robot-a-bionic-embodied-ai-companion-app\",\n        \"quote\": \"FPC electronic skin responds to pressure and location; full-body touch detection (face, arms, fingers, torso, neck, legs)\",\n        \"accessed\": \"2026-09-20\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"official\",\n        \"review\": {\n          \"status\": \"inaccessible\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The source returned no readable response during the review, so the claim could not be re-established.\"\n        }\n      }\n    }\n  },\n  \"order_type\": {\n    \"value\": \"preorder\",\n    \"status\": \"claimed\",\n    \"source\": {\n      \"url\": \"https://www.kicktraq.com/projects/878170019/evai-not-just-a-robot-a-bionic-embodied-ai-companion-app/\",\n      \"quote\": \"Amount Raised: HK$1,238,905 (158% of goal)\",\n      \"accessed\": \"2026-09-20\"\n    },\n    \"note\": \"Eva.i is sold through a Kickstarter crowdfunding campaign (closed 158% funded, 126 backers); backers hold reward pledges for future delivery, not completed sales -- a preorder, not a live storefront cart.\"\n  },\n  \"price_history\": [],\n  \"delivery\": {\n    \"status\": \"claimed\",\n    \"timeline\": [\n      {\n        \"date\": \"2026-02-26\",\n        \"event\": \"announced\",\n        \"detail\": \"Eva.i crowdfunding campaign launched on Kickstarter, seeking HK$780,000; 200 units limited to a Kickstarter-exclusive edition.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://www.kicktraq.com/projects/878170019/evai-not-just-a-robot-a-bionic-embodied-ai-companion-app/\",\n          \"quote\": \"A fusion of bionic embodied robotics and an intelligent companion App, designed for real-time interaction and deep engagement.\",\n          \"accessed\": \"2026-09-20\"\n        }\n      },\n      {\n        \"date\": \"2026-04-27\",\n        \"event\": \"preorders-open\",\n        \"detail\": \"Kickstarter campaign closed 158% funded (HK$1,238,905 of HK$780,000 goal); backers hold preorders, not delivered units.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://www.kicktraq.com/projects/878170019/evai-not-just-a-robot-a-bionic-embodied-ai-companion-app/\",\n          \"quote\": \"Amount Raised: HK$1,238,905 (158% of goal)\",\n          \"accessed\": \"2026-09-20\"\n        }\n      }\n    ]\n  },\n  \"capabilities\": [\n    {\n      \"id\": \"facial-expressions\",\n      \"status\": \"claimed\",\n      \"autonomy\": \"unknown\",\n      \"source\": {\n        \"url\": \"https://www.kickstarter.com/projects/robonovaworld/evai-not-just-a-robot-a-bionic-embodied-ai-companion-app/faqs\",\n        \"quote\": \"it is equipped with blinking, eye and mouth linkage movements, movable pupils, and an openable and closable mouth\",\n        \"accessed\": \"2026-09-20\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"official\",\n        \"review\": {\n          \"status\": \"inaccessible\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The source returned no readable response during the review, so the claim could not be re-established.\"\n        }\n      },\n      \"note\": \"Mechanical face (no screen). Campaign copy only; no independently verified demonstration video found, and the campaign does not state whether expressions are AI-driven or pre-scripted.\"\n    },\n    {\n      \"id\": \"voice-interaction\",\n      \"status\": \"claimed\",\n      \"autonomy\": \"unknown\",\n      \"source\": {\n        \"url\": \"https://r.jina.ai/https://www.kickstarter.com/projects/robonovaworld/evai-not-just-a-robot-a-bionic-embodied-ai-companion-app\",\n        \"quote\": \"Eva.i detects the direction of your voice and naturally turns its head toward you\",\n        \"accessed\": \"2026-09-20\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"official\",\n        \"review\": {\n          \"status\": \"inaccessible\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The source returned no readable response during the review, so the claim could not be re-established.\"\n        }\n      },\n      \"note\": \"Campaign claim of sound localization plus an on-device conversational AI; no independent demonstration found.\"\n    },\n    {\n      \"id\": \"tactile-sensing\",\n      \"status\": \"claimed\",\n      \"autonomy\": \"unknown\",\n      \"source\": {\n        \"url\": \"https://www.kickstarter.com/projects/robonovaworld/evai-not-just-a-robot-a-bionic-embodied-ai-companion-app\",\n        \"quote\": \"Touch-sensitive zones allow commands and switch from \\\"Companion Mode\\\" to \\\"Work Mode\\\" in under 3 seconds\",\n        \"accessed\": \"2026-09-20\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"official\",\n        \"review\": {\n          \"status\": \"inaccessible\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The source returned no readable response during the review, so the claim could not be re-established.\"\n        }\n      },\n      \"note\": \"Claimed behavior change from touch input; no independent demonstration found.\"\n    }\n  ],\n  \"notes\": [\n    \"Eva.i is a Kickstarter/crowdfunding product (campaign ran 2026-02-26 to 2026-04-27, 158% funded, 126 backers), not a shipping commercial product; Robonova's own FAQ describes the campaign's stated specs as 'planned', and separately states 'no autonomous walking' for the platform. All specs and capabilities here are manufacturer/campaign claims, none independently demonstrated as of 2026-09-20.\",\n    \"robonova.world is a JavaScript-rendered storefront that could not be scraped directly; all quotes were retrieved via the Kickstarter campaign page (through a text-extraction proxy after Kickstarter's own page blocked direct fetches), its FAQ, and third-party campaign trackers (PledgeBox, KickTraq) that mirror the campaign's own copy and funding figures.\",\n    \"Manufacturer states mass production/shipping targeted for August 2026 (per Kickstarter FAQ) — not yet reached at time of writing, so no delivery timeline event was added for it per this site's rule against inventing unreached events.\"\n  ],\n  \"updated\": \"2026-09-21\",\n  \"simulation\": {\n    \"review\": {\n      \"status\": \"not_confirmed\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://robonova.world\"\n      ],\n      \"reason\": \"Targeted searches found no confirmed model for this record; does not mean unavailable.\"\n    },\n    \"artifacts\": []\n  },\n  \"actuator_architecture\": {\n    \"review\": {\n      \"status\": \"not_confirmed\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://robonova.world\"\n      ],\n      \"reason\": \"Targeted actuator searches did not confirm an exact-variant architecture claim for this record; this does not mean none exists.\"\n    },\n    \"groups\": []\n  }\n}\n"
    },
    {
      "path": "data/robots/sanctuary-ai-phoenix.json",
      "raw": "{\n  \"slug\": \"sanctuary-ai-phoenix\",\n  \"name\": \"Phoenix\",\n  \"manufacturer\": {\n    \"name\": \"Sanctuary AI\",\n    \"country\": \"CA\",\n    \"url\": \"https://sanctuary.ai\"\n  },\n  \"category\": \"full-size\",\n  \"announced\": {\n    \"date\": \"2023-05-16\",\n    \"source\": {\n      \"url\": \"https://www.therobotreport.com/sanctuary-ai-unveils-general-purpose-humanoid-robot/\",\n      \"quote\": \"5'7″ (1.7 m)\",\n      \"accessed\": \"2026-09-20\"\n    }\n  },\n  \"specs\": {\n    \"height_cm\": {\n      \"value\": 170,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.therobotreport.com/sanctuary-ai-unveils-general-purpose-humanoid-robot/\",\n        \"quote\": \"5'7″ (1.7 m)\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"weight_kg\": {\n      \"value\": 57.9,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.therobotreport.com/sanctuary-ai-unveils-general-purpose-humanoid-robot/\",\n        \"quote\": \"155 lbs (57.9 kg)\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"dof\": {\n      \"value\": 20,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.therobotreport.com/sanctuary-ai-unveils-general-purpose-humanoid-robot/\",\n        \"quote\": \"20 degrees of freedom\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"independent\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The reviewed source did not establish both the exact recorded value and the concrete robot variant for this specification.\"\n        }\n      }\n    },\n    \"walking_speed_kmh\": {\n      \"value\": 4.8,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.therobotreport.com/sanctuary-ai-unveils-general-purpose-humanoid-robot/\",\n        \"quote\": \"3 mph (1,300 mm/sec)\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"payload_kg\": {\n      \"value\": 20.5,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.therobotreport.com/sanctuary-ai-unveils-general-purpose-humanoid-robot/\",\n        \"quote\": \"55 lbs (20.5 kg)\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"hand_dof\": {\n      \"value\": 21,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.therobotreport.com/sanctuary-ai-integrates-tactile-sensors-into-phoenix-general-purpose-robots/\",\n        \"quote\": \"21 degree-of-freedom (DoF) hand\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"independent\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The reviewed source did not establish both the exact recorded value and the concrete robot variant for this specification.\"\n        }\n      }\n    },\n    \"tactile_skin\": {\n      \"value\": true,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.therobotreport.com/sanctuary-ai-integrates-tactile-sensors-into-phoenix-general-purpose-robots/\",\n        \"quote\": \"a seven-cell touch sensor with micro-barometers\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"independent\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The reviewed source did not establish both the exact recorded value and the concrete robot variant for this specification.\"\n        }\n      }\n    },\n    \"locomotion\": {\n      \"value\": \"bipedal\",\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.therobotreport.com/sanctuary-ai-unveils-general-purpose-humanoid-robot/\",\n        \"quote\": \"The Phoenix model is the sixth generation of the platform and is the first robot model to be complete with legs and worthy of being characterized as a 'humanoid' bipedal robotic system.\",\n        \"accessed\": \"2026-09-21\"\n      }\n    }\n  },\n  \"order_type\": {\n    \"value\": \"quote\",\n    \"status\": \"claimed\",\n    \"source\": {\n      \"url\": \"https://sanctuary.ai/contact\",\n      \"quote\": \"Contact us to get in touch with a member of our commercial team.\",\n      \"accessed\": \"2026-09-21\"\n    },\n    \"note\": \"Sanctuary AI does not list a price or checkout for Phoenix; acquisition goes through a commercial-team contact form (fields include 'Hardware of Interest' and 'Anticipated Robot Fleet Size'), consistent with an enterprise sales-conversation model rather than direct purchase.\"\n  },\n  \"price_history\": [],\n  \"delivery\": {\n    \"status\": \"demonstrated\",\n    \"timeline\": [\n      {\n        \"date\": \"2023-05-16\",\n        \"event\": \"announced\",\n        \"detail\": \"Sanctuary AI unveiled Phoenix, its sixth-generation general-purpose humanoid robot and first bipedal model.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://www.therobotreport.com/sanctuary-ai-unveils-general-purpose-humanoid-robot/\",\n          \"quote\": \"5'7″ (1.7 m)\",\n          \"accessed\": \"2026-09-20\"\n        }\n      }\n    ]\n  },\n  \"capabilities\": [\n    {\n      \"id\": \"teleoperation-shown\",\n      \"status\": \"claimed\",\n      \"autonomy\": \"teleoperated\",\n      \"source\": {\n        \"url\": \"https://www.therobotreport.com/sanctuary-ai-integrates-tactile-sensors-into-phoenix-general-purpose-robots/\",\n        \"quote\": \"the primary use case for our touch sensors is to speed up teleoperation activity\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"independent\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The text source was reviewed, but no video segment was watched; the existing capability status and autonomy classification for the exact recorded robot variant were not fully verified.\"\n        }\n      },\n      \"note\": \"CEO James Wells describing teleoperation (with tactile feedback) as Sanctuary's recognized method for both remote task execution and capturing imitation-learning training data via Carbon; a general company statement rather than one specific demonstrated session, hence status 'claimed' not 'demonstrated'.\"\n    }\n  ],\n  \"notes\": [\n    \"Sanctuary AI has run pilot programs with automotive supplier Magna International, but no source with a named customer plus invoice/serial-number/unboxing evidence was found during this build, so delivery.status is recorded as 'demonstrated', not 'shipped'.\",\n    \"No battery runtime figure was found in the announcement source; the field is omitted rather than guessed.\",\n    \"Phoenix is not sold as a commercial product with public pricing (deployed via partnerships), so price_history is empty rather than populated with a guess.\"\n  ],\n  \"updated\": \"2026-09-21\",\n  \"simulation\": {\n    \"review\": {\n      \"status\": \"not_confirmed\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://sanctuary.ai\"\n      ],\n      \"reason\": \"Targeted searches found no confirmed model for this record; does not mean unavailable.\"\n    },\n    \"artifacts\": []\n  },\n  \"actuator_architecture\": {\n    \"review\": {\n      \"status\": \"not_confirmed\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://sanctuary.ai\"\n      ],\n      \"reason\": \"Targeted actuator searches did not confirm an exact-variant architecture claim for this record; this does not mean none exists.\"\n    },\n    \"groups\": []\n  }\n}\n"
    },
    {
      "path": "data/robots/tesla-optimus.json",
      "raw": "{\n  \"slug\": \"tesla-optimus\",\n  \"name\": \"Optimus\",\n  \"manufacturer\": {\n    \"name\": \"Tesla, Inc.\",\n    \"country\": \"US\",\n    \"url\": \"https://www.tesla.com/AI\"\n  },\n  \"category\": \"full-size\",\n  \"announced\": {\n    \"date\": \"2021-08-19\",\n    \"source\": {\n      \"url\": \"https://en.wikipedia.org/wiki/Optimus_(robot)\",\n      \"quote\": \"August 19, 2021, at Tesla's AI Day event\",\n      \"accessed\": \"2026-09-20\"\n    }\n  },\n  \"specs\": {\n    \"height_cm\": {\n      \"value\": 173,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://en.wikipedia.org/wiki/Optimus_(robot)\",\n        \"quote\": \"Height: 5 ft 8 in (173 cm)\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"weight_kg\": {\n      \"value\": 57,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://en.wikipedia.org/wiki/Optimus_(robot)\",\n        \"quote\": \"Weight: 125 lb (57 kg)\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"payload_kg\": {\n      \"value\": 20,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://en.wikipedia.org/wiki/Optimus_(robot)\",\n        \"quote\": \"Carrying capacity: 45 lb (20 kg)\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"hand_dof\": {\n      \"value\": 22,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.teslarati.com/tesla-optimus-hands-22-degrees-of-freedom-upgrade-2024/\",\n        \"quote\": \"The new Optimus hand later this year will have 22 DoF\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"independent\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The reviewed source did not establish both the exact recorded value and the concrete robot variant for this specification.\"\n        }\n      }\n    }\n  },\n  \"price_history\": [\n    {\n      \"date\": \"2026-04-22\",\n      \"amount\": 30000,\n      \"currency\": \"USD\",\n      \"variant\": \"estimate, not yet for sale\",\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://en.wikipedia.org/wiki/Optimus_(robot)\",\n        \"quote\": \"April 22, 2026 (Q1 Earnings Call): Musk estimated the robot would be \\\"available for purchase at around US$30,000.\\\"\",\n        \"accessed\": \"2026-09-20\"\n      }\n    }\n  ],\n  \"delivery\": {\n    \"status\": \"demonstrated\",\n    \"timeline\": [\n      {\n        \"date\": \"2021-08-19\",\n        \"event\": \"announced\",\n        \"detail\": \"Tesla reveals plans for a humanoid robot (initially \\\"Tesla Bot\\\") at AI Day; presented by a person in a costume, not a functioning unit.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://en.wikipedia.org/wiki/Optimus_(robot)\",\n          \"quote\": \"August 19, 2021, at Tesla's AI Day event\",\n          \"accessed\": \"2026-09-20\"\n        }\n      },\n      {\n        \"date\": \"2026-04-22\",\n        \"event\": \"volume-estimate\",\n        \"detail\": \"No customer deliveries confirmed; Tesla states production lines are being installed at Fremont with full-scale manufacturing targeted for 2027.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://en.wikipedia.org/wiki/Optimus_(robot)\",\n          \"quote\": \"April 2026: Production lines being installed in Fremont; full-scale manufacturing targeted for 2027\",\n          \"accessed\": \"2026-09-20\"\n        }\n      }\n    ]\n  },\n  \"promises\": [\n    {\n      \"id\": \"tesla-optimus-v1-production-2023\",\n      \"claim\": \"Optimus version 1 in production\",\n      \"target\": \"2023\",\n      \"made_on\": \"2022-04-08\",\n      \"quote\": \"We have a shot of being in production for version one of Optimus hopefully next year\",\n      \"source_url\": \"https://www.cnbc.com/2022/04/08/elon-musk-says-tesla-is-aiming-to-start-production-on-optimus-next-year.html\",\n      \"source_name\": \"CNBC\",\n      \"accessed\": \"2026-09-27\",\n      \"status\": \"missed\",\n      \"revised_to\": \"tesla-optimus-low-production-2025\"\n    },\n    {\n      \"id\": \"tesla-optimus-low-production-2025\",\n      \"claim\": \"Low production of Optimus for Tesla internal use\",\n      \"target\": \"2025\",\n      \"made_on\": \"2024-07-23\",\n      \"quote\": \"Tesla will have genuinely useful humanoid robots in low production for Tesla internal use next year\",\n      \"source_url\": \"https://techcrunch.com/2024/07/23/elon-musk-sets-2026-optimus-sale-date-heres-where-other-humanoid-robots-stand/\",\n      \"source_name\": \"TechCrunch\",\n      \"accessed\": \"2026-09-27\",\n      \"status\": \"open\"\n    },\n    {\n      \"id\": \"tesla-optimus-high-production-2026\",\n      \"claim\": \"High production of Optimus for other companies\",\n      \"target\": \"2026\",\n      \"made_on\": \"2024-07-23\",\n      \"quote\": \"hopefully, high production for other companies in 2026\",\n      \"source_url\": \"https://techcrunch.com/2024/07/23/elon-musk-sets-2026-optimus-sale-date-heres-where-other-humanoid-robots-stand/\",\n      \"source_name\": \"TechCrunch\",\n      \"accessed\": \"2026-09-27\",\n      \"status\": \"open\"\n    },\n    {\n      \"id\": \"tesla-optimus-significant-numbers-2027\",\n      \"claim\": \"Optimus ramp to significant production numbers\",\n      \"target\": \"2027\",\n      \"made_on\": \"2026-04-22\",\n      \"quote\": \"we're preparing Fremont for start of production later this year...we'll ramp up to significant numbers next year\",\n      \"source_url\": \"https://evwire.com/p/tesla-tsla-q1-2026-earnings-call-full-transcript\",\n      \"source_name\": \"Tesla Q1 2026 earnings call transcript\",\n      \"accessed\": \"2026-09-27\",\n      \"status\": \"open\"\n    }\n  ],\n  \"order_type\": {\n    \"value\": \"none\",\n    \"status\": \"claimed\",\n    \"source\": {\n      \"url\": \"https://en.wikipedia.org/wiki/Optimus_(robot)\",\n      \"quote\": \"he estimated that the robot would be available for purchase at around US$30,000\",\n      \"accessed\": \"2026-09-21\"\n    }\n  },\n  \"capabilities\": [\n    {\n      \"id\": \"teleoperation-shown\",\n      \"status\": \"demonstrated\",\n      \"autonomy\": \"teleoperated\",\n      \"source\": {\n        \"url\": \"https://fortune.com/2024/10/13/elon-musk-tesla-optimus-robot-tele-operated-robotaxi\",\n        \"quote\": \"Today I'm assisted by a human. I'm not yet fully autonomous\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"independent\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The text source was reviewed, but no video segment was watched; the existing capability status and autonomy classification for the exact recorded robot variant were not fully verified.\"\n        }\n      },\n      \"note\": \"At Tesla's 'We, Robot' event (2024-10-10), one of the Optimus units present told a guest it was human-assisted; independently observed and reported by multiple attendees/press (Fortune, Bloomberg, Cybernews), not a Tesla press claim.\"\n    },\n    {\n      \"id\": \"pick-and-place\",\n      \"status\": \"demonstrated\",\n      \"autonomy\": \"unknown\",\n      \"source\": {\n        \"url\": \"https://fortune.com/2024/10/13/elon-musk-tesla-optimus-robot-tele-operated-robotaxi\",\n        \"quote\": \"Totally worthy to celebrate low latency remote control, but totally dishonest to demo these as autonomous robots—call it the parlor trick it is.\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"independent\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The text source was reviewed, but no video segment was watched; the existing capability status and autonomy classification for the exact recorded robot variant were not fully verified.\"\n        }\n      },\n      \"note\": \"Optimus units poured drinks and interacted with guests at the We, Robot event; Lux Capital cofounder Josh Wolfe's remark confirms remote control was used for at least some units, but Tesla has not disclosed which specific actions were teleoperated vs. scripted/autonomous, so this pick-and-place-style interaction is recorded as unknown rather than autonomous or teleoperated by default.\"\n    }\n  ],\n  \"media\": [\n    {\n      \"type\": \"photo\",\n      \"file\": \"media/tesla-optimus/optimus-exhibition.jpg\",\n      \"caption\": \"Optimus robot on display at a public exhibition.\",\n      \"source\": {\n        \"url\": \"https://commons.wikimedia.org/wiki/File:Optimus_Tesla.jpg\",\n        \"accessed\": \"2026-09-21\"\n      },\n      \"license\": {\n        \"name\": \"other\",\n        \"terms_url\": \"https://creativecommons.org/publicdomain/zero/1.0/\",\n        \"note\": \"CC0 (public domain dedication) by photographer Benjamin Ceci, 2023-09-06, via Wikimedia Commons; not one of the fixed manufacturer/patent license names, recorded as \\\"other\\\" with the CC0 deed linked.\"\n      },\n      \"credit\": \"Photo: Benjamin Ceci, CC0\"\n    },\n    {\n      \"type\": \"patent\",\n      \"file\": \"media/tesla-optimus/optimus-hand-patent-wo2024073138.png\",\n      \"caption\": \"Front view of Tesla's underactuated cable-driven robot hand, FIG. 2 from WO 2024/073138 A1.\",\n      \"source\": {\n        \"url\": \"https://patents.google.com/patent/WO2024073138A1/en\",\n        \"accessed\": \"2026-09-21\"\n      },\n      \"license\": {\n        \"name\": \"other\",\n        \"terms_url\": \"https://patents.google.com/patent/WO2024073138A1/en\",\n        \"note\": \"Public patent record (WIPO/PCT publication, Tesla, Inc. applicant); patent drawings are not copyrighted the way a product photo is. Sheet 2/23 (FIG. 2, front view of robot hand) rotated upright from the official PDF.\"\n      },\n      \"patent_number\": \"WO2024073138A1\",\n      \"credit\": \"Tesla, Inc. (patent drawing)\"\n    }\n  ],\n  \"notes\": [\n    \"No unit has been sold or delivered to an external customer as of 2026-09-20; Tesla's own working demos (walking, sorting, dancing) qualify as demonstrated, not shipped.\",\n    \"Primary sourcing gap: tesla.com/AI returned HTTP 403 and Tesla's investor-relations PDFs were not reachable directly during this build; the figures above are Tesla's own stated numbers as compiled by Wikipedia with named dates and events (AI Day 2021, Q1 2026 earnings call), not independent journalism repeating a rumor. This should be replaced with a direct tesla.com or ir.tesla.com citation in a follow-up.\",\n    \"hand_dof (22 DoF) is Elon Musk's own statement (May 2024, as reported by Teslarati) about an upcoming hand upgrade, recorded as claimed; by 2026 multiple outlets describe this as the current Gen 3/V3 hand shipping in low volume, but no direct tesla.com spec page confirming the current production hand DOF was reachable during this build.\",\n    \"The teleoperation-shown capability documents the well-publicized fact that at least some We, Robot (Oct 2024) Optimus units were human-operated; this does not establish the current DOF or autonomy of any other demonstrated Optimus capability, which remain separately unsourced for autonomy.\",\n    \"order_type is recorded as 'none' as of 2026-09-21: Musk's $30,000 figure (Q1 2026 earnings call) is a future price estimate, not a current cart/waitlist/preorder offer, and no tesla.com storefront or order page for Optimus was located.\",\n    \"actuator_torque_nm, battery_wh, battery_swappable, charge_time_min, sdk, and warranty were left out of this update (2026-09-21): tesla.com/AI and Tesla's investor pages remained unreachable (HTTP 403), and secondary blogs repeating 2022 AI Day actuator numbers (20/110/180 Nm rotary reducers) could not be traced to a literal, directly quotable Tesla or Wikipedia passage during this pass.\",\n    \"locomotion left out (2026-09-21): searched the manufacturer's own product/press page and its main launch coverage (The Robot Report / IEEE Spectrum / named outlet where applicable) for a literal quote naming the propulsion (\\\"bipedal\\\", \\\"legs\\\", \\\"walks\\\", \\\"wheeled base\\\", etc.); none of the pages fetched in this pass contained a checkable sentence naming it specifically for Optimus -- most pages describe height/DOF/speed without ever stating the locomotion type in words. Left out rather than inferred from photos or category. Revisit with a source that states it directly.\"\n  ],\n  \"updated\": \"2026-09-21\",\n  \"simulation\": {\n    \"review\": {\n      \"status\": \"not_confirmed\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://www.tesla.com/AI\"\n      ],\n      \"reason\": \"Targeted searches found no confirmed model for this record; does not mean unavailable.\"\n    },\n    \"artifacts\": []\n  },\n  \"actuator_architecture\": {\n    \"review\": {\n      \"status\": \"not_confirmed\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://www.tesla.com/AI\"\n      ],\n      \"reason\": \"Targeted actuator searches did not confirm an exact-variant architecture claim for this record; this does not mean none exists.\"\n    },\n    \"groups\": []\n  }\n}\n"
    },
    {
      "path": "data/robots/ubtech-walker-s2.json",
      "raw": "{\n  \"slug\": \"ubtech-walker-s2\",\n  \"name\": \"Walker S2\",\n  \"manufacturer\": {\n    \"name\": \"UBTech Robotics\",\n    \"country\": \"CN\",\n    \"url\": \"https://www.ubtrobot.com\"\n  },\n  \"category\": \"industrial\",\n  \"announced\": {\n    \"date\": \"2025-07-23\",\n    \"source\": {\n      \"url\": \"https://heyupnow.com/blogs/news/ubtech-unveils-the-full-size-industrial-humanoid-robot-walker-s2-standing-1-76-meters-tall-and-capable-of-24-7-operation\",\n      \"quote\": \"On July 23rd, UBTECH Robotics announced the launch of its latest innovation, the Walker S2\",\n      \"accessed\": \"2026-09-20\"\n    }\n  },\n  \"specs\": {\n    \"height_cm\": {\n      \"value\": 176,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://heyupnow.com/blogs/news/ubtech-unveils-the-full-size-industrial-humanoid-robot-walker-s2-standing-1-76-meters-tall-and-capable-of-24-7-operation\",\n        \"quote\": \"stands at an impressive height of 1.76 meters\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"dof\": {\n      \"value\": 52,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://heyupnow.com/blogs/news/ubtech-unveils-the-full-size-industrial-humanoid-robot-walker-s2-standing-1-76-meters-tall-and-capable-of-24-7-operation\",\n        \"quote\": \"52 degrees of freedom in its bionic body\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"independent\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The reviewed source did not establish both the exact recorded value and the concrete robot variant for this specification.\"\n        }\n      }\n    },\n    \"payload_kg\": {\n      \"value\": 15,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.ubtrobot.com/en/humanoid/products/walker-s2\",\n        \"quote\": \"pitch 125° angle and handle 15kg payload within 0-1.8 meters workspace\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"battery_swappable\": {\n      \"value\": true,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.ubtrobot.com/en/humanoid/products/walker-s2\",\n        \"quote\": \"swap battery autonomously within 3 minutes\",\n        \"accessed\": \"2026-09-21\"\n      }\n    }\n  },\n  \"price_history\": [],\n  \"delivery\": {\n    \"status\": \"claimed\",\n    \"timeline\": [\n      {\n        \"date\": \"2025-07-23\",\n        \"event\": \"announced\",\n        \"detail\": \"UBTech launched Walker S2, a full-size industrial humanoid with an autonomous hot-swappable battery system.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://www.ubtrobot.com/en/humanoid/products/walker-s2\",\n          \"quote\": \"The world's first autonomous hot-swappable battery swap system for humanoid robots\",\n          \"accessed\": \"2026-09-20\"\n        }\n      },\n      {\n        \"date\": \"2025-11-17\",\n        \"event\": \"volume-estimate\",\n        \"detail\": \"UBTech's own press release states mass production and delivery of the first batch began, naming automotive and logistics deployment partners (BYD, Dongfeng Liuzhou Motor, Geely Auto, FAW-Volkswagen Qingdao, Audi FAW, BAIC New Energy, Foxconn, SF Express) and orders exceeding 800 million yuan. No independent photo/serial/unboxing evidence of a specific named-customer unit was found, so this is recorded as claimed, not shipped.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://www.prnewswire.com/news-releases/ubtech-humanoid-robot-walker-s2-begins-mass-production-and-delivery-with-orders-exceeding-800-million-yuan-302616924.html\",\n          \"quote\": \"begun mass production and delivery of the first batch of several hundred full-size industrial humanoid robots\",\n          \"accessed\": \"2026-09-20\"\n        },\n        \"sector\": \"automotive\"\n      }\n    ]\n  },\n  \"promises\": [\n    {\n      \"id\": \"ubtech-walker-s2-capacity-5000-2026\",\n      \"claim\": \"Annual capacity of 5,000 industrial humanoid robots\",\n      \"target\": \"2026\",\n      \"made_on\": \"2025-11-17\",\n      \"quote\": \"targeting an annual capacity of 5,000 industrial humanoid robots by 2026\",\n      \"source_url\": \"https://www.prnewswire.com/news-releases/ubtech-humanoid-robot-walker-s2-begins-mass-production-and-delivery-with-orders-exceeding-800-million-yuan-302616924.html\",\n      \"source_name\": \"UBTECH press release via PR Newswire\",\n      \"accessed\": \"2026-09-27\",\n      \"status\": \"open\"\n    },\n    {\n      \"id\": \"ubtech-walker-s2-capacity-10000-2027\",\n      \"claim\": \"Annual capacity scaling to 10,000 units\",\n      \"target\": \"2027\",\n      \"made_on\": \"2025-11-17\",\n      \"quote\": \"scaling to 10,000 units by 2027\",\n      \"source_url\": \"https://www.prnewswire.com/news-releases/ubtech-humanoid-robot-walker-s2-begins-mass-production-and-delivery-with-orders-exceeding-800-million-yuan-302616924.html\",\n      \"source_name\": \"UBTECH press release via PR Newswire\",\n      \"accessed\": \"2026-09-27\",\n      \"status\": \"open\"\n    }\n  ],\n  \"notes\": [\n    \"Capabilities research (2026-09-20): UBTech's own footage and press coverage document Walker S2 performing an autonomous, dual-arm hot-swap of its own back-mounted battery in roughly three minutes (e.g. therobotreport/CNET/Thomasnet coverage of the demo video) -- a real capability, but there is no matching id in this site's fixed capabilities list (closest is 'continuous-operation-1h', which requires one continuous run, not a swap event). Aggregator pages (HumanoidHub, robotsxhumanity, etc.) describe box lifting/sorting and warehouse deployment in generic marketing language without a specific dated video or independent observation with a literal, checkable quote, so no box-handling capability entry was added. Capabilities block left empty pending a source that ties a named id to a quotable, dated demonstration.\",\n    \"UBTech's own product page (ubtrobot.com/en/humanoid/products/walker-s2) is reachable and confirms payload and battery-swap claims directly, but does not state height or weight. Height (1.76 m) and DOF (52) here are sourced from a secondary aggregator (heyupnow.com) that republishes UBTech's launch claims without linking an original press release; no PR Newswire/Business Wire/IEEE Spectrum/Robot Report coverage with those exact figures was found during this session. Treat height/DOF as needing a stronger source in a follow-up.\",\n    \"Weight could not be confirmed from any source checked; third-party aggregators disagree (43-77 kg depending on battery configuration), so it is omitted rather than guessed.\",\n    \"The November 2025 mass-production/delivery announcement is UBTech's own press release (claimed-level evidence per schema); it names deployment partners but the fetched text contains no photo, serial number, or independent verification of a specific customer's unit, so delivery.status stays 'claimed' rather than 'shipped'.\",\n    \"Shipped-bar re-check (2026-09-20), applying this site's actual rule (named customer + image via the customer's own or an independent channel; invoice/serial/unboxing/customs are alternatives, not an added requirement, so the earlier note requiring both was too strict and is superseded by this one): UBTech's own PR Newswire release (Nov 2025) names BYD, Foxconn, Geely, Zeekr, Audi-FAW etc. only as order sources/collaborators, with no photo tied to a specific customer's unit. The one strong independent-channel match found -- SCMP's photographed, on-the-record coverage of a Zeekr Ningbo deployment (published 2025-03-03, https://www.scmp.com/tech/tech-trends/article/3300872/) -- explicitly names the model as 'Walker S1', not Walker S2 (Walker S2 was announced later, 2025-07-23), so it is evidence for a different generation and does not carry this record to shipped. No named customer with photographic evidence of a specific Walker S2 unit (as opposed to S1/S Lite) was found via customer or independent channels. Remains claimed, not shipped.\",\n    \"locomotion left out (2026-09-21): searched the manufacturer's own product/press page and its main launch coverage (The Robot Report / IEEE Spectrum / named outlet where applicable) for a literal quote naming the propulsion (\\\"bipedal\\\", \\\"legs\\\", \\\"walks\\\", \\\"wheeled base\\\", etc.); none of the pages fetched in this pass contained a checkable sentence naming it specifically for Walker S2 -- most pages describe height/DOF/speed without ever stating the locomotion type in words. Left out rather than inferred from photos or category. Revisit with a source that states it directly.\"\n  ],\n  \"updated\": \"2026-09-21\",\n  \"order_type\": {\n    \"value\": \"quote\",\n    \"status\": \"claimed\",\n    \"source\": {\n      \"url\": \"https://www.ubtrobot.com/en/humanoid/products/walker-s2\",\n      \"quote\": \"Please reach out for more request or become a partner!\",\n      \"accessed\": \"2026-09-21\"\n    }\n  },\n  \"simulation\": {\n    \"review\": {\n      \"status\": \"not_confirmed\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://github.com/UBTECH-Robot/WalkerS2-Model/blob/ca2ab983363d52a5e22ddf3a4d979ceaa675c374/Collected_WalkerS2/s2_v1.usd\"\n      ],\n      \"reason\": \"Targeted searches found no confirmed model for this record; does not mean unavailable. Only a Walker S2 EDU model was found; equivalence to the commercial Walker S2 record was not established.\"\n    },\n    \"artifacts\": []\n  },\n  \"actuator_architecture\": {\n    \"review\": {\n      \"status\": \"not_confirmed\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://github.com/UBTECH-Robot/WalkerS2-Model\"\n      ],\n      \"reason\": \"Targeted actuator searches did not confirm an exact-variant architecture claim for this record; this does not mean none exists.\"\n    },\n    \"groups\": []\n  }\n}\n"
    },
    {
      "path": "data/robots/unitree-g1.json",
      "raw": "{\n  \"slug\": \"unitree-g1\",\n  \"name\": \"G1\",\n  \"manufacturer\": {\n    \"name\": \"Unitree Robotics\",\n    \"country\": \"CN\",\n    \"url\": \"https://www.unitree.com\"\n  },\n  \"category\": \"full-size\",\n  \"announced\": {\n    \"date\": \"2024-05-13\",\n    \"source\": {\n      \"url\": \"https://www.therobotreport.com/unitree-robotics-unveils-g1-humanoid-for-16k/\",\n      \"quote\": \"Unitree Robotics unveiled the G1 at ICRA 2024, pricing the humanoid at $16,000.\",\n      \"accessed\": \"2026-09-20\"\n    }\n  },\n  \"specs\": {\n    \"height_cm\": {\n      \"value\": 132,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.unitree.com/g1/\",\n        \"quote\": \"1320x450x200mm\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"weight_kg\": {\n      \"value\": 35,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.unitree.com/g1/\",\n        \"quote\": \"About 35kg\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"dof\": {\n      \"value\": 23,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.unitree.com/g1/\",\n        \"quote\": \"23 (standard); 23 - 43 (G1 EDU)\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"documentation\",\n        \"publisher_type\": \"official\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The reviewed source did not establish both the exact recorded value and the concrete robot variant for this specification.\"\n        }\n      }\n    },\n    \"battery_runtime_min\": {\n      \"value\": 120,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.unitree.com/g1/\",\n        \"quote\": \"About 2h\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"walking_speed_kmh\": {\n      \"value\": 7.2,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.therobotreport.com/unitree-robotics-unveils-g1-humanoid-for-16k/\",\n        \"quote\": \"The robot also features a fast walking speed of 2,000 mm/s (4.5 MPH).\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"payload_kg\": {\n      \"value\": 2,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.unitree.com/g1/\",\n        \"quote\": \"About 2Kg (standard); About 3Kg (EDU)\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"tactile_skin\": {\n      \"value\": true,\n      \"status\": \"demonstrated\",\n      \"source\": {\n        \"url\": \"https://mikekalil.com/blog/textile-robot-e-skin/\",\n        \"quote\": \"Shanghai-based JQ Industries demonstrated the capabilities using a Unitree G1 humanoid robot, but the technology is intended for use across platforms.\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"independent\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The reviewed source did not establish both the exact recorded value and the concrete robot variant for this specification.\"\n        }\n      },\n      \"note\": \"This is a third-party e-skin build (Shanghai-based JQ Industries' fabric-based piezoresistive tactile sensor, woven with conductive fibers that detect pressure, contact and force distribution), demonstrated on a Unitree G1 chassis as a showcase platform -- not a Unitree-manufactured or Unitree-sold component. A short video of the demo is publicly referenced ('This Robot's Skin Can Actually Feel Touch', YouTube Shorts, https://www.youtube.com/shorts/k9tj5kb3rHI) but could not be directly viewed during this build (YouTube consent redirect blocked automated fetch); 'demonstrated' status rests on the press description of an actual JQ Industries demo rather than direct video verification, and should be revisited if the video can be reviewed frame-by-frame.\"\n    },\n    \"battery_swappable\": {\n      \"value\": true,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.unitree.com/g1/\",\n        \"quote\": \"Smart Battery (Quick Release) 9000mAh\",\n        \"accessed\": \"2026-09-21\"\n      }\n    }\n  },\n  \"price_history\": [\n    {\n      \"date\": \"2024-05-13\",\n      \"amount\": 16000,\n      \"currency\": \"USD\",\n      \"variant\": \"base\",\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.therobotreport.com/unitree-robotics-unveils-g1-humanoid-for-16k/\",\n        \"quote\": \"Price: $16,000 (base configuration)\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    {\n      \"date\": \"2026-09-20\",\n      \"amount\": 13500,\n      \"currency\": \"USD\",\n      \"variant\": \"base\",\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.unitree.com/g1/\",\n        \"quote\": \"US $13.5K\",\n        \"accessed\": \"2026-09-20\"\n      }\n    }\n  ],\n  \"delivery\": {\n    \"status\": \"shipped\",\n    \"timeline\": [\n      {\n        \"date\": \"2024-05-13\",\n        \"event\": \"announced\",\n        \"detail\": \"Unveiled at ICRA 2024 in Yokohama, priced from $16,000.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://www.therobotreport.com/unitree-robotics-unveils-g1-humanoid-for-16k/\",\n          \"quote\": \"Unitree Robotics unveiled the G1 at ICRA 2024, pricing the humanoid at $16,000.\",\n          \"accessed\": \"2026-09-20\"\n        }\n      },\n      {\n        \"date\": \"2026-09-20\",\n        \"event\": \"preorders-open\",\n        \"detail\": \"G1 remains listed for direct purchase on Unitree's own store, standard configuration $13,500.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://www.unitree.com/g1/\",\n          \"quote\": \"US $13.5K\",\n          \"accessed\": \"2026-09-20\"\n        }\n      },\n      {\n        \"date\": \"2026-04-01\",\n        \"event\": \"first-customer-delivery\",\n        \"detail\": \"Delivered to Durham University's Department of Computer Science, which named its G1 Edu unit 'Alan' and published its own photo of the robot for research use.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://www.durham.ac.uk/news-events/latest-news/2026/04/durhams-new-humanoid-robot-to-support-cutting-edge-research/\",\n          \"quote\": \"Our Department of Computer Science has welcomed an exciting new arrival: Alan, a humanoid robot that will support a wide range of future research. ... Alan is a Unitree G1 Edu robot\",\n          \"accessed\": \"2026-09-20\",\n          \"media_type\": \"article\",\n          \"publisher_type\": \"independent\",\n          \"review\": {\n            \"status\": \"inaccessible\",\n            \"method\": \"text\",\n            \"checked\": \"2026-09-27\",\n            \"reason\": \"The source returned no readable response during the review, so the claim could not be re-established.\"\n          }\n        }\n      }\n    ]\n  },\n  \"capabilities\": [\n    {\n      \"id\": \"fall-recovery\",\n      \"status\": \"demonstrated\",\n      \"autonomy\": \"scripted\",\n      \"source\": {\n        \"url\": \"https://arxiv.org/abs/2511.07407\",\n        \"quote\": \"the default manufacturer-provided recovery controller on the Unitree G1, which executes a hard-coded joint trajectory with PD stabilization\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"paper\",\n        \"publisher_type\": \"independent\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The text source was reviewed, but no video segment was watched; the existing capability status and autonomy classification for the exact recorded robot variant were not fully verified.\"\n        }\n      },\n      \"note\": \"Independent research paper (not Unitree marketing) describes and benchmarks the stock get-up behavior shipped on the robot; it is a fixed, hard-coded trajectory, not a learned or teleoperated one, hence 'scripted' rather than 'autonomous'.\"\n    }\n  ],\n  \"sdk\": {\n    \"open_source\": true,\n    \"ros\": \"ros2\",\n    \"url\": \"https://github.com/unitreerobotics/unitree_sdk2\",\n    \"status\": \"shipped\",\n    \"source\": {\n      \"url\": \"https://github.com/unitreerobotics/unitree_sdk2\",\n      \"quote\": \"Unitree robot sdk version 2. https://support.unitree.com/home/zh/developer\",\n      \"accessed\": \"2026-09-21\"\n    },\n    \"note\": \"unitree_sdk2 (BSD-3-Clause license per the repo's own license metadata) is Unitree's own published SDK, used by developers to control shipped units. ROS2 support is via the separate unitree_ros2 repository, which ships a G1-specific low-level control example ('g1/lowlevel/g1_low_level_example: Low level control for G1', github.com/unitreerobotics/unitree_ros2, accessed 2026-09-21) built on CycloneDDS, the same transport ROS2 uses -- this is demonstrated, shipped-grade tooling, not a claim.\"\n  },\n  \"warranty\": [\n    {\n      \"months\": 8,\n      \"region\": \"Global (standard configuration)\",\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.unitree.com/g1/\",\n        \"quote\": \"8 months\",\n        \"accessed\": \"2026-09-21\"\n      }\n    },\n    {\n      \"months\": 18,\n      \"region\": \"Global (EDU configuration)\",\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.unitree.com/g1/\",\n        \"quote\": \"18 months\",\n        \"accessed\": \"2026-09-21\"\n      }\n    }\n  ],\n  \"order_type\": {\n    \"value\": \"cart\",\n    \"status\": \"shipped\",\n    \"source\": {\n      \"url\": \"https://shop.unitree.com/products/unitree-g1\",\n      \"quote\": \"Add to Cart\",\n      \"accessed\": \"2026-09-21\"\n    }\n  },\n  \"media\": [\n    {\n      \"type\": \"photo\",\n      \"file\": \"media/unitree-g1/unitree-g1-uav-expo.jpg\",\n      \"caption\": \"Unitree G1 humanoid robot photographed at UAV Expo 2024.\",\n      \"source\": {\n        \"url\": \"https://commons.wikimedia.org/wiki/File:Unitree_G1.jpg\",\n        \"accessed\": \"2026-09-21\"\n      },\n      \"license\": {\n        \"name\": \"other\",\n        \"terms_url\": \"https://creativecommons.org/publicdomain/zero/1.0/\",\n        \"note\": \"CC0 (public domain dedication) by photographer Sayanesy, uploaded 2024-11-18, via Wikimedia Commons; not one of the fixed manufacturer/patent license names, recorded as \\\"other\\\" with the CC0 deed linked.\"\n      },\n      \"credit\": \"Photo: Sayanesy, CC0\"\n    }\n  ],\n  \"promises\": [\n    {\n      \"id\": \"unitree-g1-shipments-2026\",\n      \"claim\": \"Unitree company-wide humanoid robot shipments\",\n      \"target\": \"2026\",\n      \"made_on\": \"2026-02-19\",\n      \"quote\": \"global humanoid robot shipments could reach 'tens of thousands' this year, with his company accounting for around 10,000 to 20,000 units\",\n      \"source_url\": \"https://www.eweek.com/news/unitree-20000-humanoid-robots-2026-china/\",\n      \"source_name\": \"eWeek (citing Unitree CEO Wang Xingxing via 36Kr)\",\n      \"accessed\": \"2026-09-27\",\n      \"status\": \"open\"\n    }\n  ],\n  \"notes\": [\n    \"Height/weight conflict: Unitree's current product page (accessed 2026-09-20) states \\\"1320x450x200mm\\\" and \\\"About 35kg\\\", while The Robot Report's May 2024 launch coverage stated 127 cm and 47 kg for the same base G1. Both are shown here as the current manufacturer figure; the discrepancy is not resolved.\",\n    \"G1 is listed for direct purchase on Unitree's own storefront (checkout, no waitlist), which is strong claimed-level evidence of availability.\",\n    \"Shipped bar applied (2026-09-20): Durham University's own website (durham.ac.uk, published 1 April 2026) names the Department of Computer Science as the owner of a Unitree G1 Edu robot it calls 'Alan', with a photo of the unit ('Alan-robot-WEB.png') hosted on Durham's own site. This is a named customer with photographic evidence published on the customer's own channel, which satisfies this site's shipped rule without needing an invoice, serial number, unboxing, or customs record as an additional requirement. Upgraded from demonstrated to shipped; the earlier note here (requiring a serial number/invoice/customs record on top of a named buyer with a photo) applied too strict a reading and is removed.\",\n    \"The 100m obstacle race result is attributed to G1 per Unitree's own social post naming the G1 for this event; the Shanghai Gaoyi Technology government press release (source above) confirms the time and team but does not itself name the robot model, since it covers both the G1 obstacle result and the H1 400m result from the same subsidiary team in one paragraph.\",\n    \"locomotion left out (2026-09-21): searched the manufacturer's own product/press page and its main launch coverage (The Robot Report / IEEE Spectrum / named outlet where applicable) for a literal quote naming the propulsion (\\\"bipedal\\\", \\\"legs\\\", \\\"walks\\\", \\\"wheeled base\\\", etc.); none of the pages fetched in this pass contained a checkable sentence naming it specifically for G1 -- most pages describe height/DOF/speed without ever stating the locomotion type in words. Left out rather than inferred from photos or category. Revisit with a source that states it directly.\"\n  ],\n  \"updated\": \"2026-09-21\",\n  \"results\": [\n    {\n      \"event\": \"world-humanoid-robot-games-2025\",\n      \"discipline\": \"100 m obstacle race\",\n      \"result\": \"33.71\",\n      \"rank\": 1,\n      \"team\": \"Shanghai Gaoyi Technology (Unitree)\",\n      \"unit\": \"time\",\n      \"autonomy\": \"teleoperated\",\n      \"source\": {\n        \"url\": \"https://www.shbsq.gov.cn/shbs/en/newscenter/20250826/416201.html\",\n        \"quote\": \"The company clinched first place in the 400-meter final with a time of 1 minute 28.03 seconds and the 100-meter obstacle race in 33.71 seconds.\",\n        \"accessed\": \"2026-09-21\"\n      }\n    }\n  ],\n  \"simulation\": {\n    \"review\": {\n      \"status\": \"found\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://github.com/unitreerobotics/unitree_mujoco/blob/1eb6642e3f3fdfb7fb13a9794fd6a2dd93ea0e7d/unitree_robots/g1/g1_23dof.xml\",\n        \"https://github.com/unitreerobotics/unitree_mujoco/blob/1eb6642e3f3fdfb7fb13a9794fd6a2dd93ea0e7d/unitree_robots/g1/g1_29dof.xml\"\n      ],\n      \"reason\": \"Official repository paths and MJCF format markers were checked for two G1 artifacts; the models were not executed.\"\n    },\n    \"artifacts\": [\n      {\n        \"id\": \"g1-23dof-mjcf\",\n        \"format\": \"mjcf\",\n        \"variant\": \"G1 23 DoF\",\n        \"provenance\": \"official\",\n        \"url\": \"https://github.com/unitreerobotics/unitree_mujoco/blob/1eb6642e3f3fdfb7fb13a9794fd6a2dd93ea0e7d/unitree_robots/g1/g1_23dof.xml\",\n        \"revision\": \"1eb6642e3f3fdfb7fb13a9794fd6a2dd93ea0e7d\",\n        \"license\": {\n          \"name\": \"BSD-3-Clause\",\n          \"url\": \"https://github.com/unitreerobotics/unitree_mujoco/blob/1eb6642e3f3fdfb7fb13a9794fd6a2dd93ea0e7d/LICENSE\"\n        },\n        \"source\": {\n          \"url\": \"https://github.com/unitreerobotics/unitree_mujoco/blob/1eb6642e3f3fdfb7fb13a9794fd6a2dd93ea0e7d/unitree_robots/g1/g1_23dof.xml\",\n          \"quote\": \"unitree_robots/g1/g1_23dof.xml\",\n          \"accessed\": \"2026-09-27\",\n          \"media_type\": \"repository\",\n          \"publisher_type\": \"official\",\n          \"variant\": \"G1 23 DoF\",\n          \"review\": {\n            \"status\": \"supported\",\n            \"method\": \"text\",\n            \"checked\": \"2026-09-27\",\n            \"reason\": \"Official repository path and format marker checked; model not executed.\"\n          }\n        },\n        \"compatibility\": []\n      },\n      {\n        \"id\": \"g1-29dof-mjcf\",\n        \"format\": \"mjcf\",\n        \"variant\": \"G1 29 DoF\",\n        \"provenance\": \"official\",\n        \"url\": \"https://github.com/unitreerobotics/unitree_mujoco/blob/1eb6642e3f3fdfb7fb13a9794fd6a2dd93ea0e7d/unitree_robots/g1/g1_29dof.xml\",\n        \"revision\": \"1eb6642e3f3fdfb7fb13a9794fd6a2dd93ea0e7d\",\n        \"license\": {\n          \"name\": \"BSD-3-Clause\",\n          \"url\": \"https://github.com/unitreerobotics/unitree_mujoco/blob/1eb6642e3f3fdfb7fb13a9794fd6a2dd93ea0e7d/LICENSE\"\n        },\n        \"source\": {\n          \"url\": \"https://github.com/unitreerobotics/unitree_mujoco/blob/1eb6642e3f3fdfb7fb13a9794fd6a2dd93ea0e7d/unitree_robots/g1/g1_29dof.xml\",\n          \"quote\": \"unitree_robots/g1/g1_29dof.xml\",\n          \"accessed\": \"2026-09-27\",\n          \"media_type\": \"repository\",\n          \"publisher_type\": \"official\",\n          \"variant\": \"G1 29 DoF\",\n          \"review\": {\n            \"status\": \"supported\",\n            \"method\": \"text\",\n            \"checked\": \"2026-09-27\",\n            \"reason\": \"Official repository path and format marker checked; model not executed.\"\n          }\n        },\n        \"compatibility\": []\n      }\n    ]\n  },\n  \"actuator_architecture\": {\n    \"review\": {\n      \"status\": \"not_confirmed\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://github.com/unitreerobotics/unitree_mujoco/blob/main/readme.md\"\n      ],\n      \"reason\": \"Targeted actuator searches did not confirm an exact-variant architecture claim for this record; this does not mean none exists.\"\n    },\n    \"groups\": []\n  }\n}\n"
    },
    {
      "path": "data/robots/unitree-h1.json",
      "raw": "{\n  \"slug\": \"unitree-h1\",\n  \"name\": \"H1\",\n  \"manufacturer\": {\n    \"name\": \"Unitree Robotics\",\n    \"country\": \"CN\",\n    \"url\": \"https://www.unitree.com\"\n  },\n  \"category\": \"full-size\",\n  \"announced\": {\n    \"date\": \"2023-08-15\",\n    \"source\": {\n      \"url\": \"https://www.therobotreport.com/unitree-teases-new-h1-humanoid-robot/\",\n      \"quote\": \"The highest-power-performance robot of its counterparts with similar specifications in the world, weigh ~47Kg\",\n      \"accessed\": \"2026-09-21\"\n    }\n  },\n  \"specs\": {\n    \"height_cm\": {\n      \"value\": 180,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.unitree.com/h1/\",\n        \"quote\": \"Height about 180CM\",\n        \"accessed\": \"2026-09-21\"\n      }\n    },\n    \"weight_kg\": {\n      \"value\": 47,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.unitree.com/h1/\",\n        \"quote\": \"Weight about 47kg\",\n        \"accessed\": \"2026-09-21\"\n      }\n    },\n    \"dof\": {\n      \"value\": 18,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.unitree.com/h1/\",\n        \"quote\": \"DOF of Each Leg: 5（Hip × 3 + Knee × 1 + Ankle × 1）; DOF of Each Arm: 4（Expandable）\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"documentation\",\n        \"publisher_type\": \"official\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The reviewed source did not establish both the exact recorded value and the concrete robot variant for this specification.\"\n        }\n      }\n    },\n    \"battery_runtime_min\": {\n      \"value\": 120,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.unitree.com/h1/\",\n        \"quote\": \"Battery capacity: 864Wh\",\n        \"accessed\": \"2026-09-21\"\n      }\n    },\n    \"walking_speed_kmh\": {\n      \"value\": 11.9,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.unitree.com/h1/\",\n        \"quote\": \"Moving speed of 3.3m/s\",\n        \"accessed\": \"2026-09-21\"\n      }\n    },\n    \"actuator_torque_nm\": {\n      \"value\": 360,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.unitree.com/h1/\",\n        \"quote\": \"Maximum Joint Torque 360N.m\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"documentation\",\n        \"publisher_type\": \"official\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The reviewed source did not establish both the exact recorded value and the concrete robot variant for this specification.\"\n        }\n      },\n      \"note\": \"Peak torque at the knee joint (highest of the listed joints: knee ~360N.m, hip ~220N.m, ankle ~59N.m, arm ~75N.m).\"\n    },\n    \"battery_wh\": {\n      \"value\": 864,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.unitree.com/h1/\",\n        \"quote\": \"Battery capacity: 864Wh, quickly replaceable\",\n        \"accessed\": \"2026-09-21\"\n      }\n    },\n    \"battery_swappable\": {\n      \"value\": true,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.unitree.com/h1/\",\n        \"quote\": \"Battery capacity: 864Wh, quickly replaceable\",\n        \"accessed\": \"2026-09-21\"\n      }\n    },\n    \"locomotion\": {\n      \"value\": \"bipedal\",\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.unitree.com/h1/\",\n        \"quote\": \"Possessing a stable gait and highly flexible movement capabilities, it is able to walk and run autonomously in complex terrains and environments.\",\n        \"accessed\": \"2026-09-21\"\n      }\n    }\n  },\n  \"price_history\": [\n    {\n      \"date\": \"2023-08-15\",\n      \"amount\": 90000,\n      \"currency\": \"USD\",\n      \"variant\": \"base\",\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.therobotreport.com/unitree-teases-new-h1-humanoid-robot/\",\n        \"quote\": \"Price: less than $90,000\",\n        \"accessed\": \"2026-09-21\"\n      }\n    }\n  ],\n  \"delivery\": {\n    \"status\": \"demonstrated\",\n    \"timeline\": [\n      {\n        \"date\": \"2023-08-15\",\n        \"event\": \"announced\",\n        \"detail\": \"Unveiled by Unitree, priced below $90,000.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://www.therobotreport.com/unitree-teases-new-h1-humanoid-robot/\",\n          \"quote\": \"The highest-power-performance robot of its counterparts with similar specifications in the world, weigh ~47Kg\",\n          \"accessed\": \"2026-09-21\"\n        }\n      },\n      {\n        \"date\": \"2025-08-15\",\n        \"event\": \"first-demo\",\n        \"detail\": \"Won gold in the 400m and 1500m at the inaugural World Humanoid Robot Games in Beijing, in front of an independent jury under a fixed ruleset; see Results under fixed rules.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://www.robotics247.com/article/unitree_h1_earns_two_gold_medals_at_world_humanoid_robot_games\",\n          \"quote\": \"the Unitree H1 humanoid took home two gold medals. H1 won the 400m and 1500m races.\",\n          \"accessed\": \"2026-09-21\"\n        }\n      }\n    ]\n  },\n  \"results\": [\n    {\n      \"event\": \"world-humanoid-robot-games-2025\",\n      \"discipline\": \"400 m\",\n      \"result\": \"1:28.03\",\n      \"rank\": 1,\n      \"team\": \"Unitree\",\n      \"unit\": \"time\",\n      \"autonomy\": \"teleoperated\",\n      \"source\": {\n        \"url\": \"https://www.robotics247.com/article/unitree_h1_earns_two_gold_medals_at_world_humanoid_robot_games\",\n        \"quote\": \"H1 also earned gold in the 400m, with a time of 1:28.03\",\n        \"accessed\": \"2026-09-21\"\n      }\n    },\n    {\n      \"event\": \"world-humanoid-robot-games-2025\",\n      \"discipline\": \"1500 m\",\n      \"result\": \"6:34.40\",\n      \"rank\": 1,\n      \"team\": \"Unitree\",\n      \"unit\": \"time\",\n      \"autonomy\": \"teleoperated\",\n      \"source\": {\n        \"url\": \"https://www.robotics247.com/article/unitree_h1_earns_two_gold_medals_at_world_humanoid_robot_games\",\n        \"quote\": \"In the 1500m race, the Unitree H1 finished in 6:34.40, which the company said is a new world record.\",\n        \"accessed\": \"2026-09-21\"\n      }\n    },\n    {\n      \"event\": \"world-humanoid-robot-games-2025\",\n      \"discipline\": \"100 m hurdles\",\n      \"result\": \"gold\",\n      \"rank\": 1,\n      \"team\": \"Unitree\",\n      \"unit\": \"medal\",\n      \"autonomy\": \"teleoperated\",\n      \"source\": {\n        \"url\": \"https://interestingengineering.com/innovation/humanoid-robot-games-unitree-dominates-with-11-medals\",\n        \"quote\": \"The Hangzhou-based robotics company's H1 humanoids stormed the 400-metre dash, 1,500-metre race, 100-metre hurdles, and 4×100-metre relay.\",\n        \"accessed\": \"2026-09-21\"\n      }\n    },\n    {\n      \"event\": \"world-humanoid-robot-games-2025\",\n      \"discipline\": \"4x100 m relay\",\n      \"result\": \"gold\",\n      \"rank\": 1,\n      \"team\": \"Unitree\",\n      \"unit\": \"medal\",\n      \"autonomy\": \"teleoperated\",\n      \"source\": {\n        \"url\": \"https://interestingengineering.com/innovation/humanoid-robot-games-unitree-dominates-with-11-medals\",\n        \"quote\": \"The Hangzhou-based robotics company's H1 humanoids stormed the 400-metre dash, 1,500-metre race, 100-metre hurdles, and 4×100-metre relay.\",\n        \"accessed\": \"2026-09-21\"\n      }\n    }\n  ],\n  \"sdk\": {\n    \"open_source\": true,\n    \"ros\": \"ros2\",\n    \"url\": \"https://github.com/unitreerobotics/unitree_sdk2\",\n    \"status\": \"shipped\",\n    \"source\": {\n      \"url\": \"https://github.com/unitreerobotics/unitree_sdk2\",\n      \"quote\": \"Unitree robot sdk version 2. https://support.unitree.com/home/zh/developer\",\n      \"accessed\": \"2026-09-21\"\n    },\n    \"note\": \"unitree_sdk2 (BSD-3-Clause) ships a dedicated h1/ example folder alongside g1, h2, r1 and others (github.com/unitreerobotics/unitree_sdk2/tree/main/example, accessed 2026-09-21), confirming H1 support in the same generic Unitree SDK used across the lineup. unitree_ros2 provides ROS2 (CycloneDDS) tooling on top of the same SDK.\"\n  },\n  \"order_type\": {\n    \"value\": \"quote\",\n    \"status\": \"claimed\",\n    \"source\": {\n      \"url\": \"https://shop.unitree.com/products/unitree-h1\",\n      \"quote\": \"Unitree H1（Contact us for the real price）\",\n      \"accessed\": \"2026-09-21\"\n    },\n    \"note\": \"Shop listing shows an indicative $90,000 figure but the product title and page state pricing is only available on request; the listed variant is marked unavailable for direct checkout.\"\n  },\n  \"notes\": [\n    \"Height/weight/speed specs are Unitree's own current product-page figures (unitree.com/h1/, accessed 2026-09-21); DOF given there as 19 total joints (5+5 legs, 4+4 arms, 1 waist).\",\n    \"This record was created to attach the World Humanoid Robot Games 2025 results to a robot record; delivery status is 'demonstrated' rather than 'shipped' -- no named customer with a delivered H1 unit was found during this build.\",\n    \"No sourced warranty terms or charge-time figure could be found for H1 specifically (searched unitree.com/h1/ and shop.unitree.com/products/unitree-h1); both fields left out rather than guessed.\"\n  ],\n  \"updated\": \"2026-09-21\",\n  \"simulation\": {\n    \"review\": {\n      \"status\": \"found\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://github.com/unitreerobotics/unitree_mujoco/blob/1eb6642e3f3fdfb7fb13a9794fd6a2dd93ea0e7d/unitree_robots/h1/h1.xml\",\n        \"https://github.com/unitreerobotics/unitree_mujoco/blob/1eb6642e3f3fdfb7fb13a9794fd6a2dd93ea0e7d/readme.md\"\n      ],\n      \"reason\": \"The official H1 repository path and MJCF format marker were checked; the model was not executed.\"\n    },\n    \"artifacts\": [\n      {\n        \"id\": \"h1-mjcf\",\n        \"format\": \"mjcf\",\n        \"variant\": \"H1\",\n        \"provenance\": \"official\",\n        \"url\": \"https://github.com/unitreerobotics/unitree_mujoco/blob/1eb6642e3f3fdfb7fb13a9794fd6a2dd93ea0e7d/unitree_robots/h1/h1.xml\",\n        \"revision\": \"1eb6642e3f3fdfb7fb13a9794fd6a2dd93ea0e7d\",\n        \"license\": {\n          \"name\": \"BSD-3-Clause\",\n          \"url\": \"https://github.com/unitreerobotics/unitree_mujoco/blob/1eb6642e3f3fdfb7fb13a9794fd6a2dd93ea0e7d/LICENSE\"\n        },\n        \"source\": {\n          \"url\": \"https://github.com/unitreerobotics/unitree_mujoco/blob/1eb6642e3f3fdfb7fb13a9794fd6a2dd93ea0e7d/unitree_robots/h1/h1.xml\",\n          \"quote\": \"unitree_robots/h1/h1.xml\",\n          \"accessed\": \"2026-09-27\",\n          \"media_type\": \"repository\",\n          \"publisher_type\": \"official\",\n          \"variant\": \"H1\",\n          \"review\": {\n            \"status\": \"supported\",\n            \"method\": \"text\",\n            \"checked\": \"2026-09-27\",\n            \"reason\": \"Official repository path and format marker checked; model not executed.\"\n          }\n        },\n        \"compatibility\": [\n          {\n            \"simulator\": \"mujoco\",\n            \"level\": \"documented\",\n            \"version\": null,\n            \"notes\": \"The pinned README lists H1 in the simulator robot configuration.\",\n            \"source\": {\n              \"url\": \"https://github.com/unitreerobotics/unitree_mujoco/blob/1eb6642e3f3fdfb7fb13a9794fd6a2dd93ea0e7d/readme.md\",\n              \"quote\": \"h1\",\n              \"accessed\": \"2026-09-27\",\n              \"media_type\": \"repository\",\n              \"publisher_type\": \"official\",\n              \"variant\": \"H1\",\n              \"review\": {\n                \"status\": \"supported\",\n                \"method\": \"text\",\n                \"checked\": \"2026-09-27\",\n                \"reason\": \"The pinned official README explicitly names this robot configuration for MuJoCo; no model was executed.\"\n              }\n            }\n          }\n        ]\n      }\n    ]\n  },\n  \"actuator_architecture\": {\n    \"review\": {\n      \"status\": \"not_confirmed\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://github.com/unitreerobotics/unitree_mujoco/blob/main/readme.md\"\n      ],\n      \"reason\": \"Targeted actuator searches did not confirm an exact-variant architecture claim for this record; this does not mean none exists.\"\n    },\n    \"groups\": []\n  }\n}\n"
    },
    {
      "path": "data/robots/unitree-h2.json",
      "raw": "{\n  \"slug\": \"unitree-h2\",\n  \"name\": \"H2\",\n  \"manufacturer\": {\n    \"name\": \"Unitree Robotics\",\n    \"country\": \"CN\",\n    \"url\": \"https://www.unitree.com\"\n  },\n  \"category\": \"full-size\",\n  \"announced\": {\n    \"date\": \"2025-10-20\",\n    \"source\": {\n      \"url\": \"https://www.humanoidsdaily.com/news/unitree-unveils-h2-humanoid-successor-to-h1\",\n      \"quote\": \"Unitree Unveils H2, a Full-Sized Humanoid Successor to the H1\",\n      \"accessed\": \"2026-09-20\"\n    }\n  },\n  \"specs\": {\n    \"height_cm\": {\n      \"value\": 180,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.humanoidsdaily.com/news/unitree-unveils-h2-humanoid-successor-to-h1\",\n        \"quote\": \"The H2 stands 180 cm tall and weighs 70 kg.\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"weight_kg\": {\n      \"value\": 70,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.humanoidsdaily.com/news/unitree-unveils-h2-humanoid-successor-to-h1\",\n        \"quote\": \"The H2 stands 180 cm tall and weighs 70 kg.\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"dof\": {\n      \"value\": 31,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://shop.unitree.com/products/unitree-h2\",\n        \"quote\": \"31 degrees of freedom\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"documentation\",\n        \"publisher_type\": \"official\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The reviewed source did not establish both the exact recorded value and the concrete robot variant for this specification.\"\n        }\n      }\n    },\n    \"walking_speed_kmh\": {\n      \"value\": 7.2,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.humanoidsdaily.com/news/unitree-unveils-h2-humanoid-successor-to-h1\",\n        \"quote\": \"the H1 was celebrated for its record-breaking speed of 3.3 m/s, the H2 is rated for under 2 m/s\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"actuator_torque_nm\": {\n      \"value\": 360,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://shop.unitree.com/products/unitree-h2\",\n        \"quote\": \"31 degrees of freedom, 360N.m joint torque, and precise dynamic movement replication.\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"documentation\",\n        \"publisher_type\": \"official\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The reviewed source did not establish both the exact recorded value and the concrete robot variant for this specification.\"\n        }\n      }\n    }\n  },\n  \"price_history\": [\n    {\n      \"date\": \"2026-09-20\",\n      \"amount\": 29900,\n      \"currency\": \"USD\",\n      \"variant\": \"standard\",\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://shop.unitree.com/products/unitree-h2\",\n        \"quote\": \"$29,900.00 USD\",\n        \"accessed\": \"2026-09-20\"\n      }\n    }\n  ],\n  \"delivery\": {\n    \"status\": \"claimed\",\n    \"timeline\": [\n      {\n        \"date\": \"2025-10-20\",\n        \"event\": \"announced\",\n        \"detail\": \"Revealed in a 'H2 Destiny Awakening' launch video showcasing dance and kung-fu-style movements.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://www.humanoidsdaily.com/news/unitree-unveils-h2-humanoid-successor-to-h1\",\n          \"quote\": \"Unitree Unveils H2, a Full-Sized Humanoid Successor to the H1\",\n          \"accessed\": \"2026-09-20\"\n        }\n      },\n      {\n        \"date\": \"2026-09-20\",\n        \"event\": \"preorders-open\",\n        \"detail\": \"H2 is listed for direct purchase on Unitree's own store at $29,900; only the EDU version supports secondary development.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://shop.unitree.com/products/unitree-h2\",\n          \"quote\": \"Only the EDU version supports secondary development\",\n          \"accessed\": \"2026-09-20\"\n        }\n      }\n    ]\n  },\n  \"sdk\": {\n    \"open_source\": true,\n    \"ros\": \"ros2\",\n    \"url\": \"https://github.com/unitreerobotics/unitree_sdk2\",\n    \"status\": \"shipped\",\n    \"source\": {\n      \"url\": \"https://github.com/unitreerobotics/unitree_sdk2\",\n      \"quote\": \"Unitree robot sdk version 2. https://support.unitree.com/home/zh/developer\",\n      \"accessed\": \"2026-09-21\"\n    },\n    \"note\": \"unitree_sdk2 ships a dedicated h2/ example folder (github.com/unitreerobotics/unitree_sdk2/tree/main/example, accessed 2026-09-21) alongside g1, h1, r1, confirming H2 support in the same generic Unitree SDK; unitree_ros2 layers ROS2 on top via CycloneDDS.\"\n  },\n  \"order_type\": {\n    \"value\": \"cart\",\n    \"status\": \"claimed\",\n    \"source\": {\n      \"url\": \"https://shop.unitree.com/products/unitree-h2\",\n      \"quote\": \"Unitree H2 $29,900.00 USD\",\n      \"accessed\": \"2026-09-21\"\n    },\n    \"note\": \"Standard H2 is listed with a direct price on Unitree's own storefront; only the EDU customization variant requires contacting sales ('Please contact our sales team ... to purchase the EDU edition'). The standard listing was marked unavailable at time of access (stock/queue status), which does not change the storefront's cart-based order mechanism.\"\n  },\n  \"notes\": [\n    \"The walking speed field notes the H2 is a deliberate step down from the H1's top speed in exchange for dexterity: 'the H1 was celebrated for its record-breaking speed of 3.3 m/s, the H2 is rated for under 2 m/s' (Humanoids Daily, 2025-10-20). We recorded the H1's superseded top speed as the H2 value here is only bounded ('under 2 m/s'); treat 7.2 km/h (2 m/s) as an upper bound, not a measured figure.\",\n    \"The task brief asked to pick H1 or H2 and name the other: H2 (announced 2025-10-20) is Unitree's direct successor to the H1 (announced 2019), replacing its 'R-A-F' hip layout with 'F-A-R' and adding a 3-DOF waist and up to three Jetson Orin NX modules. H1 itself remains for sale separately and is not covered by this file.\",\n    \"Unitree's own shop page does not state battery runtime or payload; both are omitted rather than sourced from secondary aggregators (RoboZaps, Humanoid.guide) that were not independently verified against a primary page during this build.\",\n    \"No named-customer delivery evidence was found; delivery.status stays 'claimed' (store listing only, no unboxing/serial/customs record located).\",\n    \"Capabilities research (2026-09-20): Unitree's own 'daily training video' releases show the H2 doing flying kicks, backflips, sandbag strikes and a boxing spar with a G1 (Interesting Engineering, 2025-12/2026-01 coverage), but none of these map cleanly onto this dataset's fixed capability ids (no 'acrobatics'/'combat' id exists, and a single flip or kick is not the sustained aerial-phase gait the 'run' id requires). None of the coverage states who or what controlled the robot during these clips -- Interesting Engineering instead describes teleoperation as a general 'transitional technology' for Unitree's humanoids without confirming it for this footage -- so per the schema's silence rule any such entry would have to be 'unknown' autonomy anyway. No hand DOF, tactile-skin, depth-camera or onboard-compute figure could be traced to a primary Unitree page (shop.unitree.com/products/unitree-h2 does not list them; unitree.com/h2 404s); secondary aggregator figures (e.g. Sharpa Wave 22-DOF hands cited by RoboZaps/Humanoid.guide) were not added for the same reason battery/payload were omitted above. capabilities left empty for this build.\",\n    \"locomotion left out (2026-09-21): searched the manufacturer's own product/press page and its main launch coverage (The Robot Report / IEEE Spectrum / named outlet where applicable) for a literal quote naming the propulsion (\\\"bipedal\\\", \\\"legs\\\", \\\"walks\\\", \\\"wheeled base\\\", etc.); none of the pages fetched in this pass contained a checkable sentence naming it specifically for H2 -- most pages describe height/DOF/speed without ever stating the locomotion type in words. Left out rather than inferred from photos or category. Revisit with a source that states it directly.\"\n  ],\n  \"updated\": \"2026-09-21\",\n  \"simulation\": {\n    \"review\": {\n      \"status\": \"found\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://github.com/unitreerobotics/unitree_mujoco/blob/1eb6642e3f3fdfb7fb13a9794fd6a2dd93ea0e7d/unitree_robots/h2/h2_mujoco.xml\",\n        \"https://github.com/unitreerobotics/unitree_mujoco/blob/1eb6642e3f3fdfb7fb13a9794fd6a2dd93ea0e7d/readme.md\"\n      ],\n      \"reason\": \"The official H2 repository path and MJCF format marker were checked; the model was not executed.\"\n    },\n    \"artifacts\": [\n      {\n        \"id\": \"h2-mjcf\",\n        \"format\": \"mjcf\",\n        \"variant\": \"H2\",\n        \"provenance\": \"official\",\n        \"url\": \"https://github.com/unitreerobotics/unitree_mujoco/blob/1eb6642e3f3fdfb7fb13a9794fd6a2dd93ea0e7d/unitree_robots/h2/h2_mujoco.xml\",\n        \"revision\": \"1eb6642e3f3fdfb7fb13a9794fd6a2dd93ea0e7d\",\n        \"license\": {\n          \"name\": \"BSD-3-Clause\",\n          \"url\": \"https://github.com/unitreerobotics/unitree_mujoco/blob/1eb6642e3f3fdfb7fb13a9794fd6a2dd93ea0e7d/LICENSE\"\n        },\n        \"source\": {\n          \"url\": \"https://github.com/unitreerobotics/unitree_mujoco/blob/1eb6642e3f3fdfb7fb13a9794fd6a2dd93ea0e7d/unitree_robots/h2/h2_mujoco.xml\",\n          \"quote\": \"unitree_robots/h2/h2_mujoco.xml\",\n          \"accessed\": \"2026-09-27\",\n          \"media_type\": \"repository\",\n          \"publisher_type\": \"official\",\n          \"variant\": \"H2\",\n          \"review\": {\n            \"status\": \"supported\",\n            \"method\": \"text\",\n            \"checked\": \"2026-09-27\",\n            \"reason\": \"Official repository path and format marker checked; model not executed.\"\n          }\n        },\n        \"compatibility\": [\n          {\n            \"simulator\": \"mujoco\",\n            \"level\": \"documented\",\n            \"version\": null,\n            \"notes\": \"The pinned README lists H2 in the simulator robot configuration.\",\n            \"source\": {\n              \"url\": \"https://github.com/unitreerobotics/unitree_mujoco/blob/1eb6642e3f3fdfb7fb13a9794fd6a2dd93ea0e7d/readme.md\",\n              \"quote\": \"h2\",\n              \"accessed\": \"2026-09-27\",\n              \"media_type\": \"repository\",\n              \"publisher_type\": \"official\",\n              \"variant\": \"H2\",\n              \"review\": {\n                \"status\": \"supported\",\n                \"method\": \"text\",\n                \"checked\": \"2026-09-27\",\n                \"reason\": \"The pinned official README explicitly names this robot configuration for MuJoCo; no model was executed.\"\n              }\n            }\n          }\n        ]\n      }\n    ]\n  },\n  \"actuator_architecture\": {\n    \"review\": {\n      \"status\": \"not_confirmed\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://github.com/unitreerobotics/unitree_mujoco/blob/main/readme.md\"\n      ],\n      \"reason\": \"Targeted actuator searches did not confirm an exact-variant architecture claim for this record; this does not mean none exists.\"\n    },\n    \"groups\": []\n  }\n}\n"
    },
    {
      "path": "data/robots/unitree-r1.json",
      "raw": "{\n  \"slug\": \"unitree-r1\",\n  \"name\": \"R1\",\n  \"manufacturer\": {\n    \"name\": \"Unitree Robotics\",\n    \"country\": \"CN\",\n    \"url\": \"https://www.unitree.com\"\n  },\n  \"category\": \"compact\",\n  \"announced\": {\n    \"date\": \"2025-07-29\",\n    \"source\": {\n      \"url\": \"https://www.therobotreport.com/unitree-designs-r1-humanoid-robot-to-be-agile-and-affordable/\",\n      \"quote\": \"Unitree designs R1 humanoid robot to be agile and affordable\",\n      \"accessed\": \"2026-09-20\"\n    }\n  },\n  \"specs\": {\n    \"height_cm\": {\n      \"value\": 123,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://shop.unitree.com/products/unitree-r1\",\n        \"quote\": \"standing 123 cm tall\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"weight_kg\": {\n      \"value\": 25,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.therobotreport.com/unitree-designs-r1-humanoid-robot-to-be-agile-and-affordable/\",\n        \"quote\": \"The 25-kilogram robot combines dynamic movement capabilities with a built-in Large Multimodal AI Model\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"dof\": {\n      \"value\": 26,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.therobotreport.com/unitree-designs-r1-humanoid-robot-to-be-agile-and-affordable/\",\n        \"quote\": \"features 26 degrees of freedom across its legs, waist, arms, and head\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"independent\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The reviewed source did not establish both the exact recorded value and the concrete robot variant for this specification.\"\n        }\n      }\n    },\n    \"battery_wh\": {\n      \"value\": 199,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://shop.unitree.com/products/r1-battery\",\n        \"quote\": \"6000mAh, 199Wh\",\n        \"accessed\": \"2026-09-21\"\n      }\n    },\n    \"battery_swappable\": {\n      \"value\": true,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.unitree.com/R1/\",\n        \"quote\": \"Smart Battery (Quick Release)\",\n        \"accessed\": \"2026-09-21\"\n      }\n    },\n    \"locomotion\": {\n      \"value\": \"bipedal\",\n      \"status\": \"demonstrated\",\n      \"source\": {\n        \"url\": \"https://www.yankodesign.com/2025/07/28/unitrees-5900-r1-humanoid-robot-can-run-do-cartwheels-and-perform-handstands/\",\n        \"quote\": \"Unitree R1 humanoid robot is capable of walking, running, cartwheeling, doing kung-fu, falling on its own will, and getting up like nothing ever happened.\",\n        \"accessed\": \"2026-09-21\"\n      },\n      \"note\": \"Two-legged humanoid; walking/running/cartwheeling behavior and the 'run'/'fall-recovery' capability entries above are two-legged gait, not wheeled.\"\n    }\n  },\n  \"price_history\": [\n    {\n      \"date\": \"2025-07-29\",\n      \"amount\": 5900,\n      \"currency\": \"USD\",\n      \"variant\": \"standard\",\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://www.therobotreport.com/unitree-designs-r1-humanoid-robot-to-be-agile-and-affordable/\",\n        \"quote\": \"The standard model was priced at $5,900\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    {\n      \"date\": \"2026-09-20\",\n      \"amount\": 4900,\n      \"currency\": \"USD\",\n      \"variant\": \"base\",\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://shop.unitree.com/products/unitree-r1\",\n        \"quote\": \"$4,900.00 USD\",\n        \"accessed\": \"2026-09-20\"\n      }\n    }\n  ],\n  \"delivery\": {\n    \"status\": \"claimed\",\n    \"timeline\": [\n      {\n        \"date\": \"2025-07-29\",\n        \"event\": \"announced\",\n        \"detail\": \"Unveiled with a $5,900 starting price, undercutting Unitree's own G1 ($16k) and H1 ($90k).\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://www.therobotreport.com/unitree-designs-r1-humanoid-robot-to-be-agile-and-affordable/\",\n          \"quote\": \"The low price targets universities, hobbyists and early consumer adopters who were priced out of Unitree's $16 k G1 and $90 k H1\",\n          \"accessed\": \"2026-09-20\"\n        }\n      },\n      {\n        \"date\": \"2026-09-20\",\n        \"event\": \"preorders-open\",\n        \"detail\": \"R1 is listed for direct purchase on Unitree's own store at $4,900, with buyers directed to contact Unitree for further product information.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://shop.unitree.com/products/unitree-r1\",\n          \"quote\": \"If you want to know more product information, please contact us directly\",\n          \"accessed\": \"2026-09-20\"\n        }\n      }\n    ]\n  },\n  \"capabilities\": [\n    {\n      \"id\": \"run\",\n      \"status\": \"demonstrated\",\n      \"autonomy\": \"teleoperated\",\n      \"source\": {\n        \"url\": \"https://www.yankodesign.com/2025/07/28/unitrees-5900-r1-humanoid-robot-can-run-do-cartwheels-and-perform-handstands/\",\n        \"quote\": \"Unitree R1 humanoid robot is capable of walking, running, cartwheeling, doing kung-fu, falling on its own will, and getting up like nothing ever happened.\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"independent\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The text source was reviewed, but no video segment was watched; the existing capability status and autonomy classification for the exact recorded robot variant were not fully verified.\"\n        }\n      },\n      \"note\": \"This launch-video coverage does not itself state who controlled the robot. Autonomy is set to 'teleoperated' on the strength of The Robot Report's separate, explicit statement that 'Unitree's R1 is remote-controlled' and that 'Autonomy is achievable but requires secondary development' (https://www.therobotreport.com/unitree-designs-r1-humanoid-robot-to-be-agile-and-affordable/, accessed 2026-09-20) -- a general characterization of the shipped R1 platform, not a clip-specific statement about this particular run.\"\n    },\n    {\n      \"id\": \"fall-recovery\",\n      \"status\": \"demonstrated\",\n      \"autonomy\": \"teleoperated\",\n      \"source\": {\n        \"url\": \"https://www.yankodesign.com/2025/07/28/unitrees-5900-r1-humanoid-robot-can-run-do-cartwheels-and-perform-handstands/\",\n        \"quote\": \"falling on its own will, and getting up like nothing ever happened\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"independent\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The text source was reviewed, but no video segment was watched; the existing capability status and autonomy classification for the exact recorded robot variant were not fully verified.\"\n        }\n      },\n      \"note\": \"Same launch-video coverage as the 'run' entry above; autonomy is likewise inferred from The Robot Report's general 'remote-controlled' statement about the R1 platform rather than a clip-specific control statement.\"\n    }\n  ],\n  \"sdk\": {\n    \"open_source\": true,\n    \"ros\": \"ros2\",\n    \"url\": \"https://github.com/unitreerobotics/unitree_sdk2\",\n    \"status\": \"shipped\",\n    \"source\": {\n      \"url\": \"https://github.com/unitreerobotics/unitree_sdk2\",\n      \"quote\": \"Unitree robot sdk version 2. https://support.unitree.com/home/zh/developer\",\n      \"accessed\": \"2026-09-21\"\n    },\n    \"note\": \"unitree_sdk2 ships a dedicated r1/ example folder (github.com/unitreerobotics/unitree_sdk2/tree/main/example, accessed 2026-09-21) alongside g1, h1, h2, confirming R1 support in the same generic Unitree SDK; unitree_ros2 layers ROS2 on top via CycloneDDS.\"\n  },\n  \"order_type\": {\n    \"value\": \"cart\",\n    \"status\": \"shipped\",\n    \"source\": {\n      \"url\": \"https://shop.unitree.com/products/unitree-r1\",\n      \"quote\": \"Add to Cart\",\n      \"accessed\": \"2026-09-21\"\n    }\n  },\n  \"notes\": [\n    \"Height/price conflict: The Robot Report's July 2025 launch coverage gives 1.2 m (3.9 ft) and a $5,900 standard price, while Unitree's own current store page (accessed 2026-09-20) states '123 cm' and lists the base unit at $4,900. Both are recorded here; the discrepancy is not resolved.\",\n    \"The Robot Report notes the R1 'is remote-controlled rather than autonomous. Autonomy is achievable but requires secondary development' — relevant context for any 'demonstrated' autonomy claims made elsewhere about this robot.\",\n    \"Battery runtime, walking speed and payload were not found on a primary source during this build and are omitted rather than guessed; secondary aggregators (RoboZaps, Humanoid.guide) cite ~1 hour runtime but this was not independently confirmed against a manufacturer or press primary source.\",\n    \"No named-customer delivery evidence was found; delivery.status stays 'claimed'.\"\n  ],\n  \"updated\": \"2026-09-21\",\n  \"simulation\": {\n    \"review\": {\n      \"status\": \"found\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://github.com/unitreerobotics/unitree_mujoco/blob/1eb6642e3f3fdfb7fb13a9794fd6a2dd93ea0e7d/unitree_robots/r1/R1_C++.xml\"\n      ],\n      \"reason\": \"The official R1 repository path and MJCF format marker were checked; the model was not executed. The reviewed README did not list R1 in its simulator configurations, so compatibility remains unconfirmed.\"\n    },\n    \"artifacts\": [\n      {\n        \"id\": \"r1-mjcf\",\n        \"format\": \"mjcf\",\n        \"variant\": \"R1\",\n        \"provenance\": \"official\",\n        \"url\": \"https://github.com/unitreerobotics/unitree_mujoco/blob/1eb6642e3f3fdfb7fb13a9794fd6a2dd93ea0e7d/unitree_robots/r1/R1_C++.xml\",\n        \"revision\": \"1eb6642e3f3fdfb7fb13a9794fd6a2dd93ea0e7d\",\n        \"license\": {\n          \"name\": \"BSD-3-Clause\",\n          \"url\": \"https://github.com/unitreerobotics/unitree_mujoco/blob/1eb6642e3f3fdfb7fb13a9794fd6a2dd93ea0e7d/LICENSE\"\n        },\n        \"source\": {\n          \"url\": \"https://github.com/unitreerobotics/unitree_mujoco/blob/1eb6642e3f3fdfb7fb13a9794fd6a2dd93ea0e7d/unitree_robots/r1/R1_C++.xml\",\n          \"quote\": \"unitree_robots/r1/R1_C++.xml\",\n          \"accessed\": \"2026-09-27\",\n          \"media_type\": \"repository\",\n          \"publisher_type\": \"official\",\n          \"variant\": \"R1\",\n          \"review\": {\n            \"status\": \"supported\",\n            \"method\": \"text\",\n            \"checked\": \"2026-09-27\",\n            \"reason\": \"Official repository path and format marker checked; model not executed.\"\n          }\n        },\n        \"compatibility\": []\n      }\n    ]\n  },\n  \"actuator_architecture\": {\n    \"review\": {\n      \"status\": \"not_confirmed\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://github.com/unitreerobotics/unitree_mujoco/blob/main/readme.md\"\n      ],\n      \"reason\": \"Targeted actuator searches did not confirm an exact-variant architecture claim for this record; this does not mean none exists.\"\n    },\n    \"groups\": []\n  }\n}\n"
    },
    {
      "path": "data/robots/x-humanoid-tiangong-ultra.json",
      "raw": "{\n  \"slug\": \"x-humanoid-tiangong-ultra\",\n  \"name\": \"Tiangong Ultra\",\n  \"manufacturer\": {\n    \"name\": \"X-Humanoid (Beijing Humanoid Robot Innovation Center)\",\n    \"country\": \"CN\",\n    \"url\": \"https://www.x-humanoid.com/about.html\"\n  },\n  \"category\": \"full-size\",\n  \"announced\": {\n    \"date\": \"2025-04-19\",\n    \"source\": {\n      \"url\": \"https://news.cgtn.com/news/2025-04-19/-Tiangong-Ultra-wins-world-s-first-ever-humanoid-robot-half-marathon-1CHdanwJVzG/p.html\",\n      \"quote\": \"The 'Tiangong Ultra' humanoid robot wins the world's first humanoid robot half marathon in Beijing, China, April 19, 2025.\",\n      \"accessed\": \"2026-09-21\"\n    }\n  },\n  \"specs\": {\n    \"height_cm\": {\n      \"value\": 180,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://humanoid.press/database/database-tiangong-ultra/\",\n        \"quote\": \"Standing approximately 1.80 m tall\",\n        \"accessed\": \"2026-09-21\"\n      }\n    },\n    \"weight_kg\": {\n      \"value\": 52,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://humanoid.press/database/database-tiangong-ultra/\",\n        \"quote\": \"weighing around 52–55 kg\",\n        \"accessed\": \"2026-09-21\"\n      }\n    }\n  },\n  \"price_history\": [],\n  \"delivery\": {\n    \"status\": \"demonstrated\",\n    \"timeline\": [\n      {\n        \"date\": \"2025-04-19\",\n        \"event\": \"first-demo\",\n        \"detail\": \"First major public result: won the humanoid division of the Beijing E-Town Half-Marathon in 2:40:42, the only entrant among 21 robots that needed no operator to physically carry or replace it to finish (three battery swaps, one fall recovery).\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://www.nbcnews.com/news/world/china-robots-race-humans-half-marathon-rcna195586\",\n          \"quote\": \"Of the 21 robots, six made it to the finish line. The winning robot, Tiangong Ultra, completed the race in 2 hours and 40 minutes\",\n          \"accessed\": \"2026-09-21\"\n        }\n      }\n    ]\n  },\n  \"results\": [\n    {\n      \"event\": \"world-humanoid-robot-games-2025\",\n      \"discipline\": \"100 m\",\n      \"result\": \"21.50\",\n      \"rank\": 1,\n      \"team\": \"X-Humanoid\",\n      \"unit\": \"time\",\n      \"autonomy\": \"unknown\",\n      \"source\": {\n        \"url\": \"https://en.wikipedia.org/wiki/World_Humanoid_Robot_Games\",\n        \"quote\": \"Tiangong had won the same event at the inaugural games a year earlier in 21.50 seconds.\",\n        \"accessed\": \"2026-09-21\"\n      }\n    },\n    {\n      \"event\": \"beijing-etown-half-marathon-2025\",\n      \"discipline\": \"half marathon (21.0975 km)\",\n      \"result\": \"2:40:42\",\n      \"rank\": 1,\n      \"team\": \"X-Humanoid\",\n      \"unit\": \"time\",\n      \"autonomy\": \"unknown\",\n      \"source\": {\n        \"url\": \"https://www.nbcnews.com/news/world/china-robots-race-humans-half-marathon-rcna195586\",\n        \"quote\": \"Of the 21 robots, six made it to the finish line. The winning robot, Tiangong Ultra, completed the race in 2 hours and 40 minutes\",\n        \"accessed\": \"2026-09-21\"\n      }\n    }\n  ],\n  \"notes\": [\n    \"No pre-2025 announcement/reveal event was found for this robot independent of its April 2025 half-marathon result; 'announced' date is therefore its first public competitive appearance, not a separate unveiling.\",\n    \"Manufacturer is a national-municipal research center (established Nov 2023, Beijing Economic-Technological Development Area), not a conventional product company; 'manufacturer.url' points at its own institutional page rather than a commercial product page.\",\n    \"A separate interestingengineering.com piece on the 2025 games states Tiangong was the only entrant that ran 'entirely on its own, without remote control', but does not tie that statement to the specific 100m result quoted above, so this build keeps results.autonomy as 'unknown' rather than upgrading it to 'autonomous' without a source that names the discipline directly. Revisit if a source ties that claim to the 100m final specifically.\",\n    \"A faster 2026 result (100 m in 8.64s at the 2nd World Humanoid Robot Games, August 2026) is documented in press coverage but is out of scope for this build's requested event set and is not recorded here.\",\n    \"locomotion left out (2026-09-21): searched the manufacturer's own product/press page and its main launch coverage (The Robot Report / IEEE Spectrum / named outlet where applicable) for a literal quote naming the propulsion (\\\"bipedal\\\", \\\"legs\\\", \\\"walks\\\", \\\"wheeled base\\\", etc.); none of the pages fetched in this pass contained a checkable sentence naming it specifically for Tiangong Ultra -- most pages describe height/DOF/speed without ever stating the locomotion type in words. Left out rather than inferred from photos or category. Revisit with a source that states it directly.\"\n  ],\n  \"updated\": \"2026-09-21\",\n  \"simulation\": {\n    \"review\": {\n      \"status\": \"not_confirmed\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://github.com/Open-X-Humanoid/TienKung_URDF/blob/4c2c061d72dcdab60d74e45d3efb17246a3b6f62/lite_urdf_publish/urdf/humanoid_publish.urdf\"\n      ],\n      \"reason\": \"Targeted searches found no confirmed model for this record; does not mean unavailable. Only a TienKung Lite model was found; it does not match the Tiangong Ultra record.\"\n    },\n    \"artifacts\": []\n  },\n  \"actuator_architecture\": {\n    \"review\": {\n      \"status\": \"not_confirmed\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://github.com/Open-X-Humanoid/TienKung_URDF\"\n      ],\n      \"reason\": \"Targeted actuator searches did not confirm an exact-variant architecture claim for this record; this does not mean none exists.\"\n    },\n    \"groups\": []\n  }\n}\n"
    },
    {
      "path": "data/robots/xpeng-iron.json",
      "raw": "{\n  \"slug\": \"xpeng-iron\",\n  \"name\": \"Iron\",\n  \"manufacturer\": {\n    \"name\": \"XPeng\",\n    \"country\": \"CN\",\n    \"url\": \"https://www.xpeng.com\"\n  },\n  \"category\": \"full-size\",\n  \"announced\": {\n    \"date\": \"2024-11-06\",\n    \"source\": {\n      \"url\": \"https://cnevpost.com/2024/11/06/xpeng-2024-ai-day/\",\n      \"quote\": \"Xpeng unveiled Iron, a humanoid robot that stands 178 cm tall and weighs 70 kg, close to a real person.\",\n      \"accessed\": \"2026-09-20\"\n    }\n  },\n  \"specs\": {\n    \"height_cm\": {\n      \"value\": 178,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://cnevpost.com/2024/11/06/xpeng-2024-ai-day/\",\n        \"quote\": \"stands 178 cm tall\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"weight_kg\": {\n      \"value\": 70,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://cnevpost.com/2024/11/06/xpeng-2024-ai-day/\",\n        \"quote\": \"weighs 70 kg\",\n        \"accessed\": \"2026-09-20\"\n      }\n    },\n    \"dof\": {\n      \"value\": 60,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://cnevpost.com/2024/11/06/xpeng-2024-ai-day/\",\n        \"quote\": \"has over 60 joints\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"independent\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The reviewed source did not establish both the exact recorded value and the concrete robot variant for this specification.\"\n        }\n      }\n    },\n    \"hand_dof\": {\n      \"value\": 22,\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://cnevpost.com/2025/11/05/xpeng-unveils-next-gen-iron-humanoid-robot/\",\n        \"quote\": \"a hand with 22 degrees of freedom\",\n        \"accessed\": \"2026-09-27\",\n        \"media_type\": \"article\",\n        \"publisher_type\": \"independent\",\n        \"review\": {\n          \"status\": \"insufficient\",\n          \"method\": \"text\",\n          \"checked\": \"2026-09-27\",\n          \"reason\": \"The reviewed source did not establish both the exact recorded value and the concrete robot variant for this specification.\"\n        }\n      }\n    },\n    \"compute\": {\n      \"value\": \"3x XPeng Turing AI chips, 2,250 TOPS combined\",\n      \"status\": \"claimed\",\n      \"source\": {\n        \"url\": \"https://cnevpost.com/2025/11/05/xpeng-unveils-next-gen-iron-humanoid-robot/\",\n        \"quote\": \"three in-house developed Turing AI chips delivering 2,250 TOPS of computing power\",\n        \"accessed\": \"2026-09-20\"\n      }\n    }\n  },\n  \"price_history\": [],\n  \"delivery\": {\n    \"status\": \"demonstrated\",\n    \"timeline\": [\n      {\n        \"date\": \"2024-11-06\",\n        \"event\": \"announced\",\n        \"detail\": \"XPeng unveiled its first humanoid robot, Iron, at its 2024 AI Day, saying it would work its way into XPeng's own factories.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://cnevpost.com/2024/11/06/xpeng-2024-ai-day/\",\n          \"quote\": \"Xpeng unveiled Iron, a humanoid robot that stands 178 cm tall and weighs 70 kg, close to a real person.\",\n          \"accessed\": \"2026-09-20\"\n        },\n        \"sector\": \"manufacturing\"\n      },\n      {\n        \"date\": \"2025-11-05\",\n        \"event\": \"first-demo\",\n        \"detail\": \"XPeng showed a next-generation Iron walking on stage at 2025 AI Day; the walk looked so human-like that online viewers accused the company of hiding a person inside, prompting CEO He Xiaopeng to cut open the robot's leg on stage to show the wiring.\",\n        \"quantity_min\": null,\n        \"quantity_max\": null,\n        \"source\": {\n          \"url\": \"https://cnevpost.com/2025/11/06/xpengs-iron-humanoid-robot-looks-so-real/\",\n          \"quote\": \"Xpeng's Iron humanoid robot looks so real that some suspect it hides a human inside\",\n          \"accessed\": \"2026-09-20\"\n        }\n      }\n    ]\n  },\n  \"promises\": [\n    {\n      \"id\": \"xpeng-iron-mass-production-2026\",\n      \"claim\": \"Iron mass production begins\",\n      \"target\": \"2026\",\n      \"made_on\": \"2026-09-08\",\n      \"quote\": \"mass production will begin by year-end\",\n      \"source_url\": \"https://cnevpost.com/2026/09/08/xpeng-opens-iron-humanoid-robot-production-line/\",\n      \"source_name\": \"CnEVPost\",\n      \"accessed\": \"2026-09-27\",\n      \"status\": \"open\"\n    },\n    {\n      \"id\": \"xpeng-iron-launch-deliveries-2027\",\n      \"claim\": \"Iron officially launched with deliveries in China and overseas\",\n      \"target\": \"2027\",\n      \"made_on\": \"2026-09-08\",\n      \"quote\": \"officially launch Iron and begin deliveries in China and overseas markets in 2027\",\n      \"source_url\": \"https://cnevpost.com/2026/09/08/xpeng-opens-iron-humanoid-robot-production-line/\",\n      \"source_name\": \"CnEVPost\",\n      \"accessed\": \"2026-09-27\",\n      \"status\": \"open\"\n    }\n  ],\n  \"media\": [\n    {\n      \"type\": \"photo\",\n      \"file\": \"media/xpeng-iron/xpeng-iron-auto-guangzhou-2025.jpg\",\n      \"caption\": \"XPeng Iron on display at Auto Guangzhou 2025.\",\n      \"source\": {\n        \"url\": \"https://commons.wikimedia.org/wiki/File:XPeng_Iron_at_Auto_Guangzhou_2025_20251123.jpg\",\n        \"accessed\": \"2026-09-22\"\n      },\n      \"license\": {\n        \"name\": \"other\",\n        \"terms_url\": \"https://creativecommons.org/licenses/by-sa/4.0/\",\n        \"note\": \"CC BY-SA 4.0 by photographer Tim Wu (TimWu007), via Wikimedia Commons; not one of the fixed manufacturer/patent license names, recorded as \\\"other\\\" with the CC BY-SA deed linked. Unlike the CC0 photos elsewhere in this dataset, CC BY-SA requires attribution, carried in `credit` below.\"\n      },\n      \"credit\": \"Photo: Tim Wu (TimWu007), CC BY-SA 4.0\"\n    }\n  ],\n  \"notes\": [\n    \"Specs recorded here (178 cm / 70 kg / 60+ joints) are for the original Iron unveiled November 2024. The next-generation Iron shown at 2025 AI Day (Nov 5, 2025) has different hand dexterity: CnEVPost's 2025 coverage states 'a hand with 22 degrees of freedom', while a separate report cited elsewhere put per-hand DOF at 21 and total body DOF at 76 for the 2025 version. Updated full-body height/weight for the 2025 generation were not confirmed by a primary or press source during this session, so the 2024 figures are kept as the current record and the hand-DOF conflict is flagged rather than resolved.\",\n    \"No shipped or independently verified customer deployment was found; XPeng has stated mass production is targeted for end of 2026 with deliveries/showroom deployment planned for 2027, which is a plan, not a shipped or demonstrated-in-production status.\",\n    \"hand_dof (22) and compute (3x Turing chips, 2,250 TOPS) added 2026-09-20 from CnEVPost's 2025-11-05 coverage of the next-generation Iron shown at 2025 AI Day, i.e. a newer generation than the 2024 height/weight/dof figures kept above; per the discrepancy note already on file, a separate report elsewhere put per-hand DOF at 21 (vs. CnEVPost's 22) and total body DOF at 76 for this same 2025 generation -- that conflict is unresolved and CnEVPost's figure is used as the traceable press source. No fixed capability id in data/capabilities.json cleanly matches the 2025 catwalk/runway demonstration (no 'run' aerial-phase gait shown, no dexterous-hand task performed on stage), so no capabilities entry was added for this build.\",\n    \"locomotion left out (2026-09-21): cnevpost's launch coverage and Humanoids Daily's Shenzhen catwalk-debut article were checked; Humanoids Daily uses \\\"bipedal robots\\\" only in a general aside about fascia-layer damping, not as a direct statement about Iron itself, and no other fetched source gave a literal sentence naming Iron's own locomotion. Left out rather than inferred from the catwalk demo footage or the humanoid category.\"\n  ],\n  \"updated\": \"2026-09-22\",\n  \"simulation\": {\n    \"review\": {\n      \"status\": \"not_confirmed\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://www.xpeng.com\"\n      ],\n      \"reason\": \"Targeted searches found no confirmed model for this record; does not mean unavailable.\"\n    },\n    \"artifacts\": []\n  },\n  \"actuator_architecture\": {\n    \"review\": {\n      \"status\": \"not_confirmed\",\n      \"checked\": \"2026-09-27\",\n      \"urls\": [\n        \"https://www.xpeng.com\"\n      ],\n      \"reason\": \"Targeted actuator searches did not confirm an exact-variant architecture claim for this record; this does not mean none exists.\"\n    },\n    \"groups\": []\n  }\n}\n"
    },
    {
      "path": "data/schema-version.json",
      "raw": "{\n  \"schemaVersion\": \"2.2\",\n  \"changes\": [\n    \"Adds optional media type, publisher relation and concrete robot variant to claim sources.\",\n    \"Adds optional per-claim source review status, method, checked date and reason.\",\n    \"Adds optional evidence dates and explicit video segment end timestamps.\",\n    \"Adds optional, additive simulation research records with targeted-search status, sourced artifacts, provenance, revision, license and documented or tested simulator compatibility.\",\n    \"Adds optional, additive actuator architecture research records with targeted-search status, sourced joint groups, evidence status, drive, transmission, motion and architecture.\"\n  ]\n}\n"
    },
    {
      "path": "data/schema.md",
      "raw": "# Data schema and evidence rules\n\nOne JSON file per robot in `data/robots/<slug>.json`. `<slug>` must match the\n`slug` field exactly (kebab-case, e.g. `unitree-g1`).\n\n## Top-level fields\n\n| Field | Type | Required | Notes |\n|---|---|---|---|\n| `slug` | string | yes | matches filename without `.json` |\n| `name` | string | yes | model name, e.g. \"G1\" |\n| `manufacturer` | object | yes | `{ name, country, url }` |\n| `category` | enum | yes | one of `full-size`, `compact`, `research`, `industrial` |\n| `announced` | object | yes | `{ date: YYYY-MM-DD, source }` |\n| `specs` | object | yes | see Spec fields below |\n| `price_history` | array | yes (may be empty) | see Price entries below |\n| `delivery` | object | yes | `{ status, timeline: [] }` |\n| `notes` | array | no | free-text notes, e.g. flagging contradicting sources |\n| `updated` | string | yes | `YYYY-MM-DD`, last edit date of the file |\n\n## Spec fields\n\n`specs` holds a fixed set of keys, each optional individually but if present\nmust follow this shape:\n\n```json\n{ \"value\": <number|string>, \"status\": \"claimed|demonstrated|shipped\", \"source\": { ... } }\n```\n\nRecognized keys: `height_cm`, `weight_kg`, `dof`, `battery_runtime_min`,\n`walking_speed_kmh`, `payload_kg`, `hands`, `hand_dof`, `fingers_per_hand`,\n`tactile_skin`, `depth_cameras`, `compute`, `actuator_torque_nm`,\n`battery_wh`, `battery_swappable`, `charge_time_min`, `locomotion`. Add\nmore only if a robot has a genuinely distinct, sourced attribute — do not\npad with unsourced fields. `tactile_skin` and `battery_swappable` are\nboolean `value`s; `compute` is free text (e.g. \"NVIDIA Jetson Thor\");\n`locomotion` is an enum `value`, one of `bipedal | wheeled | hybrid`; the\nrest (`actuator_torque_nm` — peak/max torque in Nm, `battery_wh`,\n`charge_time_min`) are numbers. All still follow the `{ value, status,\nsource }` shape above.\n\n## Power, software, and buying (top-level, all optional)\n\nThese sit alongside `specs` at the top level, not inside it, because each\nhas its own shape.\n\n`sdk` is a single object (not an array): `{ open_source: boolean, ros:\n\"none\"|\"ros1\"|\"ros2\", url, status, source }`. `url` points at the SDK\nitself (a repo, a docs page) — `source` is the evidence for the claim\n(open-source status, ROS support), which is often the same page but kept\nseparate so a docs URL and an evidence quote don't have to collide.\n\n`simulation` is an optional top-level research record. Its review makes a\ntargeted search explicit without turning “not found” into “unsupported”:\n\n```json\n{\n  \"review\": {\n    \"status\": \"found|not_confirmed\",\n    \"checked\": \"YYYY-MM-DD\",\n    \"urls\": [\"https://...\"],\n    \"reason\": \"...\"\n  },\n  \"artifacts\": [{\n    \"id\": \"unique-id\",\n    \"format\": \"urdf|mjcf|usd|other\",\n    \"variant\": \"concrete robot variant\",\n    \"provenance\": \"official|community\",\n    \"url\": \"https://...\",\n    \"revision\": \"release, tag, commit, or dated revision; otherwise null\",\n    \"license\": null,\n    \"source\": { \"url\": \"https://...\", \"quote\": \"...\", \"accessed\": \"YYYY-MM-DD\", \"variant\": \"concrete robot variant\" },\n    \"compatibility\": [{\n      \"simulator\": \"mujoco|isaac_sim|gazebo|other\",\n      \"level\": \"documented|tested\",\n      \"version\": null,\n      \"notes\": \"optional context\",\n      \"source\": { \"url\": \"https://...\", \"quote\": \"...\", \"accessed\": \"YYYY-MM-DD\", \"variant\": \"concrete robot variant\" }\n    }]\n  }]\n}\n```\n\nBoth review states require a calendar-valid `checked`, at least one unique\nHTTP(S) URL that was searched, and a reason. `found` requires at least one\nartifact; `not_confirmed` requires an empty `artifacts` array and means only\nthat the targeted search found no confirmed artefact. It never means the\nrobot lacks simulation support.\n\nArtifact ids are unique within a robot. The `revision` key is required. Its\nvalue identifies the inspected release, tag, commit, or dated model revision,\nor is `null` when the public artifact has no confirmed revision. `license` is either\n`{ \"name\": \"...\", \"url\": \"https://...\" }` or `null` when no licence was\nconfirmed; booleans are invalid. Each artifact and each simulator claim has\nits own source under the shared source contract. Its `source.variant` must\nequal the artifact's `variant`. Repository presence alone does not establish\nsimulator compatibility.\n\n`documented` means the cited source explicitly documents compatibility.\n`tested` means the integration was executed and additionally requires a\nsupported source review whose `reason` describes the test context, plus\nnon-empty `notes`. Validation and builds never download or execute an\nexternal simulation artefact.\n\n`actuator_architecture` is an optional top-level research record. It stores\nonly exact-variant actuator facts and keeps separately sourced joint groups\nseparate:\n\n```json\n{\n  \"review\": {\n    \"status\": \"found|not_confirmed\",\n    \"checked\": \"YYYY-MM-DD\",\n    \"urls\": [\"https://...\"],\n    \"reason\": \"...\"\n  },\n  \"groups\": [{\n    \"id\": \"unique-id\",\n    \"scope\": \"joints or robot area covered by this claim\",\n    \"variant\": \"concrete robot variant\",\n    \"drive\": \"electric|hydraulic|pneumatic|other|null\",\n    \"transmission\": \"harmonic|planetary|cycloidal|tendon|belt|direct|other|null\",\n    \"motion\": \"rotary|linear|other|null\",\n    \"architecture\": \"quasi_direct_drive|series_elastic|parallel_elastic|other|null\",\n    \"status\": \"claimed|demonstrated\",\n    \"source\": {\n      \"url\": \"https://...\",\n      \"quote\": \"...\",\n      \"accessed\": \"YYYY-MM-DD\",\n      \"variant\": \"concrete robot variant\"\n    },\n    \"notes\": \"required when any property is other\"\n  }]\n}\n```\n\nThe research review follows the same checked-date, unique HTTP(S) URL, and\nreason rules as `simulation`. `found` requires at least one group;\n`not_confirmed` requires an empty `groups` array and records only the result of\nthe targeted search. Group ids are unique within a robot. `scope` and\n`variant` are non-empty. All four nullable actuator property keys are required,\nand at least one must be known. `other` requires a non-empty `notes` value.\nEvery group has its own source under the shared source contract. The source\nmust have an HTTP(S) URL, a calendar-valid `accessed`, and a `source.variant`\nequal to the group's `variant`. Torque remains a separate measured\nspecification and is never inferred from this record.\n\n`warranty` is an array, because coverage differs by region and reseller:\n`[{ months, region, source, status }]`. Record one entry per region/seller\ncombination that has its own source; do not average or guess a global\nnumber.\n\n`order_type` is a single object, same shape as a spec entry: `{ value,\nsource, status }`, where `value` is one of `cart | quote | waitlist |\npreorder | none` — `cart` means direct checkout with a price shown,\n`quote` means a sales conversation is required before a price is given,\n`waitlist` and `preorder` are self-explanatory, `none` means the robot is\nnot offered for sale at all (research-only, internal use).\n\n`export_restrictions` is an array, `[{ jurisdiction, detail, source,\nstatus }]`. Only record an entry when the source is a hard, named\ndecision (an export-control ruling, a government notice, a manufacturer\nstatement about which countries it will not ship to) — not a rumor, not\nan analyst's guess about where sanctions might apply.\n\n`delivery.timeline[].sector` is an optional enum on each timeline event,\none of `automotive | logistics | manufacturing | research | consumer |\nhealthcare | other` — the industry of the customer or deployment named in\nthat event, when known.\n\n**Why lease prices, business financials, and scores are not tracked:**\nthis site records claimed/demonstrated/shipped facts with a primary\nsource behind each one. Lease pricing and financing terms are\nnegotiated per-deal and rarely published with a source that applies\ngenerally; recording one publicly quoted lease rate would misrepresent it\nas the going rate. Manufacturer revenue, funding, and valuation are\nbusiness facts about a company, not the robot, and belong in financial\npress rather than a robot spec sheet. A composite \"score\" would require\nweighting unlike properties (height against battery life against SDK\nmaturity) by some formula this site would have to invent and defend —\nthat is an opinion, not a sourced fact, and it's exactly the kind of\nreview-site judgment this project exists to avoid.\n\n## Capabilities\n\n`capabilities` is an optional array, one entry per demonstrated or claimed\nability:\n\n```json\n{ \"id\": \"stairs\", \"status\": \"demonstrated\", \"autonomy\": \"autonomous\", \"source\": { \"url\": \"...\", \"quote\": \"...\", \"accessed\": \"2026-09-20\", \"timestamp\": \"01:23\" }, \"note\": \"\" }\n```\n\n`id` must be one of the fixed ids in `data/capabilities.json` (each with a\nlabel and short definition there); an unknown id fails validation.\n`status` is the same `claimed | demonstrated | shipped` used everywhere else\n(`shipped` means a named customer is shown using it, not just the\nmanufacturer). `source.timestamp` is optional, `mm:ss`, for pointing at the\nmoment in a video. With the evidence-review fields below, a supported video\nrequires a real segment start, the concrete robot variant, and\n`review.method: \"video\"`. `source.timestamp_end` may add the segment end and\nmust be later than the start. `note` is optional free text.\n\n`autonomy` is required and is one of `teleoperated | scripted | autonomous |\nunknown`. A `demonstrated` capability with `autonomy: unknown` is allowed —\nmost manufacturer clips simply don't say. But `autonomy: autonomous` is only\nallowed when the source explicitly says so (a named engineer or the\nmanufacturer states no human/teleoperator was driving it), or an independent\nparty observed it directly. A manufacturer highlight reel that shows a\ncapability without saying who or what controlled it must be recorded as\n`unknown`, not `autonomous` — silence is not a claim.\n\n## Media\n\n`media` is an optional array, at most 3 entries per robot:\n\n```json\n{\n  \"type\": \"photo|drawing|patent\",\n  \"file\": \"media/<slug>/<bestand>.jpg|png|svg\",\n  \"caption\": \"...\",\n  \"source\": { \"url\": \"...\", \"accessed\": \"2026-09-21\" },\n  \"license\": {\n    \"name\": \"manufacturer press kit|USPTO design patent|EUIPO RCD|WIPO|CC BY 4.0|other\",\n    \"terms_url\": \"...\",\n    \"note\": \"...\"\n  },\n  \"patent_number\": \"USD1000000S\",\n  \"credit\": \"© Manufacturer\",\n  \"depicts_current\": false\n}\n```\n\n`depicts_current` is optional and defaults to `true`. Set to `false` when the\nimage shows an earlier generation or a different variant than this record;\nsuch media is kept for attribution and history but never used as the\nrecord's product image or thumbnail.\n\n**Licensed imagery is never evidence.** The robot page shows this section as\n\"Imagery\" — patent drawings, press-kit photos, or Creative Commons photos —\neach labelled with its type (patent drawing / press photo / CC photo) before\nthe credit. A photo or patent drawing shows what a robot looks like; it does\nnot demonstrate a spec, a capability, or a delivery. Nothing in `media` may\nbe cited as the `source` for a `claimed`, `demonstrated`, or `shipped` value\nelsewhere in the record — those still need their own sourced quote.\n\n**No hotlinking.** The file must be downloaded and committed under\n`data/media/<slug>/`; `media[].file` never points at an external URL.\n`media[].source.url` records where it was obtained, for attribution and\nverification, not for serving the image.\n\n**Only with an explicit license or a public patent.** Do not add an image\n\"because it's on the manufacturer's website\" — a press kit expressly\noffered for editorial/press use, a public patent drawing (design patents\nare a public record; the drawing itself is not copyrighted the way a photo\nis), or an explicitly CC-licensed image. When in doubt, leave it out.\n\n`type` is one of `photo | drawing | patent`. `file` must be a path under\n`data/media/` that exists on disk. `license.name` and `source` are always\nrequired. `patent_number` is required when `type` is `patent` and should\nbe the number as printed on the patent (e.g. a USPTO design patent\n`USD1,000,000 S`). `credit` is optional free text for a byline. Images are\nresized at build time to a max width of 800px before being copied into\n`dist/media/`.\n\n## Promises\n\n`promises` is an optional array, one entry per dated commitment a\nmanufacturer made about its own robot — a delivery, a production volume, a\nlaunch, an \"early access\" window — in its own words:\n\n```json\n{\n  \"id\": \"<slug>-<kort>\",\n  \"claim\": \"Full-scale Optimus production\",\n  \"target\": \"2027\",\n  \"made_on\": \"2026-04-22\",\n  \"quote\": \"...\",\n  \"source_url\": \"https://...\",\n  \"source_name\": \"Tesla Q1 2026 earnings call\",\n  \"accessed\": \"2026-09-27\",\n  \"status\": \"open\",\n  \"revised_to\": \"<promise id>\",\n  \"met_evidence\": \"https://...\"\n}\n```\n\n`id` is unique within the robot's own `promises` array (not globally),\nkebab-case, e.g. `tesla-optimus-full-scale-production`. `target` is the\nmanufacturer's own stated date, in whatever grain they gave it: an ISO\ndate (`2027-06-15`), a month (`2026-11`), a quarter (`2026-Q4`), a half\n(`2027-H1`), or a bare year (`2027`). `made_on` is the date the promise was\nmade (not the date it was recorded); `accessed` is the date the source was\nchecked, same convention as everywhere else, and must be on or after\n`made_on`. `quote` is a literal quote (max 300 characters, same rule as\n`source.quote` elsewhere) of the manufacturer making the claim — this is a\n`claimed`-tier record by construction, so there is no separate `status`\nfield for evidence tier the way specs have; `promises[].status` instead\ntracks the promise's own outcome.\n\n`status` is one of:\n\n- `open` — the deadline has not yet passed and nothing has resolved it.\n- `met` — a named delivery/production/launch happened that satisfies the\n  claim; record the evidence URL in `met_evidence`.\n- `missed` — the deadline passed with no resolving evidence, and nobody\n  has recorded a replacement promise for it.\n- `revised` — the manufacturer replaced this promise with a new one before\n  or after the deadline; `revised_to` names the new promise's `id`.\n\nNote that `status: \"open\"` is not updated automatically when its deadline\npasses — the record stays `open` until someone records the outcome as\n`met`, `missed`, or `revised`. The rendered page derives a display-only\n`overdue` state for an `open` promise past its deadline (see\n`tools/promises.js#effectiveStatus`); that derived state is never written\nback to the data.\n\n**Deadline rule** (`tools/promises.js#deadlineOf`): a bare year deadlines\non December 31 of that year; a quarter deadlines on the last day of that\nquarter (Q1 03-31, Q2 06-30, Q3 09-30, Q4 12-31); a half deadlines on the\nlast day of that half (H1 06-30, H2 12-31); a month deadlines on that\nmonth's last calendar day; an ISO date is its own deadline.\n`daysLeft(target, today)` is the deadline minus today, in days — negative\nmeans the deadline has passed.\n\n## Source object\n\nEvery value — spec, price, or timeline event — carries a `source`:\n\n| Field | Required | Notes |\n|---|---|---|\n| `url` | yes | link to the primary evidence |\n| `quote` | yes | literal quote, max 300 characters |\n| `accessed` | yes | `YYYY-MM-DD`, date the source was checked |\n| `archive` | no | archive.org (or similar) permalink |\n| `media_type` | no | `article | video | paper | repository | documentation | unknown` |\n| `publisher_type` | no | `official | independent | community | unknown` |\n| `variant` | no | concrete robot/model variant shown or described; required for every supported review |\n| `published` | no | `YYYY-MM-DD`, publication date when known |\n| `evidence_date` | no | `YYYY-MM-DD`, event or observation date when distinct from publication |\n| `timestamp` | no | `mm:ss`, start of a real video segment |\n| `timestamp_end` | no | `mm:ss`, optional segment end later than `timestamp` |\n| `review` | no | evidence review object described below |\n\nThe optional `review` object records what was inspected for this specific\nclaim:\n\n```json\n{\n  \"status\": \"supported|insufficient|inaccessible|conflicting|unreviewed\",\n  \"checked\": \"YYYY-MM-DD\",\n  \"reason\": \"...\",\n  \"method\": \"text|video|physical|unknown\"\n}\n```\n\n`checked` is required except for `unreviewed` and must be a real calendar\ndate. `reason` is required for\n`insufficient`, `inaccessible`, and `conflicting`. `supported` means only\nthat the quoted or observed evidence supports this claim; it does not make a\nmanufacturer source independent and does not prove a claim universally true.\nThe claim's `status` and a capability's `autonomy` remain separate judgments.\nAdding or changing a review never promotes either field.\n\nA supported review requires an explicit, known `media_type`, a concrete\nreview method (not `unknown`), and a non-empty `variant`. A supported video review additionally requires\n`media_type: \"video\"`, `method: \"video\"`, and a real `timestamp`. The video\nmethod is invalid for every other media type. If `media_type` explicitly\nnames a non-video medium, timestamps are invalid. `media_type: \"unknown\"`\ncan only carry an unresolved review. A video that has not been\nwatched at a specific segment stays `unreviewed`, `insufficient`, or\n`inaccessible`; `00:00` must never be used as a placeholder.\n\nAll new fields are additive. Existing source objects remain valid so legacy\ngaps can be reviewed progressively instead of being filled with invented\nmetadata.\n\n## Price entries\n\n`price_history` is an array, oldest first:\n\n```json\n{ \"date\": \"YYYY-MM-DD\", \"amount\": <number>, \"currency\": \"USD\", \"variant\": \"string\", \"status\": \"claimed|demonstrated|shipped\", \"source\": { ... } }\n```\n\n## Delivery\n\n`delivery.status` is the robot's current overall standing: `shipped`,\n`demonstrated`, `claimed`, or `announced-only`. `delivery.timeline` is an\narray of dated events:\n\n```json\n{ \"date\": \"YYYY-MM-DD\", \"event\": \"announced|first-demo|preorders-open|first-customer-delivery|volume-estimate\", \"detail\": \"string\", \"quantity_min\": null, \"quantity_max\": null, \"source\": { ... } }\n```\n\nOnly include an event once it has real evidence. Do not invent a\n`first-customer-delivery` event to fill a gap — if it hasn't happened, the\ntimeline simply stops at the last real event, and `delivery.status` reflects\nthat (`claimed` or `demonstrated`, not `shipped`).\n\n## The three statuses, precisely\n\n### claimed\nThe manufacturer's own words: a specs page on the manufacturer's domain, a\npress release, a regulatory/investor filing, or an interview with a named\nperson and a date, published by the manufacturer or a credible outlet\nquoting them directly. Blog posts, \"reviews\", or news articles that merely\nrepeat a number without citing the manufacturer directly do **not** qualify\nas the source for a `claimed` value — trace it back to the manufacturer.\n\n### demonstrated\nAn uncut video or live demonstration, run by an independent party (press,\ncustomer, researcher), OR a manufacturer-produced video in which the\nproperty in question is visibly performed with a timestamp (e.g. a battery\nruntime demonstrated across a visibly continuous, timestamped clip). CGI\nrenders, heavily cut marketing reels, and \"coming soon\" trailers do not\nqualify.\n\n### shipped\nA named customer, with photographic or video evidence of a physical unit in\ntheir possession, plus at least one of: an invoice, a serial number, an\nindependent unboxing, or a customs/import record. A signed contract,\npreorder, deposit, or a \"shipping in Q4\" statement is not shipped — it is\n`claimed` (or `demonstrated` if a working unit was shown).\n\n## Contradicting sources\n\nIf two credible sources disagree on a value (different height, different\ndelivery date, etc.), do not silently pick one. Record both, each with its\nown `source` and `accessed` date, and add a short note in `notes` explaining\nthe discrepancy. The comparison table on the homepage links to whichever\nvalue is most recently sourced, but the robot page must show both.\n\n## Quantities\n\nDelivered/produced quantities are almost never precisely disclosed. Use\n`quantity_min` / `quantity_max` as a range, each end backed by its own\nsource where possible (e.g. \"at least 500\" from one filing, \"fewer than\n2,000\" inferred from another). If no credible number exists at all, omit\nthe timeline event entirely rather than guessing.\n\n## Events and results under fixed rules\n\nOne JSON file per competition event in `data/events/<slug>.json`. `<slug>`\nmust match the `slug` field exactly.\n\n```json\n{\n  \"slug\": \"world-humanoid-robot-games-2025\",\n  \"name\": \"World Humanoid Robot Games 2025\",\n  \"organizer\": \"World Humanoid Robot Sports Federation\",\n  \"date\": \"2025-08-15\",\n  \"location\": \"Beijing, China (National Speed Skating Oval)\",\n  \"rules_url\": \"https://www.whrgoc.com/\",\n  \"autonomy_rule\": {\n    \"value\": \"mixed\",\n    \"source\": { \"url\": \"...\", \"quote\": \"...\", \"accessed\": \"2026-09-21\" }\n  },\n  \"source\": { \"url\": \"...\", \"quote\": \"...\", \"accessed\": \"2026-09-21\" }\n}\n```\n\n`autonomy_rule.value` is one of `autonomous | teleoperated | mixed |\nunknown` and describes how the event as a whole is run (e.g. \"mixed\" when\nautonomous entries get a scoring bonus but most competitors are remote\ncontrolled) -- it is not a claim about any single robot. `source` backs\nthe event's own facts (date, location, organizer).\n\nA robot record may carry an optional `results` array, one entry per\nrecorded outcome at a tracked event:\n\n```json\n\"results\": [\n  {\n    \"event\": \"world-humanoid-robot-games-2025\",\n    \"discipline\": \"1500 m\",\n    \"result\": \"6:34\",\n    \"rank\": 1,\n    \"team\": \"Unitree\",\n    \"unit\": \"time\",\n    \"autonomy\": \"teleoperated\",\n    \"source\": { \"url\": \"...\", \"quote\": \"...\", \"accessed\": \"2026-09-21\" }\n  }\n]\n```\n\n`event` must match a slug in `data/events/`. `rank` is an integer (1 =\nfirst place) or `null` when no ranking applies (e.g. a solo timed attempt).\n`autonomy` defaults to the event's own `autonomy_rule.value`; it may be\nrecorded differently for one result only when the source specifically says\nso for that run (e.g. one entrant ran autonomously in an event otherwise\ndominated by teleoperation) -- that source is the same `result.source`\nalready required on every entry.\n\n**Why a fixed-rules result is the strongest demonstrated-layer evidence,\nand still not `shipped`:** a manufacturer's own demo video can be cut,\nstaged, retried until it works, or narrated to imply more than happened. A\nresult at a competition with a published ruleset and an independent jury\ncannot: the discipline, the clock, and the judging are fixed before the\nrobot shows up, and every entrant is measured the same way. That is why\nthis is the strongest evidence this site records short of a customer using\nthe robot in production. It is still not `shipped`: winning a race or a\nmatch is not a named customer running the robot in their own operation,\nand no continuous, independent, cross-manufacturer benchmark exists (NIST's\nHumanoid Robot Baseline Performance Benchmark, still under development,\nwill publish only results aggregated across manufacturers, not per-robot,\nper-run data) -- competition results are therefore reported alongside, not\nfolded into, the `claimed / demonstrated / shipped` ladder.\n\n## Validation\n\n`tools/validate.js` enforces: required fields present, `status` is exactly\none of the three values, every value-bearing object has a non-empty\n`source.url`, `source.quote` (≤300 chars) and `source.accessed`\n(`YYYY-MM-DD`), and `slug` matches the filename. For `capabilities`: `id`\nmust be in `data/capabilities.json` and `autonomy` must be one of the four\nvalues. Optional evidence fields use the enums and relationships documented\nunder Source object; timestamps are `mm:ss`, a segment end follows its start,\nand supported video evidence requires video review, variant, and timestamp.\nFor `results`:\n`event` must match a slug under `data/events/`, `rank` must be an integer\nor `null`, and `autonomy` must be one of `autonomous | teleoperated |\nmixed | unknown`. Event records under `data/events/` are validated the\nsame way (required fields, dated fields, sourced `autonomy_rule`).\n\nFor the power/software/buying fields: `specs.locomotion.value` must be one\nof `bipedal | wheeled | hybrid`; `sdk.ros` must be one of `none | ros1 |\nros2` and `sdk.open_source`/`sdk.url`/`sdk.status`/`sdk.source` are all\nrequired when `sdk` is present; each `warranty[]` entry requires\n`months`, `region`, `status`, and `source`; `order_type.value` must be one\nof `cart | quote | waitlist | preorder | none`; each\n`export_restrictions[]` entry requires `jurisdiction`, `detail`, `status`,\nand `source`; `delivery.timeline[].sector`, when present, must be one of\n`automotive | logistics | manufacturing | research | consumer |\nhealthcare | other`.\n\nFor `simulation`: the research review, artifact cardinality, unique ids,\nformats, provenance, HTTP(S) URLs, revisions, licence shape, concrete variant\nmatching, compatibility source, simulator and evidence level are validated.\n`tested` additionally requires a supported review and written test context.\n\nFor `actuator_architecture`: the research review, group cardinality, unique\nids, non-empty scope and variant, four required nullable actuator properties,\nat least one known property, `other` notes, claim status, source URL/date, and\nexact group/source variant matching are validated.\n\nFor `promises[]`: `id`, `claim`, `source_url`, `source_name` are required\nnon-empty strings; `target` must parse under the deadline rule above\n(`tools/promises.js#isValidTarget`); `made_on` and `accessed` must be\n`YYYY-MM-DD` with `made_on` on or before `accessed`; `quote` is required,\nmax 300 characters; `status` must be one of `open | met | missed |\nrevised`; `revised_to`, when present, must match another promise's `id`\nwithin the same robot record; `met_evidence`, when present, must be a\nnon-empty string.\n\n## Independence\n\nhumanoidrecord.com accepts no money, samples, or sponsorship from robot\nmanufacturers or their investors. Costs are carried by elk.solutions. Data\ncorrections come only with a public source. Automated checks are logged;\nevery change is a public commit with its source.\n\nGitHub data mirror: [github.com/humanoidrecord/humanoidrecord-data](https://github.com/humanoidrecord/humanoidrecord-data). DOI: [10.5281/zenodo.22919641](https://doi.org/10.5281/zenodo.22919641).\n"
    }
  ]
}
