{
  "spec_version": "0.7.0-draft.5",
  "slug": "koch-arm",
  "as_of": "2026-10-04",
  "region": "US",
  "currency": "USD",
  "note": "Dated observations, not checkout quotes. Confirmed broken or unavailable listings remain in history but do not count. No referral links. Shipping and tax are separate.",
  "configurations": [
    {
      "configuration_id": "koch-pair-extension",
      "label": "Koch follower + leader, elbow-to-wrist extension",
      "first_task": "Leader-follower teleoperation with the repository scripts",
      "upstream_bom_url": "https://github.com/AlexanderKoch-Koch/low_cost_robot/blob/0602b0c1e6a67d8f6ab96f81d1378639018d98af/README.md",
      "upstream_revision": "0602b0c1e6a67d8f6ab96f81d1378639018d98af",
      "bom_coverage": {
        "status": "partial",
        "source_ids": [
          "S001"
        ],
        "notes": "README tables reconciled line by line; servo and frame packages include their bolts per ROBOTIS package contents. Not complete: screws for mounting the driver board and voltage reducer to the base, and solder, are not listed."
      },
      "labor_hours": {
        "value": null,
        "status": "unknown"
      },
      "ownership_scenarios": [
        {
          "scenario_id": "owns-computer-and-printer",
          "owned_requirements": [
            {
              "requirement_id": "host-computer",
              "quantity": 1,
              "basis": "documented_assumption",
              "note": "Common case: reader already has a suitable computer."
            },
            {
              "requirement_id": "printer",
              "quantity": 1,
              "basis": "documented_assumption",
              "note": "Common case: reader already has a 3D printer."
            }
          ]
        }
      ],
      "shipping_estimates": [],
      "lines": [
        {
          "line_id": "xl430",
          "part_id": "dynamixel-xl430-w250-t",
          "quantity": 2,
          "layer": "purchased_parts",
          "required": true,
          "source_ids": [
            "S001"
          ],
          "substitutes": [],
          "notes": ""
        },
        {
          "line_id": "xl330-m288",
          "part_id": "dynamixel-xl330-m288-t",
          "quantity": 4,
          "layer": "purchased_parts",
          "required": true,
          "source_ids": [
            "S001"
          ],
          "substitutes": [],
          "notes": ""
        },
        {
          "line_id": "xl330-idlers-f",
          "part_id": "robotis-fpx330-h101-idler",
          "quantity": 3,
          "layer": "purchased_parts",
          "required": true,
          "source_ids": [
            "S001"
          ],
          "substitutes": [],
          "notes": "Three idlers for the elbow-to-wrist extension geometry."
        },
        {
          "line_id": "xl430-idler",
          "part_id": "robotis-hn11-i101-idler",
          "quantity": 1,
          "layer": "purchased_parts",
          "required": true,
          "source_ids": [
            "S001"
          ],
          "substitutes": [],
          "notes": "One set as listed upstream."
        },
        {
          "line_id": "driver-board-f",
          "part_id": "serial-bus-servo-driver-board",
          "quantity": 1,
          "layer": "purchased_parts",
          "required": true,
          "source_ids": [
            "S001"
          ],
          "substitutes": [],
          "notes": "Same listing as upstream (a.co/d/7C3RUYU -> B0CTMM4LWK)."
        },
        {
          "line_id": "voltage-reducer",
          "part_id": "lm2596-buck-converter",
          "quantity": 1,
          "layer": "power_and_cabling",
          "required": true,
          "source_ids": [
            "S001"
          ],
          "substitutes": [],
          "notes": "One of the six-pack per follower."
        },
        {
          "line_id": "psu-12v",
          "part_id": "psu-12v-5a-barrel",
          "quantity": 1,
          "layer": "power_and_cabling",
          "required": true,
          "source_ids": [
            "S001"
          ],
          "substitutes": [],
          "notes": ""
        },
        {
          "line_id": "wires",
          "part_id": "dupont-jumper-wire-kit",
          "quantity": 1,
          "layer": "power_and_cabling",
          "required": true,
          "source_ids": [
            "S001"
          ],
          "substitutes": [],
          "notes": ""
        },
        {
          "line_id": "clamp-f",
          "part_id": "small-bar-clamp",
          "quantity": 1,
          "layer": "purchased_parts",
          "required": true,
          "source_ids": [
            "S001"
          ],
          "substitutes": [],
          "notes": "Upstream links a BESSEY CM30 3\" C-clamp (USD 6); its listing showed no price on 2026-10-04, so generic clamp offers are used."
        },
        {
          "line_id": "usb-cable-f",
          "part_id": "usb-a-to-usb-c-cable",
          "quantity": 1,
          "layer": "power_and_cabling",
          "required": true,
          "source_ids": [
            "S001"
          ],
          "substitutes": [],
          "notes": "README: a USB-C cable is necessary to connect the driver board."
        },
        {
          "line_id": "soldering",
          "part_id": "soldering-iron",
          "quantity": 1,
          "layer": "tools",
          "required": true,
          "source_ids": [
            "S001"
          ],
          "substitutes": [],
          "notes": "Wires are soldered onto the voltage reducer."
        },
        {
          "line_id": "xl330-m077",
          "part_id": "dynamixel-xl330-m077-t",
          "quantity": 6,
          "layer": "purchased_parts",
          "required": true,
          "source_ids": [
            "S001"
          ],
          "substitutes": [],
          "notes": ""
        },
        {
          "line_id": "xl330-frames",
          "part_id": "robotis-fpx330-s101-frame",
          "quantity": 4,
          "layer": "purchased_parts",
          "required": true,
          "source_ids": [
            "S001"
          ],
          "substitutes": [],
          "notes": "One set of four, as listed upstream."
        },
        {
          "line_id": "xl330-idlers-l",
          "part_id": "robotis-fpx330-h101-idler",
          "quantity": 3,
          "layer": "purchased_parts",
          "required": true,
          "source_ids": [
            "S001"
          ],
          "substitutes": [],
          "notes": "Three idlers for the extension geometry."
        },
        {
          "line_id": "driver-board-l",
          "part_id": "serial-bus-servo-driver-board",
          "quantity": 1,
          "layer": "purchased_parts",
          "required": true,
          "source_ids": [
            "S001"
          ],
          "substitutes": [],
          "notes": ""
        },
        {
          "line_id": "psu-5v",
          "part_id": "psu-5v-2a-barrel",
          "quantity": 1,
          "layer": "power_and_cabling",
          "required": true,
          "source_ids": [
            "S001"
          ],
          "substitutes": [],
          "notes": ""
        },
        {
          "line_id": "clamp-l",
          "part_id": "small-bar-clamp",
          "quantity": 1,
          "layer": "purchased_parts",
          "required": true,
          "source_ids": [
            "S001"
          ],
          "substitutes": [],
          "notes": ""
        },
        {
          "line_id": "usb-cable-l",
          "part_id": "usb-a-to-usb-c-cable",
          "quantity": 1,
          "layer": "power_and_cabling",
          "required": true,
          "source_ids": [
            "S001"
          ],
          "substitutes": [],
          "notes": ""
        },
        {
          "line_id": "host-computer",
          "part_id": "host-computer-lerobot",
          "quantity": 1,
          "layer": "host_compute",
          "required": true,
          "source_ids": [
            "S001"
          ],
          "substitutes": [],
          "notes": "Computer running the Dynamixel SDK control scripts."
        },
        {
          "line_id": "printer",
          "part_id": "fdm-3d-printer",
          "quantity": 1,
          "layer": "tools",
          "required": true,
          "source_ids": [
            "S001"
          ],
          "substitutes": [],
          "notes": "Required for the self-print route."
        }
      ],
      "printed": {
        "groups": [
          {
            "requirement_id": "follower-frame",
            "required": true,
            "source_ids": [
              "S001",
              "S004"
            ],
            "route": "self_print",
            "material_part_id": "pla-filament",
            "mass_low_g": 86.3,
            "mass_high_g": 100.8,
            "method": "Slicer: PrusaSlicer-2.9.6 based on Slic3r (with GUI support); each file sliced separately (retained source evidence): low = 2 perimeters and 15% infill, high = PrusaSlicer defaults (3 perimeters, 20% infill).",
            "assumptions": "Upstream states only that the moving gripper part needs supports; material, nozzle, layer height and infill are not stated, so PLA, 0.4 mm nozzle and 0.2 mm layers are assumed and infill/perimeters span a stated range. Elbow-to-wrist extension geometry; both elbow_to_wrist files are included (the short piece may be unused, about 5 g). arm.stl / leader_arm.stl are assembly exports and are not printed. No skirt or brim; one successful print, no reprint allowance.",
            "estimate_complete": true,
            "parts": [
              {
                "archive_url": "https://github.com/AlexanderKoch-Koch/low_cost_robot/archive/0602b0c1e6a67d8f6ab96f81d1378639018d98af.tar.gz",
                "path": "hardware/follower/stl/base.stl",
                "sha256": "c9d8ea55fabd991f90f027cde7b483db45add2e84a97e881fd4c3ab5885b7ede",
                "quantity": 1,
                "included": true,
                "role": "kit"
              },
              {
                "archive_url": "https://github.com/AlexanderKoch-Koch/low_cost_robot/archive/0602b0c1e6a67d8f6ab96f81d1378639018d98af.tar.gz",
                "path": "hardware/follower/stl/elbow_to_wrist.stl",
                "sha256": "151a20045b6930e547150437c36fb8b4c502528a5b1de28b01a51611a39db1a4",
                "quantity": 1,
                "included": true,
                "role": "kit"
              },
              {
                "archive_url": "https://github.com/AlexanderKoch-Koch/low_cost_robot/archive/0602b0c1e6a67d8f6ab96f81d1378639018d98af.tar.gz",
                "path": "hardware/follower/stl/elbow_to_wrist_extension.stl",
                "sha256": "ad9b96dabfa31cc6b19af3878e8ac3a839e72e0982d9708b49f10a581ca67fe2",
                "quantity": 1,
                "included": true,
                "role": "kit"
              },
              {
                "archive_url": "https://github.com/AlexanderKoch-Koch/low_cost_robot/archive/0602b0c1e6a67d8f6ab96f81d1378639018d98af.tar.gz",
                "path": "hardware/follower/stl/gripper_moving_part.stl",
                "sha256": "a777302975d25eb74a58c874e589354d61c68fdbea55bdffec29d6cb94572308",
                "quantity": 1,
                "included": true,
                "role": "kit"
              },
              {
                "archive_url": "https://github.com/AlexanderKoch-Koch/low_cost_robot/archive/0602b0c1e6a67d8f6ab96f81d1378639018d98af.tar.gz",
                "path": "hardware/follower/stl/gripper_static_part.stl",
                "sha256": "bcdebd1a97ec9f4273e17d01a608d8bc23f609642b9b298aa0e0f90050218229",
                "quantity": 1,
                "included": true,
                "role": "kit"
              },
              {
                "archive_url": "https://github.com/AlexanderKoch-Koch/low_cost_robot/archive/0602b0c1e6a67d8f6ab96f81d1378639018d98af.tar.gz",
                "path": "hardware/follower/stl/shoulder_rotation.stl",
                "sha256": "ae810fc00b5ae9ec110bb54ab2107d1dbd3a0cb03eca83c5d0bace603d0f4a9c",
                "quantity": 1,
                "included": true,
                "role": "kit"
              },
              {
                "archive_url": "https://github.com/AlexanderKoch-Koch/low_cost_robot/archive/0602b0c1e6a67d8f6ab96f81d1378639018d98af.tar.gz",
                "path": "hardware/follower/stl/shoulder_to_elbow.stl",
                "sha256": "4137f9d21af1faeee36697385254040a548bdcef0133830dd1fdc0f22b0897e2",
                "quantity": 1,
                "included": true,
                "role": "kit"
              }
            ]
          },
          {
            "requirement_id": "leader-frame",
            "required": true,
            "source_ids": [
              "S001",
              "S004"
            ],
            "route": "self_print",
            "material_part_id": "pla-filament",
            "mass_low_g": 63.5,
            "mass_high_g": 76.9,
            "method": "Slicer: PrusaSlicer-2.9.6 based on Slic3r (with GUI support); each file sliced separately (retained source evidence): low = 2 perimeters and 15% infill, high = PrusaSlicer defaults (3 perimeters, 20% infill).",
            "assumptions": "Upstream states only that the moving gripper part needs supports; material, nozzle, layer height and infill are not stated, so PLA, 0.4 mm nozzle and 0.2 mm layers are assumed and infill/perimeters span a stated range. Elbow-to-wrist extension geometry; both elbow_to_wrist files are included (the short piece may be unused, about 5 g). arm.stl / leader_arm.stl are assembly exports and are not printed. No skirt or brim; one successful print, no reprint allowance.",
            "estimate_complete": true,
            "parts": [
              {
                "archive_url": "https://github.com/AlexanderKoch-Koch/low_cost_robot/archive/0602b0c1e6a67d8f6ab96f81d1378639018d98af.tar.gz",
                "path": "hardware/leader/stl/base.stl",
                "sha256": "4c0c1867020a2692fdad4340b3168fb9a741750338c75fa59367e5a8b601c02f",
                "quantity": 1,
                "included": true,
                "role": "leader_only"
              },
              {
                "archive_url": "https://github.com/AlexanderKoch-Koch/low_cost_robot/archive/0602b0c1e6a67d8f6ab96f81d1378639018d98af.tar.gz",
                "path": "hardware/leader/stl/elbow_to_wrist.stl",
                "sha256": "151a20045b6930e547150437c36fb8b4c502528a5b1de28b01a51611a39db1a4",
                "quantity": 1,
                "included": true,
                "role": "leader_only"
              },
              {
                "archive_url": "https://github.com/AlexanderKoch-Koch/low_cost_robot/archive/0602b0c1e6a67d8f6ab96f81d1378639018d98af.tar.gz",
                "path": "hardware/leader/stl/elbow_to_wrist_extension.stl",
                "sha256": "ad9b96dabfa31cc6b19af3878e8ac3a839e72e0982d9708b49f10a581ca67fe2",
                "quantity": 1,
                "included": true,
                "role": "leader_only"
              },
              {
                "archive_url": "https://github.com/AlexanderKoch-Koch/low_cost_robot/archive/0602b0c1e6a67d8f6ab96f81d1378639018d98af.tar.gz",
                "path": "hardware/leader/stl/gripper_handle.stl",
                "sha256": "edc5fb3d52795de890d13403834c5b3b80da71e01645ea4688ab0ae7f93a1bfc",
                "quantity": 1,
                "included": true,
                "role": "leader_only"
              },
              {
                "archive_url": "https://github.com/AlexanderKoch-Koch/low_cost_robot/archive/0602b0c1e6a67d8f6ab96f81d1378639018d98af.tar.gz",
                "path": "hardware/leader/stl/gripper_trigger.stl",
                "sha256": "0244f26f536d127d05d897a25a80cf4adee6f2faf7072223fa1be2f444916e94",
                "quantity": 1,
                "included": true,
                "role": "leader_only"
              },
              {
                "archive_url": "https://github.com/AlexanderKoch-Koch/low_cost_robot/archive/0602b0c1e6a67d8f6ab96f81d1378639018d98af.tar.gz",
                "path": "hardware/leader/stl/shoulder_to_elbow.stl",
                "sha256": "50076340edf9c1602cfa946266fac894609c143fbabe9bdc1c24ec7fa7e4581d",
                "quantity": 1,
                "included": true,
                "role": "leader_only"
              }
            ]
          }
        ]
      }
    },
    {
      "configuration_id": "koch-follower-extension",
      "label": "Koch follower only, elbow-to-wrist extension",
      "first_task": "Follower arm controlled from a computer with the Dynamixel SDK",
      "upstream_bom_url": "https://github.com/AlexanderKoch-Koch/low_cost_robot/blob/0602b0c1e6a67d8f6ab96f81d1378639018d98af/README.md",
      "upstream_revision": "0602b0c1e6a67d8f6ab96f81d1378639018d98af",
      "bom_coverage": {
        "status": "partial",
        "source_ids": [
          "S001"
        ],
        "notes": "README tables reconciled line by line; servo and frame packages include their bolts per ROBOTIS package contents. Not complete: screws for mounting the driver board and voltage reducer to the base, and solder, are not listed."
      },
      "labor_hours": {
        "value": null,
        "status": "unknown"
      },
      "ownership_scenarios": [
        {
          "scenario_id": "owns-computer-and-printer",
          "owned_requirements": [
            {
              "requirement_id": "host-computer",
              "quantity": 1,
              "basis": "documented_assumption",
              "note": "Common case: reader already has a suitable computer."
            },
            {
              "requirement_id": "printer",
              "quantity": 1,
              "basis": "documented_assumption",
              "note": "Common case: reader already has a 3D printer."
            }
          ]
        }
      ],
      "shipping_estimates": [],
      "lines": [
        {
          "line_id": "xl430",
          "part_id": "dynamixel-xl430-w250-t",
          "quantity": 2,
          "layer": "purchased_parts",
          "required": true,
          "source_ids": [
            "S001"
          ],
          "substitutes": [],
          "notes": ""
        },
        {
          "line_id": "xl330-m288",
          "part_id": "dynamixel-xl330-m288-t",
          "quantity": 4,
          "layer": "purchased_parts",
          "required": true,
          "source_ids": [
            "S001"
          ],
          "substitutes": [],
          "notes": ""
        },
        {
          "line_id": "xl330-idlers-f",
          "part_id": "robotis-fpx330-h101-idler",
          "quantity": 3,
          "layer": "purchased_parts",
          "required": true,
          "source_ids": [
            "S001"
          ],
          "substitutes": [],
          "notes": "Three idlers for the elbow-to-wrist extension geometry."
        },
        {
          "line_id": "xl430-idler",
          "part_id": "robotis-hn11-i101-idler",
          "quantity": 1,
          "layer": "purchased_parts",
          "required": true,
          "source_ids": [
            "S001"
          ],
          "substitutes": [],
          "notes": "One set as listed upstream."
        },
        {
          "line_id": "driver-board-f",
          "part_id": "serial-bus-servo-driver-board",
          "quantity": 1,
          "layer": "purchased_parts",
          "required": true,
          "source_ids": [
            "S001"
          ],
          "substitutes": [],
          "notes": "Same listing as upstream (a.co/d/7C3RUYU -> B0CTMM4LWK)."
        },
        {
          "line_id": "voltage-reducer",
          "part_id": "lm2596-buck-converter",
          "quantity": 1,
          "layer": "power_and_cabling",
          "required": true,
          "source_ids": [
            "S001"
          ],
          "substitutes": [],
          "notes": "One of the six-pack per follower."
        },
        {
          "line_id": "psu-12v",
          "part_id": "psu-12v-5a-barrel",
          "quantity": 1,
          "layer": "power_and_cabling",
          "required": true,
          "source_ids": [
            "S001"
          ],
          "substitutes": [],
          "notes": ""
        },
        {
          "line_id": "wires",
          "part_id": "dupont-jumper-wire-kit",
          "quantity": 1,
          "layer": "power_and_cabling",
          "required": true,
          "source_ids": [
            "S001"
          ],
          "substitutes": [],
          "notes": ""
        },
        {
          "line_id": "clamp-f",
          "part_id": "small-bar-clamp",
          "quantity": 1,
          "layer": "purchased_parts",
          "required": true,
          "source_ids": [
            "S001"
          ],
          "substitutes": [],
          "notes": "Upstream links a BESSEY CM30 3\" C-clamp (USD 6); its listing showed no price on 2026-10-04, so generic clamp offers are used."
        },
        {
          "line_id": "usb-cable-f",
          "part_id": "usb-a-to-usb-c-cable",
          "quantity": 1,
          "layer": "power_and_cabling",
          "required": true,
          "source_ids": [
            "S001"
          ],
          "substitutes": [],
          "notes": "README: a USB-C cable is necessary to connect the driver board."
        },
        {
          "line_id": "soldering",
          "part_id": "soldering-iron",
          "quantity": 1,
          "layer": "tools",
          "required": true,
          "source_ids": [
            "S001"
          ],
          "substitutes": [],
          "notes": "Wires are soldered onto the voltage reducer."
        },
        {
          "line_id": "host-computer",
          "part_id": "host-computer-lerobot",
          "quantity": 1,
          "layer": "host_compute",
          "required": true,
          "source_ids": [
            "S001"
          ],
          "substitutes": [],
          "notes": "Computer running the Dynamixel SDK control scripts."
        },
        {
          "line_id": "printer",
          "part_id": "fdm-3d-printer",
          "quantity": 1,
          "layer": "tools",
          "required": true,
          "source_ids": [
            "S001"
          ],
          "substitutes": [],
          "notes": "Required for the self-print route."
        }
      ],
      "printed": {
        "groups": [
          {
            "requirement_id": "follower-frame",
            "required": true,
            "source_ids": [
              "S001",
              "S004"
            ],
            "route": "self_print",
            "material_part_id": "pla-filament",
            "mass_low_g": 86.3,
            "mass_high_g": 100.8,
            "method": "Slicer: PrusaSlicer-2.9.6 based on Slic3r (with GUI support); each file sliced separately (retained source evidence): low = 2 perimeters and 15% infill, high = PrusaSlicer defaults (3 perimeters, 20% infill).",
            "assumptions": "Upstream states only that the moving gripper part needs supports; material, nozzle, layer height and infill are not stated, so PLA, 0.4 mm nozzle and 0.2 mm layers are assumed and infill/perimeters span a stated range. Elbow-to-wrist extension geometry; both elbow_to_wrist files are included (the short piece may be unused, about 5 g). arm.stl / leader_arm.stl are assembly exports and are not printed. No skirt or brim; one successful print, no reprint allowance.",
            "estimate_complete": true,
            "parts": [
              {
                "archive_url": "https://github.com/AlexanderKoch-Koch/low_cost_robot/archive/0602b0c1e6a67d8f6ab96f81d1378639018d98af.tar.gz",
                "path": "hardware/follower/stl/base.stl",
                "sha256": "c9d8ea55fabd991f90f027cde7b483db45add2e84a97e881fd4c3ab5885b7ede",
                "quantity": 1,
                "included": true,
                "role": "kit"
              },
              {
                "archive_url": "https://github.com/AlexanderKoch-Koch/low_cost_robot/archive/0602b0c1e6a67d8f6ab96f81d1378639018d98af.tar.gz",
                "path": "hardware/follower/stl/elbow_to_wrist.stl",
                "sha256": "151a20045b6930e547150437c36fb8b4c502528a5b1de28b01a51611a39db1a4",
                "quantity": 1,
                "included": true,
                "role": "kit"
              },
              {
                "archive_url": "https://github.com/AlexanderKoch-Koch/low_cost_robot/archive/0602b0c1e6a67d8f6ab96f81d1378639018d98af.tar.gz",
                "path": "hardware/follower/stl/elbow_to_wrist_extension.stl",
                "sha256": "ad9b96dabfa31cc6b19af3878e8ac3a839e72e0982d9708b49f10a581ca67fe2",
                "quantity": 1,
                "included": true,
                "role": "kit"
              },
              {
                "archive_url": "https://github.com/AlexanderKoch-Koch/low_cost_robot/archive/0602b0c1e6a67d8f6ab96f81d1378639018d98af.tar.gz",
                "path": "hardware/follower/stl/gripper_moving_part.stl",
                "sha256": "a777302975d25eb74a58c874e589354d61c68fdbea55bdffec29d6cb94572308",
                "quantity": 1,
                "included": true,
                "role": "kit"
              },
              {
                "archive_url": "https://github.com/AlexanderKoch-Koch/low_cost_robot/archive/0602b0c1e6a67d8f6ab96f81d1378639018d98af.tar.gz",
                "path": "hardware/follower/stl/gripper_static_part.stl",
                "sha256": "bcdebd1a97ec9f4273e17d01a608d8bc23f609642b9b298aa0e0f90050218229",
                "quantity": 1,
                "included": true,
                "role": "kit"
              },
              {
                "archive_url": "https://github.com/AlexanderKoch-Koch/low_cost_robot/archive/0602b0c1e6a67d8f6ab96f81d1378639018d98af.tar.gz",
                "path": "hardware/follower/stl/shoulder_rotation.stl",
                "sha256": "ae810fc00b5ae9ec110bb54ab2107d1dbd3a0cb03eca83c5d0bace603d0f4a9c",
                "quantity": 1,
                "included": true,
                "role": "kit"
              },
              {
                "archive_url": "https://github.com/AlexanderKoch-Koch/low_cost_robot/archive/0602b0c1e6a67d8f6ab96f81d1378639018d98af.tar.gz",
                "path": "hardware/follower/stl/shoulder_to_elbow.stl",
                "sha256": "4137f9d21af1faeee36697385254040a548bdcef0133830dd1fdc0f22b0897e2",
                "quantity": 1,
                "included": true,
                "role": "kit"
              }
            ]
          }
        ]
      }
    }
  ],
  "rollups": [
    {
      "configuration_id": "koch-pair-extension",
      "region": "US",
      "currency": "USD",
      "scenario_id": "baseline",
      "layers": {
        "purchased_parts": {
          "low": 403.39,
          "high": 405.43,
          "required_groups": 8,
          "priced_groups": 8,
          "unpriced": [],
          "oldest_price_date": "2026-10-04",
          "newest_price_date": "2026-10-04"
        },
        "printed_parts": {
          "low": 14.99,
          "high": 14.99,
          "required_groups": 1,
          "priced_groups": 1,
          "unpriced": [],
          "oldest_price_date": "2026-10-04",
          "newest_price_date": "2026-10-04",
          "consumption_low": 2.25,
          "consumption_high": 2.66
        },
        "fabricated_parts": {
          "low": 0,
          "high": 0,
          "required_groups": 0,
          "priced_groups": 0,
          "unpriced": [],
          "oldest_price_date": null,
          "newest_price_date": null
        },
        "power_and_cabling": {
          "low": 32.55,
          "high": 32.55,
          "required_groups": 5,
          "priced_groups": 4,
          "unpriced": [
            "voltage-reducer"
          ],
          "oldest_price_date": "2026-10-04",
          "newest_price_date": "2026-10-04"
        },
        "host_compute": {
          "low": 0,
          "high": 0,
          "required_groups": 1,
          "priced_groups": 0,
          "unpriced": [
            "host-computer"
          ],
          "oldest_price_date": null,
          "newest_price_date": null
        },
        "sensors_camera": {
          "low": 0,
          "high": 0,
          "required_groups": 0,
          "priced_groups": 0,
          "unpriced": [],
          "oldest_price_date": null,
          "newest_price_date": null
        },
        "tools": {
          "low": 0,
          "high": 0,
          "required_groups": 2,
          "priced_groups": 0,
          "unpriced": [
            "printer",
            "soldering"
          ],
          "oldest_price_date": null,
          "newest_price_date": null
        },
        "shipping_tax": {
          "low": 0,
          "high": 0,
          "required_groups": 1,
          "priced_groups": 0,
          "unpriced": [
            "shipping_tax"
          ],
          "oldest_price_date": null,
          "newest_price_date": null
        }
      },
      "labor_hours": {
        "value": null,
        "status": "unknown"
      },
      "bom_coverage": "partial",
      "pricing_coverage": {
        "required_groups": 17,
        "priced_groups": 13,
        "ratio": 0.7647,
        "unpriced": [
          "host-computer",
          "printer",
          "soldering",
          "voltage-reducer"
        ]
      },
      "setup_readiness": "incomplete",
      "parts_total": {
        "low": 450.93,
        "high": null,
        "complete": false,
        "gaps": [
          "voltage-reducer"
        ]
      },
      "required_total": {
        "low": 450.93,
        "high": null,
        "complete": false,
        "gaps": [
          "host-computer",
          "printer",
          "shipping_tax",
          "soldering",
          "voltage-reducer"
        ]
      },
      "price_dates": {
        "oldest": "2026-10-04",
        "newest": "2026-10-04",
        "upstream_reported_groups": []
      },
      "selected_observations": {
        "low": [
          {
            "group": "material:pla-filament",
            "part_id": "pla-filament",
            "offer_id": "amazon-b0cs2zsz6f",
            "observation_id": "amazon-2026-10-04",
            "packs": 1,
            "expenditure": 14.99,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:dupont-jumper-wire-kit",
            "part_id": "dupont-jumper-wire-kit",
            "offer_id": "amazon-b01ev70c78",
            "observation_id": "amazon-2026-10-04",
            "packs": 1,
            "expenditure": 6.98,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:dynamixel-xl330-m077-t",
            "part_id": "dynamixel-xl330-m077-t",
            "offer_id": "robotis-dynamixel-xl330-m077-t",
            "observation_id": "robotis-2026-10-04",
            "packs": 6,
            "expenditure": 164.94,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:dynamixel-xl330-m288-t",
            "part_id": "dynamixel-xl330-m288-t",
            "offer_id": "robotis-dynamixel-xl330-m288-t",
            "observation_id": "robotis-2026-10-04",
            "packs": 4,
            "expenditure": 109.96,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:dynamixel-xl430-w250-t",
            "part_id": "dynamixel-xl430-w250-t",
            "offer_id": "robotis-dynamixel-xl430-w250-t",
            "observation_id": "robotis-2026-10-04",
            "packs": 2,
            "expenditure": 55,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:psu-12v-5a-barrel",
            "part_id": "psu-12v-5a-barrel",
            "offer_id": "amazon-b0byvk73bp",
            "observation_id": "amazon-2026-10-04",
            "packs": 1,
            "expenditure": 11.99,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:psu-5v-2a-barrel",
            "part_id": "psu-5v-2a-barrel",
            "offer_id": "amazon-b0bzs779mc",
            "observation_id": "amazon-2026-10-04",
            "packs": 1,
            "expenditure": 6.39,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:robotis-fpx330-h101-idler",
            "part_id": "robotis-fpx330-h101-idler",
            "offer_id": "robotis-fpx330-h101-4pcs-set",
            "observation_id": "robotis-2026-10-04",
            "packs": 2,
            "expenditure": 22.54,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:robotis-fpx330-s101-frame",
            "part_id": "robotis-fpx330-s101-frame",
            "offer_id": "robotis-fpx330-s101-4pcs-set",
            "observation_id": "robotis-2026-10-04",
            "packs": 1,
            "expenditure": 10.01,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:robotis-hn11-i101-idler",
            "part_id": "robotis-hn11-i101-idler",
            "offer_id": "robotis-hn11-i101-set",
            "observation_id": "robotis-2026-10-04",
            "packs": 1,
            "expenditure": 8.05,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:serial-bus-servo-driver-board",
            "part_id": "serial-bus-servo-driver-board",
            "offer_id": "amazon-b0ctmm4lwk",
            "observation_id": "amazon-2026-10-04",
            "packs": 2,
            "expenditure": 24.94,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:small-bar-clamp",
            "part_id": "small-bar-clamp",
            "offer_id": "amazon-b092l925j4",
            "observation_id": "amazon-2026-10-04",
            "packs": 1,
            "expenditure": 7.95,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:usb-a-to-usb-c-cable",
            "part_id": "usb-a-to-usb-c-cable",
            "offer_id": "amazon-b0b8nwllw2",
            "observation_id": "amazon-2026-10-04",
            "packs": 1,
            "expenditure": 7.19,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          }
        ],
        "high": [
          {
            "group": "material:pla-filament",
            "part_id": "pla-filament",
            "offer_id": "amazon-b0cs2zsz6f",
            "observation_id": "amazon-2026-10-04",
            "packs": 1,
            "expenditure": 14.99,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:dupont-jumper-wire-kit",
            "part_id": "dupont-jumper-wire-kit",
            "offer_id": "amazon-b01ev70c78",
            "observation_id": "amazon-2026-10-04",
            "packs": 1,
            "expenditure": 6.98,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:dynamixel-xl330-m077-t",
            "part_id": "dynamixel-xl330-m077-t",
            "offer_id": "robotis-dynamixel-xl330-m077-t",
            "observation_id": "robotis-2026-10-04",
            "packs": 6,
            "expenditure": 164.94,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:dynamixel-xl330-m288-t",
            "part_id": "dynamixel-xl330-m288-t",
            "offer_id": "robotis-dynamixel-xl330-m288-t",
            "observation_id": "robotis-2026-10-04",
            "packs": 4,
            "expenditure": 109.96,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:dynamixel-xl430-w250-t",
            "part_id": "dynamixel-xl430-w250-t",
            "offer_id": "robotis-dynamixel-xl430-w250-t",
            "observation_id": "robotis-2026-10-04",
            "packs": 2,
            "expenditure": 55,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:psu-12v-5a-barrel",
            "part_id": "psu-12v-5a-barrel",
            "offer_id": "amazon-b0byvk73bp",
            "observation_id": "amazon-2026-10-04",
            "packs": 1,
            "expenditure": 11.99,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:psu-5v-2a-barrel",
            "part_id": "psu-5v-2a-barrel",
            "offer_id": "amazon-b0bzs779mc",
            "observation_id": "amazon-2026-10-04",
            "packs": 1,
            "expenditure": 6.39,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:robotis-fpx330-h101-idler",
            "part_id": "robotis-fpx330-h101-idler",
            "offer_id": "robotis-fpx330-h101-4pcs-set",
            "observation_id": "robotis-2026-10-04",
            "packs": 2,
            "expenditure": 22.54,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:robotis-fpx330-s101-frame",
            "part_id": "robotis-fpx330-s101-frame",
            "offer_id": "robotis-fpx330-s101-4pcs-set",
            "observation_id": "robotis-2026-10-04",
            "packs": 1,
            "expenditure": 10.01,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:robotis-hn11-i101-idler",
            "part_id": "robotis-hn11-i101-idler",
            "offer_id": "robotis-hn11-i101-set",
            "observation_id": "robotis-2026-10-04",
            "packs": 1,
            "expenditure": 8.05,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:serial-bus-servo-driver-board",
            "part_id": "serial-bus-servo-driver-board",
            "offer_id": "amazon-b0ctmm4lwk",
            "observation_id": "amazon-2026-10-04",
            "packs": 2,
            "expenditure": 24.94,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:small-bar-clamp",
            "part_id": "small-bar-clamp",
            "offer_id": "amazon-b0djnxf8wh",
            "observation_id": "amazon-2026-10-04",
            "packs": 1,
            "expenditure": 9.99,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:usb-a-to-usb-c-cable",
            "part_id": "usb-a-to-usb-c-cable",
            "offer_id": "amazon-b0b8nwllw2",
            "observation_id": "amazon-2026-10-04",
            "packs": 1,
            "expenditure": 7.19,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          }
        ]
      },
      "as_of_date": "2026-10-04",
      "computed_at": "2026-10-04",
      "tool_version": "0.7.0-draft.5",
      "tool_hash": "b3a901ff5bbade76fe67cecf535fd822a7fce97a6b33b761ac6a8bfc1edffc23"
    },
    {
      "configuration_id": "koch-pair-extension",
      "region": "US",
      "currency": "USD",
      "scenario_id": "owns-computer-and-printer",
      "layers": {
        "purchased_parts": {
          "low": 403.39,
          "high": 405.43,
          "required_groups": 8,
          "priced_groups": 8,
          "unpriced": [],
          "oldest_price_date": "2026-10-04",
          "newest_price_date": "2026-10-04"
        },
        "printed_parts": {
          "low": 14.99,
          "high": 14.99,
          "required_groups": 1,
          "priced_groups": 1,
          "unpriced": [],
          "oldest_price_date": "2026-10-04",
          "newest_price_date": "2026-10-04",
          "consumption_low": 2.25,
          "consumption_high": 2.66
        },
        "fabricated_parts": {
          "low": 0,
          "high": 0,
          "required_groups": 0,
          "priced_groups": 0,
          "unpriced": [],
          "oldest_price_date": null,
          "newest_price_date": null
        },
        "power_and_cabling": {
          "low": 32.55,
          "high": 32.55,
          "required_groups": 5,
          "priced_groups": 4,
          "unpriced": [
            "voltage-reducer"
          ],
          "oldest_price_date": "2026-10-04",
          "newest_price_date": "2026-10-04"
        },
        "host_compute": {
          "low": 0,
          "high": 0,
          "required_groups": 1,
          "priced_groups": 1,
          "unpriced": [],
          "oldest_price_date": null,
          "newest_price_date": null
        },
        "sensors_camera": {
          "low": 0,
          "high": 0,
          "required_groups": 0,
          "priced_groups": 0,
          "unpriced": [],
          "oldest_price_date": null,
          "newest_price_date": null
        },
        "tools": {
          "low": 0,
          "high": 0,
          "required_groups": 2,
          "priced_groups": 1,
          "unpriced": [
            "soldering"
          ],
          "oldest_price_date": null,
          "newest_price_date": null
        },
        "shipping_tax": {
          "low": 0,
          "high": 0,
          "required_groups": 1,
          "priced_groups": 0,
          "unpriced": [
            "shipping_tax"
          ],
          "oldest_price_date": null,
          "newest_price_date": null
        }
      },
      "labor_hours": {
        "value": null,
        "status": "unknown"
      },
      "bom_coverage": "partial",
      "pricing_coverage": {
        "required_groups": 15,
        "priced_groups": 13,
        "ratio": 0.8667,
        "unpriced": [
          "soldering",
          "voltage-reducer"
        ]
      },
      "setup_readiness": "incomplete",
      "parts_total": {
        "low": 450.93,
        "high": null,
        "complete": false,
        "gaps": [
          "voltage-reducer"
        ]
      },
      "required_total": {
        "low": 450.93,
        "high": null,
        "complete": false,
        "gaps": [
          "shipping_tax",
          "soldering",
          "voltage-reducer"
        ]
      },
      "price_dates": {
        "oldest": "2026-10-04",
        "newest": "2026-10-04",
        "upstream_reported_groups": []
      },
      "selected_observations": {
        "low": [
          {
            "group": "material:pla-filament",
            "part_id": "pla-filament",
            "offer_id": "amazon-b0cs2zsz6f",
            "observation_id": "amazon-2026-10-04",
            "packs": 1,
            "expenditure": 14.99,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:dupont-jumper-wire-kit",
            "part_id": "dupont-jumper-wire-kit",
            "offer_id": "amazon-b01ev70c78",
            "observation_id": "amazon-2026-10-04",
            "packs": 1,
            "expenditure": 6.98,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:dynamixel-xl330-m077-t",
            "part_id": "dynamixel-xl330-m077-t",
            "offer_id": "robotis-dynamixel-xl330-m077-t",
            "observation_id": "robotis-2026-10-04",
            "packs": 6,
            "expenditure": 164.94,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:dynamixel-xl330-m288-t",
            "part_id": "dynamixel-xl330-m288-t",
            "offer_id": "robotis-dynamixel-xl330-m288-t",
            "observation_id": "robotis-2026-10-04",
            "packs": 4,
            "expenditure": 109.96,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:dynamixel-xl430-w250-t",
            "part_id": "dynamixel-xl430-w250-t",
            "offer_id": "robotis-dynamixel-xl430-w250-t",
            "observation_id": "robotis-2026-10-04",
            "packs": 2,
            "expenditure": 55,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:psu-12v-5a-barrel",
            "part_id": "psu-12v-5a-barrel",
            "offer_id": "amazon-b0byvk73bp",
            "observation_id": "amazon-2026-10-04",
            "packs": 1,
            "expenditure": 11.99,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:psu-5v-2a-barrel",
            "part_id": "psu-5v-2a-barrel",
            "offer_id": "amazon-b0bzs779mc",
            "observation_id": "amazon-2026-10-04",
            "packs": 1,
            "expenditure": 6.39,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:robotis-fpx330-h101-idler",
            "part_id": "robotis-fpx330-h101-idler",
            "offer_id": "robotis-fpx330-h101-4pcs-set",
            "observation_id": "robotis-2026-10-04",
            "packs": 2,
            "expenditure": 22.54,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:robotis-fpx330-s101-frame",
            "part_id": "robotis-fpx330-s101-frame",
            "offer_id": "robotis-fpx330-s101-4pcs-set",
            "observation_id": "robotis-2026-10-04",
            "packs": 1,
            "expenditure": 10.01,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:robotis-hn11-i101-idler",
            "part_id": "robotis-hn11-i101-idler",
            "offer_id": "robotis-hn11-i101-set",
            "observation_id": "robotis-2026-10-04",
            "packs": 1,
            "expenditure": 8.05,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:serial-bus-servo-driver-board",
            "part_id": "serial-bus-servo-driver-board",
            "offer_id": "amazon-b0ctmm4lwk",
            "observation_id": "amazon-2026-10-04",
            "packs": 2,
            "expenditure": 24.94,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:small-bar-clamp",
            "part_id": "small-bar-clamp",
            "offer_id": "amazon-b092l925j4",
            "observation_id": "amazon-2026-10-04",
            "packs": 1,
            "expenditure": 7.95,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:usb-a-to-usb-c-cable",
            "part_id": "usb-a-to-usb-c-cable",
            "offer_id": "amazon-b0b8nwllw2",
            "observation_id": "amazon-2026-10-04",
            "packs": 1,
            "expenditure": 7.19,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          }
        ],
        "high": [
          {
            "group": "material:pla-filament",
            "part_id": "pla-filament",
            "offer_id": "amazon-b0cs2zsz6f",
            "observation_id": "amazon-2026-10-04",
            "packs": 1,
            "expenditure": 14.99,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:dupont-jumper-wire-kit",
            "part_id": "dupont-jumper-wire-kit",
            "offer_id": "amazon-b01ev70c78",
            "observation_id": "amazon-2026-10-04",
            "packs": 1,
            "expenditure": 6.98,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:dynamixel-xl330-m077-t",
            "part_id": "dynamixel-xl330-m077-t",
            "offer_id": "robotis-dynamixel-xl330-m077-t",
            "observation_id": "robotis-2026-10-04",
            "packs": 6,
            "expenditure": 164.94,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:dynamixel-xl330-m288-t",
            "part_id": "dynamixel-xl330-m288-t",
            "offer_id": "robotis-dynamixel-xl330-m288-t",
            "observation_id": "robotis-2026-10-04",
            "packs": 4,
            "expenditure": 109.96,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:dynamixel-xl430-w250-t",
            "part_id": "dynamixel-xl430-w250-t",
            "offer_id": "robotis-dynamixel-xl430-w250-t",
            "observation_id": "robotis-2026-10-04",
            "packs": 2,
            "expenditure": 55,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:psu-12v-5a-barrel",
            "part_id": "psu-12v-5a-barrel",
            "offer_id": "amazon-b0byvk73bp",
            "observation_id": "amazon-2026-10-04",
            "packs": 1,
            "expenditure": 11.99,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:psu-5v-2a-barrel",
            "part_id": "psu-5v-2a-barrel",
            "offer_id": "amazon-b0bzs779mc",
            "observation_id": "amazon-2026-10-04",
            "packs": 1,
            "expenditure": 6.39,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:robotis-fpx330-h101-idler",
            "part_id": "robotis-fpx330-h101-idler",
            "offer_id": "robotis-fpx330-h101-4pcs-set",
            "observation_id": "robotis-2026-10-04",
            "packs": 2,
            "expenditure": 22.54,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:robotis-fpx330-s101-frame",
            "part_id": "robotis-fpx330-s101-frame",
            "offer_id": "robotis-fpx330-s101-4pcs-set",
            "observation_id": "robotis-2026-10-04",
            "packs": 1,
            "expenditure": 10.01,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:robotis-hn11-i101-idler",
            "part_id": "robotis-hn11-i101-idler",
            "offer_id": "robotis-hn11-i101-set",
            "observation_id": "robotis-2026-10-04",
            "packs": 1,
            "expenditure": 8.05,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:serial-bus-servo-driver-board",
            "part_id": "serial-bus-servo-driver-board",
            "offer_id": "amazon-b0ctmm4lwk",
            "observation_id": "amazon-2026-10-04",
            "packs": 2,
            "expenditure": 24.94,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:small-bar-clamp",
            "part_id": "small-bar-clamp",
            "offer_id": "amazon-b0djnxf8wh",
            "observation_id": "amazon-2026-10-04",
            "packs": 1,
            "expenditure": 9.99,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:usb-a-to-usb-c-cable",
            "part_id": "usb-a-to-usb-c-cable",
            "offer_id": "amazon-b0b8nwllw2",
            "observation_id": "amazon-2026-10-04",
            "packs": 1,
            "expenditure": 7.19,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          }
        ]
      },
      "as_of_date": "2026-10-04",
      "computed_at": "2026-10-04",
      "tool_version": "0.7.0-draft.5",
      "tool_hash": "b3a901ff5bbade76fe67cecf535fd822a7fce97a6b33b761ac6a8bfc1edffc23"
    },
    {
      "configuration_id": "koch-follower-extension",
      "region": "US",
      "currency": "USD",
      "scenario_id": "baseline",
      "layers": {
        "purchased_parts": {
          "low": 204.7,
          "high": 206.74,
          "required_groups": 6,
          "priced_groups": 6,
          "unpriced": [],
          "oldest_price_date": "2026-10-04",
          "newest_price_date": "2026-10-04"
        },
        "printed_parts": {
          "low": 14.99,
          "high": 14.99,
          "required_groups": 1,
          "priced_groups": 1,
          "unpriced": [],
          "oldest_price_date": "2026-10-04",
          "newest_price_date": "2026-10-04",
          "consumption_low": 1.29,
          "consumption_high": 1.51
        },
        "fabricated_parts": {
          "low": 0,
          "high": 0,
          "required_groups": 0,
          "priced_groups": 0,
          "unpriced": [],
          "oldest_price_date": null,
          "newest_price_date": null
        },
        "power_and_cabling": {
          "low": 26.16,
          "high": 26.16,
          "required_groups": 4,
          "priced_groups": 3,
          "unpriced": [
            "voltage-reducer"
          ],
          "oldest_price_date": "2026-10-04",
          "newest_price_date": "2026-10-04"
        },
        "host_compute": {
          "low": 0,
          "high": 0,
          "required_groups": 1,
          "priced_groups": 0,
          "unpriced": [
            "host-computer"
          ],
          "oldest_price_date": null,
          "newest_price_date": null
        },
        "sensors_camera": {
          "low": 0,
          "high": 0,
          "required_groups": 0,
          "priced_groups": 0,
          "unpriced": [],
          "oldest_price_date": null,
          "newest_price_date": null
        },
        "tools": {
          "low": 0,
          "high": 0,
          "required_groups": 2,
          "priced_groups": 0,
          "unpriced": [
            "printer",
            "soldering"
          ],
          "oldest_price_date": null,
          "newest_price_date": null
        },
        "shipping_tax": {
          "low": 0,
          "high": 0,
          "required_groups": 1,
          "priced_groups": 0,
          "unpriced": [
            "shipping_tax"
          ],
          "oldest_price_date": null,
          "newest_price_date": null
        }
      },
      "labor_hours": {
        "value": null,
        "status": "unknown"
      },
      "bom_coverage": "partial",
      "pricing_coverage": {
        "required_groups": 14,
        "priced_groups": 10,
        "ratio": 0.7143,
        "unpriced": [
          "host-computer",
          "printer",
          "soldering",
          "voltage-reducer"
        ]
      },
      "setup_readiness": "incomplete",
      "parts_total": {
        "low": 245.85,
        "high": null,
        "complete": false,
        "gaps": [
          "voltage-reducer"
        ]
      },
      "required_total": {
        "low": 245.85,
        "high": null,
        "complete": false,
        "gaps": [
          "host-computer",
          "printer",
          "shipping_tax",
          "soldering",
          "voltage-reducer"
        ]
      },
      "price_dates": {
        "oldest": "2026-10-04",
        "newest": "2026-10-04",
        "upstream_reported_groups": []
      },
      "selected_observations": {
        "low": [
          {
            "group": "material:pla-filament",
            "part_id": "pla-filament",
            "offer_id": "amazon-b0cs2zsz6f",
            "observation_id": "amazon-2026-10-04",
            "packs": 1,
            "expenditure": 14.99,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:dupont-jumper-wire-kit",
            "part_id": "dupont-jumper-wire-kit",
            "offer_id": "amazon-b01ev70c78",
            "observation_id": "amazon-2026-10-04",
            "packs": 1,
            "expenditure": 6.98,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:dynamixel-xl330-m288-t",
            "part_id": "dynamixel-xl330-m288-t",
            "offer_id": "robotis-dynamixel-xl330-m288-t",
            "observation_id": "robotis-2026-10-04",
            "packs": 4,
            "expenditure": 109.96,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:dynamixel-xl430-w250-t",
            "part_id": "dynamixel-xl430-w250-t",
            "offer_id": "robotis-dynamixel-xl430-w250-t",
            "observation_id": "robotis-2026-10-04",
            "packs": 2,
            "expenditure": 55,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:psu-12v-5a-barrel",
            "part_id": "psu-12v-5a-barrel",
            "offer_id": "amazon-b0byvk73bp",
            "observation_id": "amazon-2026-10-04",
            "packs": 1,
            "expenditure": 11.99,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:robotis-fpx330-h101-idler",
            "part_id": "robotis-fpx330-h101-idler",
            "offer_id": "robotis-fpx330-h101-4pcs-set",
            "observation_id": "robotis-2026-10-04",
            "packs": 1,
            "expenditure": 11.27,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:robotis-hn11-i101-idler",
            "part_id": "robotis-hn11-i101-idler",
            "offer_id": "robotis-hn11-i101-set",
            "observation_id": "robotis-2026-10-04",
            "packs": 1,
            "expenditure": 8.05,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:serial-bus-servo-driver-board",
            "part_id": "serial-bus-servo-driver-board",
            "offer_id": "amazon-b0ctmm4lwk",
            "observation_id": "amazon-2026-10-04",
            "packs": 1,
            "expenditure": 12.47,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:small-bar-clamp",
            "part_id": "small-bar-clamp",
            "offer_id": "amazon-b092l925j4",
            "observation_id": "amazon-2026-10-04",
            "packs": 1,
            "expenditure": 7.95,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:usb-a-to-usb-c-cable",
            "part_id": "usb-a-to-usb-c-cable",
            "offer_id": "amazon-b0b8nwllw2",
            "observation_id": "amazon-2026-10-04",
            "packs": 1,
            "expenditure": 7.19,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          }
        ],
        "high": [
          {
            "group": "material:pla-filament",
            "part_id": "pla-filament",
            "offer_id": "amazon-b0cs2zsz6f",
            "observation_id": "amazon-2026-10-04",
            "packs": 1,
            "expenditure": 14.99,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:dupont-jumper-wire-kit",
            "part_id": "dupont-jumper-wire-kit",
            "offer_id": "amazon-b01ev70c78",
            "observation_id": "amazon-2026-10-04",
            "packs": 1,
            "expenditure": 6.98,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:dynamixel-xl330-m288-t",
            "part_id": "dynamixel-xl330-m288-t",
            "offer_id": "robotis-dynamixel-xl330-m288-t",
            "observation_id": "robotis-2026-10-04",
            "packs": 4,
            "expenditure": 109.96,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:dynamixel-xl430-w250-t",
            "part_id": "dynamixel-xl430-w250-t",
            "offer_id": "robotis-dynamixel-xl430-w250-t",
            "observation_id": "robotis-2026-10-04",
            "packs": 2,
            "expenditure": 55,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:psu-12v-5a-barrel",
            "part_id": "psu-12v-5a-barrel",
            "offer_id": "amazon-b0byvk73bp",
            "observation_id": "amazon-2026-10-04",
            "packs": 1,
            "expenditure": 11.99,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:robotis-fpx330-h101-idler",
            "part_id": "robotis-fpx330-h101-idler",
            "offer_id": "robotis-fpx330-h101-4pcs-set",
            "observation_id": "robotis-2026-10-04",
            "packs": 1,
            "expenditure": 11.27,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:robotis-hn11-i101-idler",
            "part_id": "robotis-hn11-i101-idler",
            "offer_id": "robotis-hn11-i101-set",
            "observation_id": "robotis-2026-10-04",
            "packs": 1,
            "expenditure": 8.05,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:serial-bus-servo-driver-board",
            "part_id": "serial-bus-servo-driver-board",
            "offer_id": "amazon-b0ctmm4lwk",
            "observation_id": "amazon-2026-10-04",
            "packs": 1,
            "expenditure": 12.47,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:small-bar-clamp",
            "part_id": "small-bar-clamp",
            "offer_id": "amazon-b0djnxf8wh",
            "observation_id": "amazon-2026-10-04",
            "packs": 1,
            "expenditure": 9.99,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:usb-a-to-usb-c-cable",
            "part_id": "usb-a-to-usb-c-cable",
            "offer_id": "amazon-b0b8nwllw2",
            "observation_id": "amazon-2026-10-04",
            "packs": 1,
            "expenditure": 7.19,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          }
        ]
      },
      "as_of_date": "2026-10-04",
      "computed_at": "2026-10-04",
      "tool_version": "0.7.0-draft.5",
      "tool_hash": "b3a901ff5bbade76fe67cecf535fd822a7fce97a6b33b761ac6a8bfc1edffc23"
    },
    {
      "configuration_id": "koch-follower-extension",
      "region": "US",
      "currency": "USD",
      "scenario_id": "owns-computer-and-printer",
      "layers": {
        "purchased_parts": {
          "low": 204.7,
          "high": 206.74,
          "required_groups": 6,
          "priced_groups": 6,
          "unpriced": [],
          "oldest_price_date": "2026-10-04",
          "newest_price_date": "2026-10-04"
        },
        "printed_parts": {
          "low": 14.99,
          "high": 14.99,
          "required_groups": 1,
          "priced_groups": 1,
          "unpriced": [],
          "oldest_price_date": "2026-10-04",
          "newest_price_date": "2026-10-04",
          "consumption_low": 1.29,
          "consumption_high": 1.51
        },
        "fabricated_parts": {
          "low": 0,
          "high": 0,
          "required_groups": 0,
          "priced_groups": 0,
          "unpriced": [],
          "oldest_price_date": null,
          "newest_price_date": null
        },
        "power_and_cabling": {
          "low": 26.16,
          "high": 26.16,
          "required_groups": 4,
          "priced_groups": 3,
          "unpriced": [
            "voltage-reducer"
          ],
          "oldest_price_date": "2026-10-04",
          "newest_price_date": "2026-10-04"
        },
        "host_compute": {
          "low": 0,
          "high": 0,
          "required_groups": 1,
          "priced_groups": 1,
          "unpriced": [],
          "oldest_price_date": null,
          "newest_price_date": null
        },
        "sensors_camera": {
          "low": 0,
          "high": 0,
          "required_groups": 0,
          "priced_groups": 0,
          "unpriced": [],
          "oldest_price_date": null,
          "newest_price_date": null
        },
        "tools": {
          "low": 0,
          "high": 0,
          "required_groups": 2,
          "priced_groups": 1,
          "unpriced": [
            "soldering"
          ],
          "oldest_price_date": null,
          "newest_price_date": null
        },
        "shipping_tax": {
          "low": 0,
          "high": 0,
          "required_groups": 1,
          "priced_groups": 0,
          "unpriced": [
            "shipping_tax"
          ],
          "oldest_price_date": null,
          "newest_price_date": null
        }
      },
      "labor_hours": {
        "value": null,
        "status": "unknown"
      },
      "bom_coverage": "partial",
      "pricing_coverage": {
        "required_groups": 12,
        "priced_groups": 10,
        "ratio": 0.8333,
        "unpriced": [
          "soldering",
          "voltage-reducer"
        ]
      },
      "setup_readiness": "incomplete",
      "parts_total": {
        "low": 245.85,
        "high": null,
        "complete": false,
        "gaps": [
          "voltage-reducer"
        ]
      },
      "required_total": {
        "low": 245.85,
        "high": null,
        "complete": false,
        "gaps": [
          "shipping_tax",
          "soldering",
          "voltage-reducer"
        ]
      },
      "price_dates": {
        "oldest": "2026-10-04",
        "newest": "2026-10-04",
        "upstream_reported_groups": []
      },
      "selected_observations": {
        "low": [
          {
            "group": "material:pla-filament",
            "part_id": "pla-filament",
            "offer_id": "amazon-b0cs2zsz6f",
            "observation_id": "amazon-2026-10-04",
            "packs": 1,
            "expenditure": 14.99,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:dupont-jumper-wire-kit",
            "part_id": "dupont-jumper-wire-kit",
            "offer_id": "amazon-b01ev70c78",
            "observation_id": "amazon-2026-10-04",
            "packs": 1,
            "expenditure": 6.98,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:dynamixel-xl330-m288-t",
            "part_id": "dynamixel-xl330-m288-t",
            "offer_id": "robotis-dynamixel-xl330-m288-t",
            "observation_id": "robotis-2026-10-04",
            "packs": 4,
            "expenditure": 109.96,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:dynamixel-xl430-w250-t",
            "part_id": "dynamixel-xl430-w250-t",
            "offer_id": "robotis-dynamixel-xl430-w250-t",
            "observation_id": "robotis-2026-10-04",
            "packs": 2,
            "expenditure": 55,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:psu-12v-5a-barrel",
            "part_id": "psu-12v-5a-barrel",
            "offer_id": "amazon-b0byvk73bp",
            "observation_id": "amazon-2026-10-04",
            "packs": 1,
            "expenditure": 11.99,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:robotis-fpx330-h101-idler",
            "part_id": "robotis-fpx330-h101-idler",
            "offer_id": "robotis-fpx330-h101-4pcs-set",
            "observation_id": "robotis-2026-10-04",
            "packs": 1,
            "expenditure": 11.27,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:robotis-hn11-i101-idler",
            "part_id": "robotis-hn11-i101-idler",
            "offer_id": "robotis-hn11-i101-set",
            "observation_id": "robotis-2026-10-04",
            "packs": 1,
            "expenditure": 8.05,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:serial-bus-servo-driver-board",
            "part_id": "serial-bus-servo-driver-board",
            "offer_id": "amazon-b0ctmm4lwk",
            "observation_id": "amazon-2026-10-04",
            "packs": 1,
            "expenditure": 12.47,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:small-bar-clamp",
            "part_id": "small-bar-clamp",
            "offer_id": "amazon-b092l925j4",
            "observation_id": "amazon-2026-10-04",
            "packs": 1,
            "expenditure": 7.95,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:usb-a-to-usb-c-cable",
            "part_id": "usb-a-to-usb-c-cable",
            "offer_id": "amazon-b0b8nwllw2",
            "observation_id": "amazon-2026-10-04",
            "packs": 1,
            "expenditure": 7.19,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          }
        ],
        "high": [
          {
            "group": "material:pla-filament",
            "part_id": "pla-filament",
            "offer_id": "amazon-b0cs2zsz6f",
            "observation_id": "amazon-2026-10-04",
            "packs": 1,
            "expenditure": 14.99,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:dupont-jumper-wire-kit",
            "part_id": "dupont-jumper-wire-kit",
            "offer_id": "amazon-b01ev70c78",
            "observation_id": "amazon-2026-10-04",
            "packs": 1,
            "expenditure": 6.98,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:dynamixel-xl330-m288-t",
            "part_id": "dynamixel-xl330-m288-t",
            "offer_id": "robotis-dynamixel-xl330-m288-t",
            "observation_id": "robotis-2026-10-04",
            "packs": 4,
            "expenditure": 109.96,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:dynamixel-xl430-w250-t",
            "part_id": "dynamixel-xl430-w250-t",
            "offer_id": "robotis-dynamixel-xl430-w250-t",
            "observation_id": "robotis-2026-10-04",
            "packs": 2,
            "expenditure": 55,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:psu-12v-5a-barrel",
            "part_id": "psu-12v-5a-barrel",
            "offer_id": "amazon-b0byvk73bp",
            "observation_id": "amazon-2026-10-04",
            "packs": 1,
            "expenditure": 11.99,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:robotis-fpx330-h101-idler",
            "part_id": "robotis-fpx330-h101-idler",
            "offer_id": "robotis-fpx330-h101-4pcs-set",
            "observation_id": "robotis-2026-10-04",
            "packs": 1,
            "expenditure": 11.27,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:robotis-hn11-i101-idler",
            "part_id": "robotis-hn11-i101-idler",
            "offer_id": "robotis-hn11-i101-set",
            "observation_id": "robotis-2026-10-04",
            "packs": 1,
            "expenditure": 8.05,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:serial-bus-servo-driver-board",
            "part_id": "serial-bus-servo-driver-board",
            "offer_id": "amazon-b0ctmm4lwk",
            "observation_id": "amazon-2026-10-04",
            "packs": 1,
            "expenditure": 12.47,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:small-bar-clamp",
            "part_id": "small-bar-clamp",
            "offer_id": "amazon-b0djnxf8wh",
            "observation_id": "amazon-2026-10-04",
            "packs": 1,
            "expenditure": 9.99,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          },
          {
            "group": "part:usb-a-to-usb-c-cable",
            "part_id": "usb-a-to-usb-c-cable",
            "offer_id": "amazon-b0b8nwllw2",
            "observation_id": "amazon-2026-10-04",
            "packs": 1,
            "expenditure": 7.19,
            "check_method": "manual",
            "price_observed_at": "2026-10-04"
          }
        ]
      },
      "as_of_date": "2026-10-04",
      "computed_at": "2026-10-04",
      "tool_version": "0.7.0-draft.5",
      "tool_hash": "b3a901ff5bbade76fe67cecf535fd822a7fce97a6b33b761ac6a8bfc1edffc23"
    }
  ],
  "parts": {
    "dupont-jumper-wire-kit": {
      "name": "Dupont jumper wire kit (M-F, M-M, F-F)",
      "unit": "each",
      "spec_summary": "Assorted 20 cm Dupont jumper wires, 120 pieces.",
      "manufacturer": null,
      "mpn": null,
      "identity_sources": [
        "S001",
        "S003"
      ],
      "substitutes": [],
      "notes": "",
      "sources": [
        {
          "id": "S001",
          "type": "upstream",
          "title": "Koch low_cost_robot README bill of materials",
          "url": "https://github.com/AlexanderKoch-Koch/low_cost_robot/blob/0602b0c1e6a67d8f6ab96f81d1378639018d98af/README.md",
          "publisher": "Alexander Koch",
          "locator": "Follower Arm / Leader Arm: Required Materials",
          "finding": "Lists parts, costs and purchase links for the follower and leader arms.",
          "accessed_at": "2026-10-04"
        },
        {
          "id": "S002",
          "type": "upstream",
          "title": "Koch README commit history and price presence scan",
          "url": "https://github.com/AlexanderKoch-Koch/low_cost_robot/commits/main/README.md",
          "publisher": "Alexander Koch",
          "locator": "Commits touching README.md; presence of the cost figures at each revision",
          "finding": "The cost figures are present in every revision from 265535c (2024-04-07) to the newest.",
          "accessed_at": "2026-10-04",
          "attribution_note": "Scan produced with the GitHub contents API on 2026-10-04."
        },
        {
          "id": "S003",
          "type": "vendor",
          "title": "ELEGOO 120pcs Multicolored Dupont Wire M-F, M-M, F-F for Breadboard Jumper",
          "url": "https://www.amazon.com/dp/B01EV70C78",
          "publisher": "Amazon.com",
          "locator": "Buy box captured for listing \"dupont-jumper-wires-elegoo\"",
          "finding": "Current price, availability and seller as displayed.",
          "accessed_at": "2026-10-04",
          "attribution_note": "Captured in the built-in browser; scripted fetches received CAPTCHA pages, which were not bypassed."
        }
      ],
      "offers": [
        {
          "offer_id": "upstream-koch-readme",
          "supplier": "Amazon listing linked from Koch README",
          "url": "https://www.amazon.com/dp/B01EV70C78",
          "region": "US",
          "observations": [
            {
              "observation_id": "koch-readme-0602b0c",
              "currency": "USD",
              "pack_price": 7,
              "pack_qty": 1,
              "moq_packs": 1,
              "stock": "unknown",
              "source_checked_at": "2026-10-04",
              "price_observed_at": "2024-04-07",
              "price_date_basis": "earliest_unbroken_revision",
              "stock_observed_at": null,
              "check_method": "upstream_reported",
              "link_status": "unknown",
              "source_ids": [
                "S001",
                "S002"
              ],
              "shipping_note": "Upstream table states item prices only; delivery and tax not stated.",
              "notes": "Koch README \"Required Materials\" cost column at pinned revision 0602b0c. The figures ($258 and $183 totals; $100 for 2 XL430, $96 for 4 XL330-M288, $144 for 6 XL330-M077) are present in every README revision from 265535c (2024-04-07) to the newest (retained source evidence), so the price is dated to that earliest revision. Per-unit figures divide the listed line cost by its quantity."
            }
          ]
        },
        {
          "offer_id": "amazon-b01ev70c78",
          "supplier": "ELEGOO Official US",
          "url": "https://www.amazon.com/dp/B01EV70C78",
          "region": "US",
          "observations": [
            {
              "observation_id": "amazon-2026-10-04",
              "currency": "USD",
              "pack_price": 6.98,
              "pack_qty": 1,
              "moq_packs": 1,
              "stock": "in_stock",
              "source_checked_at": "2026-10-04",
              "price_observed_at": "2026-10-04",
              "stock_observed_at": "2026-10-04",
              "check_method": "manual",
              "link_status": "working",
              "source_ids": [
                "S003"
              ],
              "shipping_note": "Amazon US listing; shipping and sales tax depend on address and membership, not established.",
              "notes": "Buy box read on 2026-10-04; seller: ELEGOO Official US; availability: In Stock. Upstream short link https://a.co/d/hQfk2cb."
            }
          ]
        }
      ]
    },
    "dynamixel-xl330-m077-t": {
      "name": "DYNAMIXEL XL330-M077-T",
      "unit": "each",
      "spec_summary": "ROBOTIS DYNAMIXEL XL330-M077-T TTL servo; package includes cable and horn/frame bolts.",
      "manufacturer": "ROBOTIS",
      "mpn": "XL330-M077-T",
      "identity_sources": [
        "S001",
        "S003"
      ],
      "substitutes": [],
      "notes": "",
      "sources": [
        {
          "id": "S001",
          "type": "upstream",
          "title": "Koch low_cost_robot README bill of materials",
          "url": "https://github.com/AlexanderKoch-Koch/low_cost_robot/blob/0602b0c1e6a67d8f6ab96f81d1378639018d98af/README.md",
          "publisher": "Alexander Koch",
          "locator": "Follower Arm / Leader Arm: Required Materials",
          "finding": "Lists parts, costs and purchase links for the follower and leader arms.",
          "accessed_at": "2026-10-04"
        },
        {
          "id": "S002",
          "type": "upstream",
          "title": "Koch README commit history and price presence scan",
          "url": "https://github.com/AlexanderKoch-Koch/low_cost_robot/commits/main/README.md",
          "publisher": "Alexander Koch",
          "locator": "Commits touching README.md; presence of the cost figures at each revision",
          "finding": "The cost figures are present in every revision from 265535c (2024-04-07) to the newest.",
          "accessed_at": "2026-10-04",
          "attribution_note": "Scan produced with the GitHub contents API on 2026-10-04."
        },
        {
          "id": "S003",
          "type": "vendor",
          "title": "DYNAMIXEL XL330-M077-T",
          "url": "https://www.robotis.us/dynamixel-xl330-m077-t/",
          "publisher": "ROBOTIS AMERICA",
          "locator": "Product structured data (schema.org Offer) and package contents",
          "finding": "Price, availability and package contents in the product page.",
          "accessed_at": "2026-10-04"
        }
      ],
      "offers": [
        {
          "offer_id": "upstream-koch-readme",
          "supplier": "ROBOTIS America (linked from Koch README)",
          "url": "https://www.robotis.us/dynamixel-xl330-m077-t/",
          "region": "US",
          "observations": [
            {
              "observation_id": "koch-readme-0602b0c",
              "currency": "USD",
              "pack_price": 24,
              "pack_qty": 1,
              "moq_packs": 1,
              "stock": "unknown",
              "source_checked_at": "2026-10-04",
              "price_observed_at": "2024-04-07",
              "price_date_basis": "earliest_unbroken_revision",
              "stock_observed_at": null,
              "check_method": "upstream_reported",
              "link_status": "unknown",
              "source_ids": [
                "S001",
                "S002"
              ],
              "shipping_note": "Upstream table states item prices only; delivery and tax not stated.",
              "notes": "Koch README \"Required Materials\" cost column at pinned revision 0602b0c. The figures ($258 and $183 totals; $100 for 2 XL430, $96 for 4 XL330-M288, $144 for 6 XL330-M077) are present in every README revision from 265535c (2024-04-07) to the newest (retained source evidence), so the price is dated to that earliest revision. Per-unit figures divide the listed line cost by its quantity."
            }
          ]
        },
        {
          "offer_id": "robotis-dynamixel-xl330-m077-t",
          "supplier": "ROBOTIS America",
          "url": "https://www.robotis.us/dynamixel-xl330-m077-t/",
          "region": "US",
          "observations": [
            {
              "observation_id": "robotis-2026-10-04",
              "currency": "USD",
              "pack_price": 27.49,
              "pack_qty": 1,
              "moq_packs": 1,
              "stock": "in_stock",
              "source_checked_at": "2026-10-04",
              "price_observed_at": "2026-10-04",
              "stock_observed_at": "2026-10-04",
              "check_method": "manual",
              "link_status": "working",
              "source_ids": [
                "S003"
              ],
              "shipping_note": "ROBOTIS America US store; shipping calculated at checkout, not established.",
              "notes": "schema.org Offer price 27.49 USD, availability http://schema.org/InStock."
            }
          ]
        }
      ]
    },
    "dynamixel-xl330-m288-t": {
      "name": "DYNAMIXEL XL330-M288-T",
      "unit": "each",
      "spec_summary": "ROBOTIS DYNAMIXEL XL330-M288-T TTL servo; package includes cable and horn/frame bolts.",
      "manufacturer": "ROBOTIS",
      "mpn": "XL330-M288-T",
      "identity_sources": [
        "S001",
        "S003"
      ],
      "substitutes": [],
      "notes": "",
      "sources": [
        {
          "id": "S001",
          "type": "upstream",
          "title": "Koch low_cost_robot README bill of materials",
          "url": "https://github.com/AlexanderKoch-Koch/low_cost_robot/blob/0602b0c1e6a67d8f6ab96f81d1378639018d98af/README.md",
          "publisher": "Alexander Koch",
          "locator": "Follower Arm / Leader Arm: Required Materials",
          "finding": "Lists parts, costs and purchase links for the follower and leader arms.",
          "accessed_at": "2026-10-04"
        },
        {
          "id": "S002",
          "type": "upstream",
          "title": "Koch README commit history and price presence scan",
          "url": "https://github.com/AlexanderKoch-Koch/low_cost_robot/commits/main/README.md",
          "publisher": "Alexander Koch",
          "locator": "Commits touching README.md; presence of the cost figures at each revision",
          "finding": "The cost figures are present in every revision from 265535c (2024-04-07) to the newest.",
          "accessed_at": "2026-10-04",
          "attribution_note": "Scan produced with the GitHub contents API on 2026-10-04."
        },
        {
          "id": "S003",
          "type": "vendor",
          "title": "DYNAMIXEL XL330-M288-T",
          "url": "https://www.robotis.us/dynamixel-xl330-m288-t/",
          "publisher": "ROBOTIS AMERICA",
          "locator": "Product structured data (schema.org Offer) and package contents",
          "finding": "Price, availability and package contents in the product page.",
          "accessed_at": "2026-10-04"
        }
      ],
      "offers": [
        {
          "offer_id": "upstream-koch-readme",
          "supplier": "ROBOTIS America (linked from Koch README)",
          "url": "https://www.robotis.us/dynamixel-xl330-m288-t/",
          "region": "US",
          "observations": [
            {
              "observation_id": "koch-readme-0602b0c",
              "currency": "USD",
              "pack_price": 24,
              "pack_qty": 1,
              "moq_packs": 1,
              "stock": "unknown",
              "source_checked_at": "2026-10-04",
              "price_observed_at": "2024-04-07",
              "price_date_basis": "earliest_unbroken_revision",
              "stock_observed_at": null,
              "check_method": "upstream_reported",
              "link_status": "unknown",
              "source_ids": [
                "S001",
                "S002"
              ],
              "shipping_note": "Upstream table states item prices only; delivery and tax not stated.",
              "notes": "Koch README \"Required Materials\" cost column at pinned revision 0602b0c. The figures ($258 and $183 totals; $100 for 2 XL430, $96 for 4 XL330-M288, $144 for 6 XL330-M077) are present in every README revision from 265535c (2024-04-07) to the newest (retained source evidence), so the price is dated to that earliest revision. Per-unit figures divide the listed line cost by its quantity."
            }
          ]
        },
        {
          "offer_id": "robotis-dynamixel-xl330-m288-t",
          "supplier": "ROBOTIS America",
          "url": "https://www.robotis.us/dynamixel-xl330-m288-t/",
          "region": "US",
          "observations": [
            {
              "observation_id": "robotis-2026-10-04",
              "currency": "USD",
              "pack_price": 27.49,
              "pack_qty": 1,
              "moq_packs": 1,
              "stock": "in_stock",
              "source_checked_at": "2026-10-04",
              "price_observed_at": "2026-10-04",
              "stock_observed_at": "2026-10-04",
              "check_method": "manual",
              "link_status": "working",
              "source_ids": [
                "S003"
              ],
              "shipping_note": "ROBOTIS America US store; shipping calculated at checkout, not established.",
              "notes": "schema.org Offer price 27.49 USD, availability http://schema.org/InStock."
            }
          ]
        }
      ]
    },
    "dynamixel-xl430-w250-t": {
      "name": "DYNAMIXEL XL430-W250-T",
      "unit": "each",
      "spec_summary": "ROBOTIS DYNAMIXEL XL430-W250-T TTL servo; package includes cable, horn/frame bolts and spacers.",
      "manufacturer": "ROBOTIS",
      "mpn": "902-0135-000",
      "identity_sources": [
        "S001",
        "S003"
      ],
      "substitutes": [],
      "notes": "",
      "sources": [
        {
          "id": "S001",
          "type": "upstream",
          "title": "Koch low_cost_robot README bill of materials",
          "url": "https://github.com/AlexanderKoch-Koch/low_cost_robot/blob/0602b0c1e6a67d8f6ab96f81d1378639018d98af/README.md",
          "publisher": "Alexander Koch",
          "locator": "Follower Arm / Leader Arm: Required Materials",
          "finding": "Lists parts, costs and purchase links for the follower and leader arms.",
          "accessed_at": "2026-10-04"
        },
        {
          "id": "S002",
          "type": "upstream",
          "title": "Koch README commit history and price presence scan",
          "url": "https://github.com/AlexanderKoch-Koch/low_cost_robot/commits/main/README.md",
          "publisher": "Alexander Koch",
          "locator": "Commits touching README.md; presence of the cost figures at each revision",
          "finding": "The cost figures are present in every revision from 265535c (2024-04-07) to the newest.",
          "accessed_at": "2026-10-04",
          "attribution_note": "Scan produced with the GitHub contents API on 2026-10-04."
        },
        {
          "id": "S003",
          "type": "vendor",
          "title": "DYNAMIXEL XL430-W250-T",
          "url": "https://www.robotis.us/dynamixel-xl430-w250-t/",
          "publisher": "ROBOTIS AMERICA",
          "locator": "Product structured data (schema.org Offer) and package contents",
          "finding": "Price, availability and package contents in the product page.",
          "accessed_at": "2026-10-04"
        }
      ],
      "offers": [
        {
          "offer_id": "upstream-koch-readme",
          "supplier": "ROBOTIS America (linked from Koch README)",
          "url": "https://www.robotis.us/dynamixel-xl430-w250-t/",
          "region": "US",
          "observations": [
            {
              "observation_id": "koch-readme-0602b0c",
              "currency": "USD",
              "pack_price": 50,
              "pack_qty": 1,
              "moq_packs": 1,
              "stock": "unknown",
              "source_checked_at": "2026-10-04",
              "price_observed_at": "2024-04-07",
              "price_date_basis": "earliest_unbroken_revision",
              "stock_observed_at": null,
              "check_method": "upstream_reported",
              "link_status": "unknown",
              "source_ids": [
                "S001",
                "S002"
              ],
              "shipping_note": "Upstream table states item prices only; delivery and tax not stated.",
              "notes": "Koch README \"Required Materials\" cost column at pinned revision 0602b0c. The figures ($258 and $183 totals; $100 for 2 XL430, $96 for 4 XL330-M288, $144 for 6 XL330-M077) are present in every README revision from 265535c (2024-04-07) to the newest (retained source evidence), so the price is dated to that earliest revision. Per-unit figures divide the listed line cost by its quantity."
            }
          ]
        },
        {
          "offer_id": "robotis-dynamixel-xl430-w250-t",
          "supplier": "ROBOTIS America",
          "url": "https://www.robotis.us/dynamixel-xl430-w250-t/",
          "region": "US",
          "observations": [
            {
              "observation_id": "robotis-2026-10-04",
              "currency": "USD",
              "pack_price": 27.5,
              "pack_qty": 1,
              "moq_packs": 1,
              "stock": "in_stock",
              "source_checked_at": "2026-10-04",
              "price_observed_at": "2026-10-04",
              "stock_observed_at": "2026-10-04",
              "check_method": "manual",
              "link_status": "working",
              "source_ids": [
                "S003"
              ],
              "shipping_note": "ROBOTIS America US store; shipping calculated at checkout, not established.",
              "notes": "schema.org Offer price 27.50 USD, availability http://schema.org/InStock."
            }
          ]
        }
      ]
    },
    "fdm-3d-printer": {
      "name": "FDM 3D printer (220 x 220 mm bed or larger)",
      "unit": "each",
      "spec_summary": "FDM printer with at least a 220 x 220 mm bed (upstream also lists 205 x 250 mm beds).",
      "manufacturer": null,
      "mpn": null,
      "identity_sources": [
        "S001"
      ],
      "substitutes": [],
      "notes": "Required only for the self-print route; reference option not yet chosen.",
      "sources": [
        {
          "id": "S001",
          "type": "upstream",
          "title": "SO-ARM100 README bill of materials",
          "url": "https://github.com/TheRobotStudio/SO-ARM100/blob/5f6d2b876a53a4872e405b991dd925556c9e38a4/README.md",
          "publisher": "TheRobotStudio",
          "locator": "Sourcing Parts: Parts for One Follower Arm; Parts For Two Arms",
          "finding": "Lists part names, amounts and US unit costs with purchase links.",
          "accessed_at": "2026-10-04"
        }
      ],
      "offers": []
    },
    "host-computer-lerobot": {
      "name": "Host computer able to run LeRobot",
      "unit": "each",
      "spec_summary": "Computer with USB that runs the LeRobot environment; no specific model selected.",
      "manufacturer": null,
      "mpn": null,
      "identity_sources": [
        "S001"
      ],
      "substitutes": [],
      "notes": "Reference option not yet chosen; required unless already owned.",
      "sources": [
        {
          "id": "S001",
          "type": "upstream",
          "title": "SO-ARM100 README bill of materials",
          "url": "https://github.com/TheRobotStudio/SO-ARM100/blob/5f6d2b876a53a4872e405b991dd925556c9e38a4/README.md",
          "publisher": "TheRobotStudio",
          "locator": "Sourcing Parts: Parts for One Follower Arm; Parts For Two Arms",
          "finding": "Lists part names, amounts and US unit costs with purchase links.",
          "accessed_at": "2026-10-04"
        }
      ],
      "offers": []
    },
    "lm2596-buck-converter": {
      "name": "LM2596 adjustable buck converter module",
      "unit": "each",
      "spec_summary": "LM2596S DC-DC step-down module, 3 A, adjustable output; sold as a 6-pack.",
      "manufacturer": null,
      "mpn": null,
      "identity_sources": [
        "S001",
        "S003"
      ],
      "substitutes": [],
      "notes": "Koch uses one per follower to reduce 12 V to 5 V for the XL330 chain.",
      "sources": [
        {
          "id": "S001",
          "type": "upstream",
          "title": "Koch low_cost_robot README bill of materials",
          "url": "https://github.com/AlexanderKoch-Koch/low_cost_robot/blob/0602b0c1e6a67d8f6ab96f81d1378639018d98af/README.md",
          "publisher": "Alexander Koch",
          "locator": "Follower Arm / Leader Arm: Required Materials",
          "finding": "Lists parts, costs and purchase links for the follower and leader arms.",
          "accessed_at": "2026-10-04"
        },
        {
          "id": "S002",
          "type": "upstream",
          "title": "Koch README commit history and price presence scan",
          "url": "https://github.com/AlexanderKoch-Koch/low_cost_robot/commits/main/README.md",
          "publisher": "Alexander Koch",
          "locator": "Commits touching README.md; presence of the cost figures at each revision",
          "finding": "The cost figures are present in every revision from 265535c (2024-04-07) to the newest.",
          "accessed_at": "2026-10-04",
          "attribution_note": "Scan produced with the GitHub contents API on 2026-10-04."
        },
        {
          "id": "S003",
          "type": "vendor",
          "title": "Queta 6 Pieces LM2596s DC to DC Buck Converter Step Down Voltage Regulator Power Module 3.2-40V to 1.25-35V 3A High Efficiency DC Voltage Stabilizer Volt Transformer LM2596 DC-DC Buck Converter",
          "url": "https://www.amazon.com/dp/B08G4GYNL6",
          "publisher": "Amazon.com",
          "locator": "Buy box captured for listing \"voltage-reducer-lm2596-6pack\"",
          "finding": "Current price, availability and seller as displayed.",
          "accessed_at": "2026-10-04",
          "attribution_note": "Captured in the built-in browser; scripted fetches received CAPTCHA pages, which were not bypassed."
        }
      ],
      "offers": [
        {
          "offer_id": "upstream-koch-readme",
          "supplier": "Amazon listing linked from Koch README",
          "url": "https://www.amazon.com/dp/B08G4GYNL6",
          "region": "US",
          "observations": [
            {
              "observation_id": "koch-readme-0602b0c",
              "currency": "USD",
              "pack_price": 10,
              "pack_qty": 6,
              "moq_packs": 1,
              "stock": "unknown",
              "source_checked_at": "2026-10-04",
              "price_observed_at": "2024-04-07",
              "price_date_basis": "earliest_unbroken_revision",
              "stock_observed_at": null,
              "check_method": "upstream_reported",
              "link_status": "unknown",
              "source_ids": [
                "S001",
                "S002"
              ],
              "shipping_note": "Upstream table states item prices only; delivery and tax not stated.",
              "notes": "Koch README \"Required Materials\" cost column at pinned revision 0602b0c. The figures ($258 and $183 totals; $100 for 2 XL430, $96 for 4 XL330-M288, $144 for 6 XL330-M077) are present in every README revision from 265535c (2024-04-07) to the newest (retained source evidence), so the price is dated to that earliest revision. Per-unit figures divide the listed line cost by its quantity."
            }
          ]
        },
        {
          "offer_id": "amazon-b08g4gynl6",
          "supplier": "Amazon.com marketplace (no featured offer)",
          "url": "https://www.amazon.com/dp/B08G4GYNL6",
          "region": "US",
          "observations": [
            {
              "observation_id": "amazon-2026-10-04",
              "currency": "USD",
              "pack_price": null,
              "pack_qty": 6,
              "moq_packs": 1,
              "stock": "out_of_stock",
              "source_checked_at": "2026-10-04",
              "price_observed_at": null,
              "stock_observed_at": "2026-10-04",
              "check_method": "manual",
              "link_status": "working",
              "source_ids": [
                "S003"
              ],
              "shipping_note": "Amazon US listing; shipping and sales tax depend on address and membership, not established.",
              "notes": "Buy box read on 2026-10-04; seller: None; availability: Currently unavailable. We don't know when or if this item will be back in stock.. Upstream short link https://a.co/d/cy02ADW."
            }
          ]
        }
      ]
    },
    "pla-filament": {
      "name": "PLA filament, 1.75 mm",
      "unit": "g",
      "spec_summary": "Generic PLA filament, 1.75 mm; any colour.",
      "manufacturer": null,
      "mpn": null,
      "identity_sources": [
        "S001"
      ],
      "substitutes": [],
      "notes": "Unit is grams; a 1 kg spool is a pack of 1000.",
      "sources": [
        {
          "id": "S001",
          "type": "vendor",
          "title": "eSUN PLA Basic Filament 1.75mm 3D Printer Filament 1KG Silver",
          "url": "https://www.amazon.com/dp/B0CS2ZSZ6F",
          "publisher": "Amazon.com",
          "locator": "Buy box captured for listing \"filament-esun-pla-basic-1kg\"",
          "finding": "Current price, availability and seller as displayed.",
          "accessed_at": "2026-10-04",
          "attribution_note": "Captured in the built-in browser; scripted fetches received CAPTCHA pages, which were not bypassed."
        }
      ],
      "offers": [
        {
          "offer_id": "amazon-b0cs2zsz6f",
          "supplier": "eSUN official Store",
          "url": "https://www.amazon.com/dp/B0CS2ZSZ6F",
          "region": "US",
          "observations": [
            {
              "observation_id": "amazon-2026-10-04",
              "currency": "USD",
              "pack_price": 14.99,
              "pack_qty": 1000,
              "moq_packs": 1,
              "stock": "in_stock",
              "source_checked_at": "2026-10-04",
              "price_observed_at": "2026-10-04",
              "stock_observed_at": "2026-10-04",
              "check_method": "manual",
              "link_status": "working",
              "source_ids": [
                "S001"
              ],
              "shipping_note": "Amazon US listing; shipping and sales tax depend on address and membership, not established.",
              "notes": "Buy box read on 2026-10-04; seller: eSUN official Store; variants: Silver, 1KG."
            }
          ]
        }
      ]
    },
    "psu-12v-5a-barrel": {
      "name": "12 V 5 A power supply, barrel plug",
      "unit": "each",
      "spec_summary": "12 V DC, 5 A wall adapter with barrel plug.",
      "manufacturer": null,
      "mpn": null,
      "identity_sources": [
        "S001",
        "S003"
      ],
      "substitutes": [],
      "notes": "",
      "sources": [
        {
          "id": "S001",
          "type": "upstream",
          "title": "Koch low_cost_robot README bill of materials",
          "url": "https://github.com/AlexanderKoch-Koch/low_cost_robot/blob/0602b0c1e6a67d8f6ab96f81d1378639018d98af/README.md",
          "publisher": "Alexander Koch",
          "locator": "Follower Arm / Leader Arm: Required Materials",
          "finding": "Lists parts, costs and purchase links for the follower and leader arms.",
          "accessed_at": "2026-10-04"
        },
        {
          "id": "S002",
          "type": "upstream",
          "title": "Koch README commit history and price presence scan",
          "url": "https://github.com/AlexanderKoch-Koch/low_cost_robot/commits/main/README.md",
          "publisher": "Alexander Koch",
          "locator": "Commits touching README.md; presence of the cost figures at each revision",
          "finding": "The cost figures are present in every revision from 265535c (2024-04-07) to the newest.",
          "accessed_at": "2026-10-04",
          "attribution_note": "Scan produced with the GitHub contents API on 2026-10-04."
        },
        {
          "id": "S003",
          "type": "vendor",
          "title": "Facmogu 12V 5A Power Supply Adapter, AC 100-240V to DC 12V Converter",
          "url": "https://www.amazon.com/dp/B0BYVK73BP",
          "publisher": "Amazon.com",
          "locator": "Buy box captured for listing \"psu-12v-5a-facmogu\"",
          "finding": "Current price, availability and seller as displayed.",
          "accessed_at": "2026-10-04",
          "attribution_note": "Captured in the built-in browser; scripted fetches received CAPTCHA pages, which were not bypassed."
        }
      ],
      "offers": [
        {
          "offer_id": "upstream-koch-readme",
          "supplier": "Amazon listing linked from Koch README",
          "url": "https://www.amazon.com/dp/B0BYVK73BP",
          "region": "US",
          "observations": [
            {
              "observation_id": "koch-readme-0602b0c",
              "currency": "USD",
              "pack_price": 12,
              "pack_qty": 1,
              "moq_packs": 1,
              "stock": "unknown",
              "source_checked_at": "2026-10-04",
              "price_observed_at": "2024-04-07",
              "price_date_basis": "earliest_unbroken_revision",
              "stock_observed_at": null,
              "check_method": "upstream_reported",
              "link_status": "unknown",
              "source_ids": [
                "S001",
                "S002"
              ],
              "shipping_note": "Upstream table states item prices only; delivery and tax not stated.",
              "notes": "Koch README \"Required Materials\" cost column at pinned revision 0602b0c. The figures ($258 and $183 totals; $100 for 2 XL430, $96 for 4 XL330-M288, $144 for 6 XL330-M077) are present in every README revision from 265535c (2024-04-07) to the newest (retained source evidence), so the price is dated to that earliest revision. Per-unit figures divide the listed line cost by its quantity."
            }
          ]
        },
        {
          "offer_id": "amazon-b0byvk73bp",
          "supplier": "Mo-gu",
          "url": "https://www.amazon.com/dp/B0BYVK73BP",
          "region": "US",
          "observations": [
            {
              "observation_id": "amazon-2026-10-04",
              "currency": "USD",
              "pack_price": 11.99,
              "pack_qty": 1,
              "moq_packs": 1,
              "stock": "low",
              "source_checked_at": "2026-10-04",
              "price_observed_at": "2026-10-04",
              "stock_observed_at": "2026-10-04",
              "check_method": "manual",
              "link_status": "working",
              "source_ids": [
                "S003"
              ],
              "shipping_note": "Amazon US listing; shipping and sales tax depend on address and membership, not established.",
              "notes": "Buy box read on 2026-10-04; seller: Mo-gu; availability: Only 14 left in stock - order soon.. Upstream short link https://a.co/d/40o8uMN."
            }
          ]
        }
      ]
    },
    "psu-5v-2a-barrel": {
      "name": "5 V 2 A power supply, barrel plug",
      "unit": "each",
      "spec_summary": "5 V DC, 2 A wall adapter with 5.5 mm barrel plug.",
      "manufacturer": null,
      "mpn": null,
      "identity_sources": [
        "S001",
        "S003"
      ],
      "substitutes": [],
      "notes": "",
      "sources": [
        {
          "id": "S001",
          "type": "upstream",
          "title": "Koch low_cost_robot README bill of materials",
          "url": "https://github.com/AlexanderKoch-Koch/low_cost_robot/blob/0602b0c1e6a67d8f6ab96f81d1378639018d98af/README.md",
          "publisher": "Alexander Koch",
          "locator": "Follower Arm / Leader Arm: Required Materials",
          "finding": "Lists parts, costs and purchase links for the follower and leader arms.",
          "accessed_at": "2026-10-04"
        },
        {
          "id": "S002",
          "type": "upstream",
          "title": "Koch README commit history and price presence scan",
          "url": "https://github.com/AlexanderKoch-Koch/low_cost_robot/commits/main/README.md",
          "publisher": "Alexander Koch",
          "locator": "Commits touching README.md; presence of the cost figures at each revision",
          "finding": "The cost figures are present in every revision from 265535c (2024-04-07) to the newest.",
          "accessed_at": "2026-10-04",
          "attribution_note": "Scan produced with the GitHub contents API on 2026-10-04."
        },
        {
          "id": "S003",
          "type": "vendor",
          "title": "5V 2A Power Adapter Supply 10W DC 5V 2A 1.5A 1A Wall Plug Power Cord",
          "url": "https://www.amazon.com/dp/B0BZS779MC",
          "publisher": "Amazon.com",
          "locator": "Buy box captured for listing \"psu-5v-2a\"",
          "finding": "Current price, availability and seller as displayed.",
          "accessed_at": "2026-10-04",
          "attribution_note": "Captured in the built-in browser; scripted fetches received CAPTCHA pages, which were not bypassed."
        }
      ],
      "offers": [
        {
          "offer_id": "upstream-koch-readme",
          "supplier": "Amazon listing linked from Koch README",
          "url": "https://www.amazon.com/dp/B0BZS779MC",
          "region": "US",
          "observations": [
            {
              "observation_id": "koch-readme-0602b0c",
              "currency": "USD",
              "pack_price": 6,
              "pack_qty": 1,
              "moq_packs": 1,
              "stock": "unknown",
              "source_checked_at": "2026-10-04",
              "price_observed_at": "2024-04-07",
              "price_date_basis": "earliest_unbroken_revision",
              "stock_observed_at": null,
              "check_method": "upstream_reported",
              "link_status": "unknown",
              "source_ids": [
                "S001",
                "S002"
              ],
              "shipping_note": "Upstream table states item prices only; delivery and tax not stated.",
              "notes": "Koch README \"Required Materials\" cost column at pinned revision 0602b0c. The figures ($258 and $183 totals; $100 for 2 XL430, $96 for 4 XL330-M288, $144 for 6 XL330-M077) are present in every README revision from 265535c (2024-04-07) to the newest (retained source evidence), so the price is dated to that earliest revision. Per-unit figures divide the listed line cost by its quantity."
            }
          ]
        },
        {
          "offer_id": "amazon-b0bzs779mc",
          "supplier": "GUOHONGZHAN",
          "url": "https://www.amazon.com/dp/B0BZS779MC",
          "region": "US",
          "observations": [
            {
              "observation_id": "amazon-2026-10-04",
              "currency": "USD",
              "pack_price": 6.39,
              "pack_qty": 1,
              "moq_packs": 1,
              "stock": "in_stock",
              "source_checked_at": "2026-10-04",
              "price_observed_at": "2026-10-04",
              "stock_observed_at": "2026-10-04",
              "check_method": "manual",
              "link_status": "working",
              "source_ids": [
                "S003"
              ],
              "shipping_note": "Amazon US listing; shipping and sales tax depend on address and membership, not established.",
              "notes": "Buy box read on 2026-10-04; seller: GUOHONGZHAN; availability: In Stock. Upstream short link https://a.co/d/5u90NVp."
            }
          ]
        }
      ]
    },
    "robotis-fpx330-h101-idler": {
      "name": "ROBOTIS FPX330-H101 hinge frame and idler (per idler)",
      "unit": "each",
      "spec_summary": "X330 hinge frame with idler, sold as a set of four with bolts and nuts.",
      "manufacturer": "ROBOTIS",
      "mpn": "FPX330-H101",
      "identity_sources": [
        "S001",
        "S003"
      ],
      "substitutes": [],
      "notes": "Unit is one hinge frame + idler; the set is a pack of four.",
      "sources": [
        {
          "id": "S001",
          "type": "upstream",
          "title": "Koch low_cost_robot README bill of materials",
          "url": "https://github.com/AlexanderKoch-Koch/low_cost_robot/blob/0602b0c1e6a67d8f6ab96f81d1378639018d98af/README.md",
          "publisher": "Alexander Koch",
          "locator": "Follower Arm / Leader Arm: Required Materials",
          "finding": "Lists parts, costs and purchase links for the follower and leader arms.",
          "accessed_at": "2026-10-04"
        },
        {
          "id": "S002",
          "type": "upstream",
          "title": "Koch README commit history and price presence scan",
          "url": "https://github.com/AlexanderKoch-Koch/low_cost_robot/commits/main/README.md",
          "publisher": "Alexander Koch",
          "locator": "Commits touching README.md; presence of the cost figures at each revision",
          "finding": "The cost figures are present in every revision from 265535c (2024-04-07) to the newest.",
          "accessed_at": "2026-10-04",
          "attribution_note": "Scan produced with the GitHub contents API on 2026-10-04."
        },
        {
          "id": "S003",
          "type": "vendor",
          "title": "FPX330-H101 4pcs Set",
          "url": "https://www.robotis.us/fpx330-h101-4pcs-set/",
          "publisher": "ROBOTIS AMERICA",
          "locator": "Product structured data (schema.org Offer) and package contents",
          "finding": "Price, availability and package contents in the product page.",
          "accessed_at": "2026-10-04"
        }
      ],
      "offers": [
        {
          "offer_id": "upstream-koch-readme",
          "supplier": "ROBOTIS America (linked from Koch README)",
          "url": "https://www.robotis.us/fpx330-h101-4pcs-set/",
          "region": "US",
          "observations": [
            {
              "observation_id": "koch-readme-0602b0c",
              "currency": "USD",
              "pack_price": 10,
              "pack_qty": 4,
              "moq_packs": 1,
              "stock": "unknown",
              "source_checked_at": "2026-10-04",
              "price_observed_at": "2024-04-07",
              "price_date_basis": "earliest_unbroken_revision",
              "stock_observed_at": null,
              "check_method": "upstream_reported",
              "link_status": "unknown",
              "source_ids": [
                "S001",
                "S002"
              ],
              "shipping_note": "Upstream table states item prices only; delivery and tax not stated.",
              "notes": "Koch README \"Required Materials\" cost column at pinned revision 0602b0c. The figures ($258 and $183 totals; $100 for 2 XL430, $96 for 4 XL330-M288, $144 for 6 XL330-M077) are present in every README revision from 265535c (2024-04-07) to the newest (retained source evidence), so the price is dated to that earliest revision. Per-unit figures divide the listed line cost by its quantity."
            }
          ]
        },
        {
          "offer_id": "robotis-fpx330-h101-4pcs-set",
          "supplier": "ROBOTIS America",
          "url": "https://www.robotis.us/fpx330-h101-4pcs-set/",
          "region": "US",
          "observations": [
            {
              "observation_id": "robotis-2026-10-04",
              "currency": "USD",
              "pack_price": 11.27,
              "pack_qty": 4,
              "moq_packs": 1,
              "stock": "in_stock",
              "source_checked_at": "2026-10-04",
              "price_observed_at": "2026-10-04",
              "stock_observed_at": "2026-10-04",
              "check_method": "manual",
              "link_status": "working",
              "source_ids": [
                "S003"
              ],
              "shipping_note": "ROBOTIS America US store; shipping calculated at checkout, not established.",
              "notes": "schema.org Offer price 11.27 USD, availability http://schema.org/InStock."
            }
          ]
        }
      ]
    },
    "robotis-fpx330-s101-frame": {
      "name": "ROBOTIS FPX330-S101 side frame (per frame)",
      "unit": "each",
      "spec_summary": "X330 side frame, sold as a set of four with bolts and nuts.",
      "manufacturer": "ROBOTIS",
      "mpn": "FPX330-S101",
      "identity_sources": [
        "S001",
        "S003"
      ],
      "substitutes": [],
      "notes": "Unit is one side frame; the set is a pack of four.",
      "sources": [
        {
          "id": "S001",
          "type": "upstream",
          "title": "Koch low_cost_robot README bill of materials",
          "url": "https://github.com/AlexanderKoch-Koch/low_cost_robot/blob/0602b0c1e6a67d8f6ab96f81d1378639018d98af/README.md",
          "publisher": "Alexander Koch",
          "locator": "Follower Arm / Leader Arm: Required Materials",
          "finding": "Lists parts, costs and purchase links for the follower and leader arms.",
          "accessed_at": "2026-10-04"
        },
        {
          "id": "S002",
          "type": "upstream",
          "title": "Koch README commit history and price presence scan",
          "url": "https://github.com/AlexanderKoch-Koch/low_cost_robot/commits/main/README.md",
          "publisher": "Alexander Koch",
          "locator": "Commits touching README.md; presence of the cost figures at each revision",
          "finding": "The cost figures are present in every revision from 265535c (2024-04-07) to the newest.",
          "accessed_at": "2026-10-04",
          "attribution_note": "Scan produced with the GitHub contents API on 2026-10-04."
        },
        {
          "id": "S003",
          "type": "vendor",
          "title": "FPX330-S101 4pcs Set",
          "url": "https://www.robotis.us/fpx330-s101-4pcs-set/",
          "publisher": "ROBOTIS AMERICA",
          "locator": "Product structured data (schema.org Offer) and package contents",
          "finding": "Price, availability and package contents in the product page.",
          "accessed_at": "2026-10-04"
        }
      ],
      "offers": [
        {
          "offer_id": "upstream-koch-readme",
          "supplier": "ROBOTIS America (linked from Koch README)",
          "url": "https://www.robotis.us/fpx330-s101-4pcs-set/",
          "region": "US",
          "observations": [
            {
              "observation_id": "koch-readme-0602b0c",
              "currency": "USD",
              "pack_price": 7,
              "pack_qty": 4,
              "moq_packs": 1,
              "stock": "unknown",
              "source_checked_at": "2026-10-04",
              "price_observed_at": "2024-04-07",
              "price_date_basis": "earliest_unbroken_revision",
              "stock_observed_at": null,
              "check_method": "upstream_reported",
              "link_status": "unknown",
              "source_ids": [
                "S001",
                "S002"
              ],
              "shipping_note": "Upstream table states item prices only; delivery and tax not stated.",
              "notes": "Koch README \"Required Materials\" cost column at pinned revision 0602b0c. The figures ($258 and $183 totals; $100 for 2 XL430, $96 for 4 XL330-M288, $144 for 6 XL330-M077) are present in every README revision from 265535c (2024-04-07) to the newest (retained source evidence), so the price is dated to that earliest revision. Per-unit figures divide the listed line cost by its quantity."
            }
          ]
        },
        {
          "offer_id": "robotis-fpx330-s101-4pcs-set",
          "supplier": "ROBOTIS America",
          "url": "https://www.robotis.us/fpx330-s101-4pcs-set/",
          "region": "US",
          "observations": [
            {
              "observation_id": "robotis-2026-10-04",
              "currency": "USD",
              "pack_price": 10.01,
              "pack_qty": 4,
              "moq_packs": 1,
              "stock": "in_stock",
              "source_checked_at": "2026-10-04",
              "price_observed_at": "2026-10-04",
              "stock_observed_at": "2026-10-04",
              "check_method": "manual",
              "link_status": "working",
              "source_ids": [
                "S003"
              ],
              "shipping_note": "ROBOTIS America US store; shipping calculated at checkout, not established.",
              "notes": "schema.org Offer price 10.01 USD, availability http://schema.org/InStock."
            }
          ]
        }
      ]
    },
    "robotis-hn11-i101-idler": {
      "name": "ROBOTIS HN11-I101 idler set (XL430)",
      "unit": "each",
      "spec_summary": "Idler bearing set for DYNAMIXEL XL430: one idler, cap and bolts; hinge frame not included.",
      "manufacturer": "ROBOTIS",
      "mpn": "HN11-I101",
      "identity_sources": [
        "S001",
        "S003"
      ],
      "substitutes": [],
      "notes": "",
      "sources": [
        {
          "id": "S001",
          "type": "upstream",
          "title": "Koch low_cost_robot README bill of materials",
          "url": "https://github.com/AlexanderKoch-Koch/low_cost_robot/blob/0602b0c1e6a67d8f6ab96f81d1378639018d98af/README.md",
          "publisher": "Alexander Koch",
          "locator": "Follower Arm / Leader Arm: Required Materials",
          "finding": "Lists parts, costs and purchase links for the follower and leader arms.",
          "accessed_at": "2026-10-04"
        },
        {
          "id": "S002",
          "type": "upstream",
          "title": "Koch README commit history and price presence scan",
          "url": "https://github.com/AlexanderKoch-Koch/low_cost_robot/commits/main/README.md",
          "publisher": "Alexander Koch",
          "locator": "Commits touching README.md; presence of the cost figures at each revision",
          "finding": "The cost figures are present in every revision from 265535c (2024-04-07) to the newest.",
          "accessed_at": "2026-10-04",
          "attribution_note": "Scan produced with the GitHub contents API on 2026-10-04."
        },
        {
          "id": "S003",
          "type": "vendor",
          "title": "HN11-I101 Set",
          "url": "https://www.robotis.us/hn11-i101-set/",
          "publisher": "ROBOTIS AMERICA",
          "locator": "Product structured data (schema.org Offer) and package contents",
          "finding": "Price, availability and package contents in the product page.",
          "accessed_at": "2026-10-04"
        }
      ],
      "offers": [
        {
          "offer_id": "upstream-koch-readme",
          "supplier": "ROBOTIS America (linked from Koch README)",
          "url": "https://www.robotis.us/hn11-i101-set/",
          "region": "US",
          "observations": [
            {
              "observation_id": "koch-readme-0602b0c",
              "currency": "USD",
              "pack_price": 7,
              "pack_qty": 1,
              "moq_packs": 1,
              "stock": "unknown",
              "source_checked_at": "2026-10-04",
              "price_observed_at": "2024-04-07",
              "price_date_basis": "earliest_unbroken_revision",
              "stock_observed_at": null,
              "check_method": "upstream_reported",
              "link_status": "unknown",
              "source_ids": [
                "S001",
                "S002"
              ],
              "shipping_note": "Upstream table states item prices only; delivery and tax not stated.",
              "notes": "Koch README \"Required Materials\" cost column at pinned revision 0602b0c. The figures ($258 and $183 totals; $100 for 2 XL430, $96 for 4 XL330-M288, $144 for 6 XL330-M077) are present in every README revision from 265535c (2024-04-07) to the newest (retained source evidence), so the price is dated to that earliest revision. Per-unit figures divide the listed line cost by its quantity."
            }
          ]
        },
        {
          "offer_id": "robotis-hn11-i101-set",
          "supplier": "ROBOTIS America",
          "url": "https://www.robotis.us/hn11-i101-set/",
          "region": "US",
          "observations": [
            {
              "observation_id": "robotis-2026-10-04",
              "currency": "USD",
              "pack_price": 8.05,
              "pack_qty": 1,
              "moq_packs": 1,
              "stock": "in_stock",
              "source_checked_at": "2026-10-04",
              "price_observed_at": "2026-10-04",
              "stock_observed_at": "2026-10-04",
              "check_method": "manual",
              "link_status": "working",
              "source_ids": [
                "S003"
              ],
              "shipping_note": "ROBOTIS America US store; shipping calculated at checkout, not established.",
              "notes": "schema.org Offer price 8.05 USD, availability http://schema.org/InStock."
            }
          ]
        }
      ]
    },
    "serial-bus-servo-driver-board": {
      "name": "Serial bus servo driver board (Waveshare-type, USB)",
      "unit": "each",
      "spec_summary": "USB serial bus servo adapter/driver board for ST/SC series bus servos, as linked by upstream (ASIN B0CTMM4LWK).",
      "manufacturer": null,
      "mpn": null,
      "identity_sources": [
        "S001",
        "S002"
      ],
      "substitutes": [],
      "notes": "Upstream names this \"Motor Control Board\"; the listing is currently sold by a third-party seller.",
      "sources": [
        {
          "id": "S001",
          "type": "upstream",
          "title": "SO-ARM100 README bill of materials",
          "url": "https://github.com/TheRobotStudio/SO-ARM100/blob/5f6d2b876a53a4872e405b991dd925556c9e38a4/README.md",
          "publisher": "TheRobotStudio",
          "locator": "Sourcing Parts: Parts for One Follower Arm; Parts For Two Arms",
          "finding": "Lists part names, amounts and US unit costs with purchase links.",
          "accessed_at": "2026-10-04"
        },
        {
          "id": "S090",
          "type": "upstream",
          "title": "SO-ARM100 README commit history and price presence scan",
          "url": "https://github.com/TheRobotStudio/SO-ARM100/commits/main/README.md",
          "publisher": "TheRobotStudio",
          "locator": "Commits touching README.md; presence of 13.89, 121.94 and 229.88 at each revision",
          "finding": "The three figures are present in every revision from 2415d54 (2025-06-02) to the pinned revision.",
          "accessed_at": "2026-10-04",
          "attribution_note": "Scan produced with the GitHub contents API on 2026-10-04."
        },
        {
          "id": "S002",
          "type": "vendor",
          "title": "Serial Bus Servo Driver Board, Support 253 ST/SC Serial Bus Servos",
          "url": "https://www.amazon.com/dp/B0CTMM4LWK",
          "publisher": "Amazon.com",
          "locator": "Buy box: price, availability, seller",
          "finding": "Current listing price and availability as fetched.",
          "accessed_at": "2026-10-04"
        }
      ],
      "offers": [
        {
          "offer_id": "upstream-readme-amazon",
          "supplier": "Amazon listing linked from upstream README",
          "url": "https://www.amazon.com/dp/B0CTMM4LWK",
          "region": "US",
          "observations": [
            {
              "observation_id": "readme-5f6d2b8",
              "currency": "USD",
              "pack_price": 10.6,
              "pack_qty": 1,
              "moq_packs": 1,
              "stock": "unknown",
              "source_checked_at": "2026-10-04",
              "price_observed_at": "2025-06-02",
              "price_date_basis": "earliest_unbroken_revision",
              "stock_observed_at": null,
              "check_method": "upstream_reported",
              "link_status": "unknown",
              "source_ids": [
                "S001",
                "S090"
              ],
              "shipping_note": "Upstream table states item prices only; delivery and tax not stated.",
              "notes": "Upstream README \"Unit Cost (US)\" column at pinned revision 5f6d2b8 (2026-09-23). The figures (13.89 servo; 121.94 and 229.88 totals) appear unchanged in every README revision from 2415d54 (2025-06-02) to the pinned revision (20 consecutive revisions; retained source evidence), so the price is dated to that earliest revision. Supplier MOQ not independently checked; the table prices single units for the listed amount."
            }
          ]
        },
        {
          "offer_id": "amazon-b0ctmm4lwk",
          "supplier": "Wonrabai Electronics",
          "url": "https://www.amazon.com/dp/B0CTMM4LWK",
          "region": "US",
          "observations": [
            {
              "observation_id": "amazon-2026-10-04",
              "currency": "USD",
              "pack_price": 12.47,
              "pack_qty": 1,
              "moq_packs": 1,
              "stock": "in_stock",
              "source_checked_at": "2026-10-04",
              "price_observed_at": "2026-10-04",
              "stock_observed_at": "2026-10-04",
              "check_method": "manual",
              "link_status": "working",
              "source_ids": [
                "S002"
              ],
              "shipping_note": "Amazon US listing; shipping and sales tax depend on address and membership, not established.",
              "notes": "Listing page fetched and buy box read on 2026-10-04; seller: Wonrabai Electronics."
            }
          ]
        }
      ]
    },
    "small-bar-clamp": {
      "name": "Small bar / trigger clamp for mounting the arm base",
      "unit": "each",
      "spec_summary": "Small quick-grip bar clamp (about 4-6 inch) used to clamp the arm base to a table; upstream links two different products.",
      "manufacturer": null,
      "mpn": null,
      "identity_sources": [
        "S001"
      ],
      "substitutes": [],
      "notes": "Different clamp products are treated as one generic need, as upstream does.",
      "sources": [
        {
          "id": "S001",
          "type": "upstream",
          "title": "SO-ARM100 README bill of materials",
          "url": "https://github.com/TheRobotStudio/SO-ARM100/blob/5f6d2b876a53a4872e405b991dd925556c9e38a4/README.md",
          "publisher": "TheRobotStudio",
          "locator": "Sourcing Parts: Parts for One Follower Arm; Parts For Two Arms",
          "finding": "Lists part names, amounts and US unit costs with purchase links.",
          "accessed_at": "2026-10-04"
        },
        {
          "id": "S090",
          "type": "upstream",
          "title": "SO-ARM100 README commit history and price presence scan",
          "url": "https://github.com/TheRobotStudio/SO-ARM100/commits/main/README.md",
          "publisher": "TheRobotStudio",
          "locator": "Commits touching README.md; presence of 13.89, 121.94 and 229.88 at each revision",
          "finding": "The three figures are present in every revision from 2415d54 (2025-06-02) to the pinned revision.",
          "accessed_at": "2026-10-04",
          "attribution_note": "Scan produced with the GitHub contents API on 2026-10-04."
        },
        {
          "id": "S002",
          "type": "vendor",
          "title": "TAODAN 4PCS 4 Inch Trigger Quick Grip Clamps Bar Clamp Trigger Quick Grip Clamp Single Hand Ratchet Woodworking Clamp for Wood Bonding Processes",
          "url": "https://www.amazon.com/dp/B0DJNXF8WH",
          "publisher": "Amazon.com",
          "locator": "Buy box",
          "finding": "Current price and availability.",
          "accessed_at": "2026-10-04"
        },
        {
          "id": "S003",
          "type": "vendor",
          "title": "Mr. Pen- Bar Clamps for Woodworking, 6\", 2 Pack, Orange",
          "url": "https://www.amazon.com/dp/B092L925J4",
          "publisher": "Amazon.com",
          "locator": "Buy box",
          "finding": "Current price and availability.",
          "accessed_at": "2026-10-04"
        }
      ],
      "offers": [
        {
          "offer_id": "upstream-readme-taodan-4pack",
          "supplier": "Amazon listing linked from upstream README (two-arm table)",
          "url": "https://www.amazon.com/dp/B0DJNXF8WH",
          "region": "US",
          "observations": [
            {
              "observation_id": "readme-5f6d2b8",
              "currency": "USD",
              "pack_price": 9,
              "pack_qty": 4,
              "moq_packs": 1,
              "stock": "unknown",
              "source_checked_at": "2026-10-04",
              "price_observed_at": "2025-06-02",
              "price_date_basis": "earliest_unbroken_revision",
              "stock_observed_at": null,
              "check_method": "upstream_reported",
              "link_status": "unknown",
              "source_ids": [
                "S001",
                "S090"
              ],
              "shipping_note": "Upstream table states item prices only; delivery and tax not stated.",
              "notes": "Upstream README \"Unit Cost (US)\" column at pinned revision 5f6d2b8 (2026-09-23). The figures (13.89 servo; 121.94 and 229.88 totals) appear unchanged in every README revision from 2415d54 (2025-06-02) to the pinned revision (20 consecutive revisions; retained source evidence), so the price is dated to that earliest revision. Supplier MOQ not independently checked; the table prices single units for the listed amount."
            }
          ]
        },
        {
          "offer_id": "upstream-readme-mrpen-2pack",
          "supplier": "Amazon listing linked from upstream README (follower table)",
          "url": "https://www.amazon.com/dp/B092L925J4",
          "region": "US",
          "observations": [
            {
              "observation_id": "readme-5f6d2b8",
              "currency": "USD",
              "pack_price": 5,
              "pack_qty": 2,
              "moq_packs": 1,
              "stock": "unknown",
              "source_checked_at": "2026-10-04",
              "price_observed_at": "2025-06-02",
              "price_date_basis": "earliest_unbroken_revision",
              "stock_observed_at": null,
              "check_method": "upstream_reported",
              "link_status": "unknown",
              "source_ids": [
                "S001",
                "S090"
              ],
              "shipping_note": "Upstream table states item prices only; delivery and tax not stated.",
              "notes": "Upstream README \"Unit Cost (US)\" column at pinned revision 5f6d2b8 (2026-09-23). The figures (13.89 servo; 121.94 and 229.88 totals) appear unchanged in every README revision from 2415d54 (2025-06-02) to the pinned revision (20 consecutive revisions; retained source evidence), so the price is dated to that earliest revision. Supplier MOQ not independently checked; the table prices single units for the listed amount."
            }
          ]
        },
        {
          "offer_id": "amazon-b0djnxf8wh",
          "supplier": "Partstock",
          "url": "https://www.amazon.com/dp/B0DJNXF8WH",
          "region": "US",
          "observations": [
            {
              "observation_id": "amazon-2026-10-04",
              "currency": "USD",
              "pack_price": 9.99,
              "pack_qty": 4,
              "moq_packs": 1,
              "stock": "in_stock",
              "source_checked_at": "2026-10-04",
              "price_observed_at": "2026-10-04",
              "stock_observed_at": "2026-10-04",
              "check_method": "manual",
              "link_status": "working",
              "source_ids": [
                "S002"
              ],
              "shipping_note": "Amazon US listing; shipping and sales tax depend on address and membership, not established.",
              "notes": "Listing page fetched and buy box read on 2026-10-04; seller: Partstock."
            }
          ]
        },
        {
          "offer_id": "amazon-b092l925j4",
          "supplier": "Mr. Pen",
          "url": "https://www.amazon.com/dp/B092L925J4",
          "region": "US",
          "observations": [
            {
              "observation_id": "amazon-2026-10-04",
              "currency": "USD",
              "pack_price": 7.95,
              "pack_qty": 2,
              "moq_packs": 1,
              "stock": "in_stock",
              "source_checked_at": "2026-10-04",
              "price_observed_at": "2026-10-04",
              "stock_observed_at": "2026-10-04",
              "check_method": "manual",
              "link_status": "working",
              "source_ids": [
                "S003"
              ],
              "shipping_note": "Amazon US listing; shipping and sales tax depend on address and membership, not established.",
              "notes": "Listing page fetched and buy box read on 2026-10-04; seller: Mr. Pen."
            }
          ]
        }
      ]
    },
    "soldering-iron": {
      "name": "Soldering iron with solder",
      "unit": "each",
      "spec_summary": "Basic soldering iron and solder, needed to attach wires to the voltage reducer.",
      "manufacturer": null,
      "mpn": null,
      "identity_sources": [
        "S001"
      ],
      "substitutes": [],
      "notes": "Required tool for the follower; reference option not yet chosen.",
      "sources": [
        {
          "id": "S001",
          "type": "upstream",
          "title": "Koch low_cost_robot README bill of materials",
          "url": "https://github.com/AlexanderKoch-Koch/low_cost_robot/blob/0602b0c1e6a67d8f6ab96f81d1378639018d98af/README.md",
          "publisher": "Alexander Koch",
          "locator": "Follower Arm / Leader Arm: Required Materials",
          "finding": "Lists parts, costs and purchase links for the follower and leader arms.",
          "accessed_at": "2026-10-04"
        }
      ],
      "offers": []
    },
    "usb-a-to-usb-c-cable": {
      "name": "USB-A to USB-C cable",
      "unit": "each",
      "spec_summary": "USB-A to USB-C data/charging cable, about 2 m; sold as a 2-pack.",
      "manufacturer": null,
      "mpn": null,
      "identity_sources": [
        "S001",
        "S002"
      ],
      "substitutes": [],
      "notes": "",
      "sources": [
        {
          "id": "S001",
          "type": "upstream",
          "title": "SO-ARM100 README bill of materials",
          "url": "https://github.com/TheRobotStudio/SO-ARM100/blob/5f6d2b876a53a4872e405b991dd925556c9e38a4/README.md",
          "publisher": "TheRobotStudio",
          "locator": "Sourcing Parts: Parts for One Follower Arm; Parts For Two Arms",
          "finding": "Lists part names, amounts and US unit costs with purchase links.",
          "accessed_at": "2026-10-04"
        },
        {
          "id": "S090",
          "type": "upstream",
          "title": "SO-ARM100 README commit history and price presence scan",
          "url": "https://github.com/TheRobotStudio/SO-ARM100/commits/main/README.md",
          "publisher": "TheRobotStudio",
          "locator": "Commits touching README.md; presence of 13.89, 121.94 and 229.88 at each revision",
          "finding": "The three figures are present in every revision from 2415d54 (2025-06-02) to the pinned revision.",
          "accessed_at": "2026-10-04",
          "attribution_note": "Scan produced with the GitHub contents API on 2026-10-04."
        },
        {
          "id": "S002",
          "type": "vendor",
          "title": "etguuds 6.6ft USB A to USB C Cable, 2Pack Fast Charging Cord Type C Charger",
          "url": "https://www.amazon.com/dp/B0B8NWLLW2",
          "publisher": "Amazon.com",
          "locator": "Buy box: price, availability, seller",
          "finding": "Current listing price and availability as fetched.",
          "accessed_at": "2026-10-04"
        }
      ],
      "offers": [
        {
          "offer_id": "upstream-readme-amazon",
          "supplier": "Amazon listing linked from upstream README",
          "url": "https://www.amazon.com/dp/B0B8NWLLW2",
          "region": "US",
          "observations": [
            {
              "observation_id": "readme-5f6d2b8",
              "currency": "USD",
              "pack_price": 7,
              "pack_qty": 2,
              "moq_packs": 1,
              "stock": "unknown",
              "source_checked_at": "2026-10-04",
              "price_observed_at": "2025-06-02",
              "price_date_basis": "earliest_unbroken_revision",
              "stock_observed_at": null,
              "check_method": "upstream_reported",
              "link_status": "unknown",
              "source_ids": [
                "S001",
                "S090"
              ],
              "shipping_note": "Upstream table states item prices only; delivery and tax not stated.",
              "notes": "Upstream README \"Unit Cost (US)\" column at pinned revision 5f6d2b8 (2026-09-23). The figures (13.89 servo; 121.94 and 229.88 totals) appear unchanged in every README revision from 2415d54 (2025-06-02) to the pinned revision (20 consecutive revisions; retained source evidence), so the price is dated to that earliest revision. Supplier MOQ not independently checked; the table prices single units for the listed amount."
            }
          ]
        },
        {
          "offer_id": "amazon-b0b8nwllw2",
          "supplier": "etguuds",
          "url": "https://www.amazon.com/dp/B0B8NWLLW2",
          "region": "US",
          "observations": [
            {
              "observation_id": "amazon-2026-10-04",
              "currency": "USD",
              "pack_price": 7.19,
              "pack_qty": 2,
              "moq_packs": 1,
              "stock": "in_stock",
              "source_checked_at": "2026-10-04",
              "price_observed_at": "2026-10-04",
              "stock_observed_at": "2026-10-04",
              "check_method": "manual",
              "link_status": "working",
              "source_ids": [
                "S002"
              ],
              "shipping_note": "Amazon US listing; shipping and sales tax depend on address and membership, not established.",
              "notes": "Listing page fetched and buy box read on 2026-10-04; seller: etguuds."
            }
          ]
        }
      ]
    }
  },
  "sources": [
    {
      "id": "S001",
      "title": "Koch arm build guide and BOM",
      "url": "https://github.com/AlexanderKoch-Koch/low_cost_robot/blob/0602b0c1e6a67d8f6ab96f81d1378639018d98af/README.md",
      "finding": "BOM tables list $258 follower and $183 leader; opening approximations are $250 and $180. Lists actuators, printing, assembly, voltage setup and example scripts.",
      "type": "upstream",
      "locator": "README.md",
      "accessed_at": "2026-09-30",
      "publisher": "Alexander Koch / low_cost_robot contributors",
      "attribution_note": ""
    },
    {
      "id": "S002",
      "title": "Repository MIT license",
      "url": "https://github.com/AlexanderKoch-Koch/low_cost_robot/blob/0602b0c1e6a67d8f6ab96f81d1378639018d98af/LICENSE",
      "finding": "MIT repository root license; purchased electronics and external artifacts are not assigned this license.",
      "type": "license",
      "locator": "LICENSE",
      "accessed_at": "2026-09-30",
      "publisher": "Alexander Koch / low_cost_robot contributors",
      "attribution_note": ""
    },
    {
      "id": "S003",
      "title": "Repository snapshot",
      "url": "https://github.com/AlexanderKoch-Koch/low_cost_robot/commit/0602b0c1e6a67d8f6ab96f81d1378639018d98af",
      "finding": "Pinned default-branch commit; release API returned no published stable release. Repository metadata is not independent adoption evidence.",
      "type": "upstream",
      "locator": "0602b0c1e6a67d8f6ab96f81d1378639018d98af",
      "accessed_at": "2026-09-30",
      "publisher": "Alexander Koch / low_cost_robot contributors",
      "attribution_note": ""
    },
    {
      "id": "S004",
      "title": "Mechanical and control source inventory",
      "url": "https://github.com/AlexanderKoch-Koch/low_cost_robot/tree/0602b0c1e6a67d8f6ab96f81d1378639018d98af/hardware",
      "finding": "Follower and leader directories contain STL, STEP and Fusion assemblies; source tree contains Python control and simulation files.",
      "type": "upstream",
      "locator": "hardware/, dynamixel.py and simulation.py",
      "accessed_at": "2026-09-30",
      "publisher": "Alexander Koch / low_cost_robot contributors",
      "attribution_note": ""
    },
    {
      "id": "S005",
      "type": "secondary",
      "title": "Koch arm US cost and sourcing estimate receipt",
      "url": "https://opensourcerobotics.dev/assets/build-guides/koch-arm-cost-estimate.json",
      "publisher": "Open Source Robotics",
      "locator": "Rollups as of 2026-10-04",
      "accessed_at": "2026-10-04",
      "finding": "Line-level US offers, price dates, printed-part slicing and rollups for the Koch arm configurations."
    },
    {
      "id": "S006",
      "title": "Low-Cost Robot Arm Assembly (YouTube video)",
      "url": "https://www.youtube.com/watch?v=RckrXOEoWrk",
      "finding": "Video 'Low-Cost Robot Arm Assembly' uploaded by the YouTube channel 'Alexander Koch' (https://www.youtube.com/@alexkoch_ai). Linked from README.md in AlexanderKoch-Koch/low_cost_robot at revision 0602b0c1e6a6. The uploader is treated as the project's own channel because the channel name matches the project or maintainer name. The video is listed as a demonstration link; its content was not reviewed for technical accuracy.",
      "type": "maintainer",
      "locator": "YouTube video; linked from README.md in AlexanderKoch-Koch/low_cost_robot at revision 0602b0c1e6a6",
      "accessed_at": "2026-10-04",
      "publisher": "Alexander Koch",
      "attribution_note": ""
    }
  ]
}
