# Event and Alarm Codes v1

Status: draft canonical table for implementation.

## Hard-stop faults — reset required

- `ESTOP_ACTIVATED`
- `FORCE_OVER_LIMIT`
- `ENCODER_LOST`
- `DRIVE_FAULT`
- `FT_SENSOR_INVALID`

## Recoverable pauses / warnings

- `FORCE_UNDER_LIMIT`
- `SPINDLE_RPM_DEVIATION`
- `TABLE_RPM_DEVIATION`
- `HOST_COMMS_TIMEOUT`
- `ARM_GEOMETRY_DIVERGENCE`

## Refused transitions / blocked starts

- `GEOMETRY_NOT_VALIDATED`
- `ARM_HANDLING_INTERLOCK`
- `WRONG_ARTIFACT_TYPE`
- `SCHEMA_VALIDATION_FAILED`
- `WRONG_MACHINE_ID`
- `CONTROLLER_VERSION_MISMATCH`
- `UNSUPPORTED_CAPABILITY`
- `ILLEGAL_TRANSITION`

## Event fields

Every event should include:

```json
{
  "timestamp": "ISO-8601 or host monotonic mapping",
  "code": "GEOMETRY_NOT_VALIDATED",
  "severity": "info|warning|critical",
  "state": "IDLE|MANUAL|...",
  "detail": "short machine-readable or operator-readable detail"
}
```

Do not use free text as the only control signal. Human messages are for UI; codes are for software.
