# The error `controller.read-unknown` **user**: the script can change it: the error says what happened in the experiment's names, and what to write instead. Where MIME gives it, with what its message says happened and what its action says to do (`{…}` is filled in from the experiment): - in `mime/build/_checks.py`: - what happened: `the controller's read {…} names {…}, and the observation's node {…} holds no {…}` - what to do: `read one of the observation's outputs, reads={label: "."}. {…}` - in `mime/build/_plan.py`: - what happened: `{…}'s read {…} names {…}, which is no observation's output (written .)` - what to do: `write reads={label: "."}. {…}` - in `mime/build/_plan.py`: - what happened: `{…}'s read {…} names {…}, which is no state a dynamics publishes nor an observation's output` - what to do: `write reads={label: "."}, or an observation's output. {…}` Reading an error and reaching its full traceback: [reading an error](../reading_errors.md). Every code: [the index](index.md).