Bounded Embodiment: hostile run on an SO-ARM101 arm, measured by its own encoders 9 October 2026, 17:39:40 to 17:49:40 US Pacific (600 s) https://craigmerry.com/bounded-embodiment/ WHAT THIS IS The raw log behind the numbers on the "First results" slide of my ITU workshop talk (16 October 2026): 57,350 commands, 0 samples outside the declared box, top tool speed 0.23 m/s against 0.25 declared, closest approach 10.2 mm. - Arm: SO-ARM101, 12 V STS3215 servos, driven through LeRobot 0.6.1's driver. - Commands: a seeded hostile generator (seed 7, amplitude 1.0) switching between fast, partial, boundary, malformed, uniform, sign-flip, max and drive-out strategies. This is an EARLIER generator, not the Bounded Embodiment method's be-hostile/1 stream. - Gate: the reference gate, with LeRobot's own step limit off (max_relative_target=None). - The run would have aborted if the tool went 5 cm outside the box. It finished. WHAT THIS IS NOT - Not an EV-03 result. EV-03 requires an external instrument. Every position here is forward kinematics of the arm's own encoder readings. - Those encoder positions are approximate. The joint offsets in envelope.json (joint_map) were fitted from two photos to about +/-10 degrees, so the tool positions, and the 10.2 mm closest approach, carry that calibration uncertainty. The camera-measured run is next. - Not scored by the bounded-embodiment core package, and not signed. It predates the kit. - Not verified by anyone else. One maintainer, no third-party verification. - The 10.2 mm is against THIS envelope (envelope.json). Scored against a different box, the same motion can be outside it. FILES run.csv.gz one row per command (57,350 rows), columns below envelope.json the declared envelope the run was scored against (base frame, metres) summary.json the runner's own summary, as written at the end of the run console.log the runner's console output recheck.py recomputes every number above from run.csv.gz + envelope.json (stdlib only) SHA256SUMS checksums of the files above COLUMNS (run.csv.gz) wall_time Unix time, seconds t seconds since the first command strategy which hostile strategy produced the command decision the gate's decision: allow, clamp, reject_hold, invalid_hold present_ joint positions read from the encoders (LeRobot degrees) sent_ joint positions the gate sent to the servos (LeRobot degrees) fk_x, fk_y, fk_z tool point from forward kinematics of present_*, metres tracking_mm distance between commanded and measured tool point, mm error runner error, if any (empty in every row) gate_ms time the gate took to decide, ms elbow_*, wrist_* elbow and wrist joint centres from forward kinematics, metres RECHECK python3 recheck.py prints: 57,350 commands over 600.0 s; 0 position, 0 speed and 0 link excursions; top tool speed 0.23 m/s; closest approach 10.2 mm (to the box's +y face). LICENCE CC BY 4.0. Attribute to Craig Merry and link to this README.