Testing and requirements, connected, for hardware teams

Every test. Every rig. Every requirement.

Tensol unifies test data from every bench and ties it to the requirements it verifies. Checks run automatically; a pass still waits for a human signature — because that signature is what a review actually accepts.

tensol · Project Kestrel · verification matrix
verdict:pending OR verdict:failed
RequirementTitleVerdict
REQ-PWR-014Main contactor shall open within 50 ms of overcurrent detectionStale
REQ-PWR-014TC-PWR-014.12026-08-18_rig03_thermal_cycle_009.mf4
limit checkcontactor_open_time_ms= 41.2 msvs threshold≤ 50 ms
REQ-PWR-014 changed 2 days after this run — verdict is stale
REQ-THM-102Coolant loop shall hold the unit below 45 °C at rated loadVerified
REQ-PWR-021Precharge shall complete within 250 ms of power-onFailed
REQ-COM-007Controller shall publish rail_voltage_mV at 100 HzAwaiting sign-off
REQ-THM-118Over-temperature alarm shall assert within 500 msUntested
watching rig03 · 1 requirement stale5 requirements · 1 project

The verification matrix — watch REQ-PWR-014 clear its limit check as a run lands, then stop and wait for an approver.

Built by founders & operators from

  • Y Combinator logo
  • Virginia Tech logo
  • Rivian logo
  • Magna logo
  • Carnegie Mellon University logo
debug

1 day

per failed run

A test fails Friday. Monday is spent digging through logs on three rig PCs to find when it started.

ingest

3 formats

before you can start

NI on one bench, UEI DAQ on another, .csv from a third — every debug starts with format archaeology.

review

1 week

before every gate

The week before every design review: rebuilding the “which requirements did we actually verify” spreadsheet by hand.

Any hardware in. Every requirement tied to the run that proves it.

  1. 01

    Any hardware, any format

    Whatever your benches already write — .mf4, .tdms, ROS bags, .csv, ULog — or live CAN. Nothing to convert, no rig-side changes.

  2. 02

    Requirements matched to traces

    Import from ReqIF, CSV, Jama, or DOORS. Each requirement points at the test case, the run, and the exact channel that verifies it.

  3. 03

    Signed proof, kept current

    Every run re-checks the limits. A failure stands on its own; a pass queues for sign-off, and the approver's name travels with the evidence. Change a requirement and the affected sign-offs flag stale.

Find the moment it broke

One scrubber over every channel from a run — telemetry, decoded CAN, console, video — aligned to the same clock. Sources like .mf4, .tdms and live CAN line up without you converting anything.

run · 2026-08-18_uav02_flight_014 · replay
09:14:05
09:14:07.31209:14:09
bus_voltage_VULog 9.12 V
motor_temp_CTDMS 43.0 °C
imu.accel_zROS bag 9.62 m/s²
can0 · decodedlive CAN
09:14:07.301 can0.PWR_Status.rail_voltage_mV = 3412
09:14:07.311 can0.PWR_Faults.uv_warning = 1
09:14:07.322 can0.PWR_Status.bus_current_A = -184.6
console
07.298 INFO load step 4/6 · setpoint -180 A
07.312 WARN bus_voltage_V below 9.5 — undervoltage watch
07.640 INFO bus recovered · 11.7 V
cam009:14:07.312
annotation · bus voltage dip — 09:14:07.312

Know what a change breaks

Put two builds on the same channel and the deviation is shaded for you, with the software hash, rig, and operator that differed. The question you actually ask — what changed since the last time this passed?

run diff · rail_voltage_V · build 4.2.1 → 4.2.2
software
4.2.1 4.2.2
sha 9f3c1a → e07b442
rig
rig03 · rig03
operator
a.okafor · a.okafor
build 4.2.1 build 4.2.2Δ min −380 mV in shaded region
what changed since the last time this passed?

Ask questions across every run you’ve ever done

Query conditions across rigs and months, not one file at a time: bus_voltage < 9 during phase:startup. Results come back as runs you can open, each with its rig, build, and verdict.

search · all runs · Project Kestrel
bus_voltage < 9 during phase:startup5 runs · 2 rigs · 3 months
RunRigDateBuildVerdict
2026-08-12_rig03_thermal_cycle_007.mf4rig032026-08-124.2.1Failed
2026-07-28_rig01_startup_sequence_031.tdmsrig012026-07-284.1.9Failed
2026-07-14_rig03_cold_soak_004.mf4rig032026-07-144.1.6Awaiting sign-off
2026-06-30_rig01_startup_sequence_022.tdmsrig012026-06-304.1.4Failed
flight_014.bagrig022026-06-194.1.2Verified