# Acceptance Checklist This checklist condenses the current P11 firmware/control spec for implementation tracking. ## Input contract - [ ] Accepts `controller-job.v1` only. - [ ] Rejects `job.v1` and malformed input. - [ ] Runs 4-gate intake validation. - [ ] Rejects wrong `machine_id`. - [ ] Rejects incompatible `controller_version` or unsupported capability. ## Execution - [ ] Sequential segment execution exists for future job mode. - [ ] Force PID tracks setpoint within agreed commissioning tolerance. - [ ] Force modulation uses live table encoder angle. - [ ] Table and spindle RPM follow commands. - [ ] Toolhead spindle direction follows clockwise/counter-clockwise operator/job selection and is logged explicitly. - [ ] Pause time excluded from segment polishing time. ## Telemetry - [ ] Core channels logged at >=100 Hz. - [ ] Single monotonic timestamp source. - [ ] Commanded and actual values both present. - [ ] Sensor faults are detectable. - [ ] CSV parseable by standard tools. ## State machine and safety - [ ] All accepted states/transitions implemented. - [ ] Illegal transitions logged. - [ ] Operator acknowledge cannot be bypassed. - [ ] E-stop all-stop independent of software state. - [ ] Interlocks implemented with documented thresholds. - [ ] Watchdog timeout causes pause, then abort. - [ ] `FAULTED` exits only through explicit reset. ## Manual mode - [ ] `MANUAL` reachable from `IDLE`. - [ ] Live setpoint adjustment works for force, table RPM, spindle RPM, spindle direction, and optional modulation. - [ ] Geometric gate blocks stale geometry. - [ ] Setpoint changes are timestamped events. - [ ] Manual-session log emitted on exit. - [ ] Safety behavior identical to job mode. ## Data - [ ] `/data/manual/{session_id}/` and `/data/runs/{run_id}/` layouts respected. - [ ] `status.json` maintained. - [ ] Hashes/manifests emitted. - [ ] Raw telemetry preserved during commissioning.