# Telemetry Channel Spec v1

## Core channels — required at >=100 Hz

```text
timestamp_us
table_angle_deg
arm_angle_deg
fz_n
mx
my
mz
spindle_rpm_actual
table_rpm_actual
arm_amplitude_deg_derived
arm_center_deg_derived
machine_state
force_setpoint_n
```

## Strongly recommended channels

```text
fx_n
fy_n
ft_status
z_servo_iq_v
z_brake_engaged
spindle_drive_state
spindle_drive_error
spindle_bus_voltage_v
spindle_iq_a
spindle_motor_temp_c
arm_angle_linearized_deg
table_rpm_setpoint
spindle_rpm_setpoint
spindle_direction_setpoint
spindle_direction_actual
force_actuator_cmd
estop_active
interlock_state
mode
fz_raw_n
fz_contact_n
```

## Principles

- One monotonic Teensy timestamp source.
- Raw values, not only filtered values.
- Commanded and actual values are both present.
- Sensor validity is explicit; never substitute fake good values.
- Gaps are detectable from timestamps.
- Header names are stable because downstream analysis will depend on them.
- Spindle RPM remains a non-negative magnitude; spindle direction is logged separately as `cw` / `ccw` rather than encoded as signed RPM.

## CSV baseline

First-write compatibility format is CSV. Later processing may produce Parquet/downsampled traces, but raw CSV must be preserved during commissioning.
