Clarifying / revising error handling

the general architecture of plr machines:

  • front end: machine agnostic, sends commands to backends
  • back end: received everything in a standardized format, turn those into machine-specific commands, and send them

for error handling:

  • backend: raise universal error where one exists*, so that user can catch in a hardware agnostic fashion
  • front end: may catch and handle if appropriate, or just pass to user

*these errors are like a “repository” a backend can choose from. The “repository” contains errors reasonably expected to be raisable by a generic machine, such as TipsNotFound for liquid handlers. It doesn’t really matter that OT doesn’t support this (it also doesn’t support the 96 head). For very specific errors, like iswap collision on STARs, those are raised as hardware-non-agnostic errors

this is generally the case right now, but I need to check and make sure.