What comes out
A recipe with fixed fields — and the list of what it could not check.
A real run, at the speed it actually happens.
The last block is the part no other tool prints — what it could not check. A clean answer is worthless if you cannot tell it from a blind spot.
Try it
One command. Your machine, your key, your recordings.
Point it at a folder and it watches — a finding becomes an issue in your repo, and the recording never leaves the building.
The diff on the right is the repair TrialONE proposed for ros2_control#1905 ↗. A maintainer needed about two hours to find it.
$ pip install https://trialone.wiki/trialone-0.1.0-py3-none-any.whl$ trialone diagnose ./recordings/run_042# nothing is uploaded. detection runs here; only you hold the key.
auto cm = std::make_shared<ControllerManager>(executor); // lock_memory defaults to true on this build cm->set_parameter(rclcpp::Parameter("lock_memory", false)); // or raise RLIMIT_MEMLOCK — see /etc/security/limits.conf executor->add_node(cm);Real incidents
Four public threads where the log did not say what broke.
Open any of them. The engineer's own words, with their name. The TrialONE line is our real output on that log — not a rewrite.
The controller intermittently commands motion nobody asked for.
Differential-drive AMR, ROS 2 · diff_drive_controller
Nothing. No error, no warning — the recording looks like a normal run, which is why the thread never resolved it.
The system clock stepped backwards after boot, once NTP corrected it. The controller saw a negative dt.
still open · unresolved on GitHub
/tr_velocity_controller/odom carries 61 message timestamps EARLIER than the message before it on the same topic, the largest going back 1.336 s, first at t = 3.4 s. This compares one clock against itself, so it is not a threshold or a deviation: a timestamp cannot precede its predecessor.
What every answer carries
It prints what would have proved it wrong.
The bottom of a real report, verbatim. A tool that hides its own weak spots is not more accurate — only quieter.
- HOLDS
/Sensor origin.*out of map bounds/must appear4 matching lines - HOLDS
/VoxelLayer::updateBounds/must appear1 matching line - HOLDS
/ObstacleLayer::updateBounds/must NOT appear0 matching lines - HOLDS
/bresenham3D/must appear1 matching line
Written before looking. The report prints them whether they hold or not.
never used: show_region, decode_errno — so nothing here rests on what those would have shown.
-2.20x00ffff000xffff00ffIn no excerpt, no finding, no tool result. Knowledge, a derivation, a proposal — or a fabrication, and from outside all four look the same.
0x00ffff00Called missing without a search. Only a search that returned zero can carry that — and a coding agent told something is missing will add it.
0xffff00fflocal_costmap.plugins.voxel_layer.enabledsize_Not a complaint — a repair may introduce names. But each is either a real setting of this system or an invented one, and that decides whether it can be carried out.
verbatim from output/reports/navigation2_2373.txt
Measured against a chat window
Twice as often on the question that costs money.
Same 20 logs, same word lists, same model. Every case is a real failure from a public issue tracker where a maintainer eventually found the cause and wrote it down — where the timeline is recorded, they needed between two hours and 111 days.
ArduPilot .BIN, MCAP, HDF5. There is nothing to paste into a chat window — it scores zero, four times out of four.
Twice as often. Naming a fault got cheap for everyone; finding where it lives did not.
Our narrowest margin, and we print it anyway — you should know where the gap is thin.
Text logs are 16 of the 20 cases because that is where public ground truth lives — nobody attaches a 400 MB bag to an issue.
Before you ask
Five questions, answered where they hurt.
Including the one about drones, where the honest answer is that nobody has solved it — our own 0.72 included.
One recording from one robot — whatever format it is already in. If it reads, you get a diagnosis. If it does not read, you get told that, not a guess.
No. It runs on your machine or on the robot and reads the folder in place. For the live path it attaches to your ROS 2 graph locally.
Every diagnosis carries the measured values it rests on and a set of checks that would have falsified it. When a check fails, the answer is labelled unverified rather than sold. Unreadable input gets an honest stop.
Partly, and we are explicit about which part. Detectors that compare against healthy repetitions need a baseline. The structural checks — a velocity that must equal the derivative of a position, a timestamp that cannot precede its predecessor — need nothing but the recording itself.
Not our target. Every flight is unique, so there is nothing to compare against, and label-free detection there is unsolved — ours included (AUC 0.72). We say so rather than sell it.
Put it on your own recordings.
The tool installs today and runs on your machine — that part needs no account. The list is for the hosted side: fleets, saved history, the login. One email, when there is something to log into.
Or skip the queue: send us a recording that went wrong and we run it for you, including whatever it gets wrong.
Two founders, TUM and LMU. You will talk to one of us, not a sales funnel.