The reason it couldn't resolve assay description was it was first taking the non-existent assay (assay = wrapper.get_my_string(self.ASSAY), when there was no assay defined) and then using that to get the assay description. But since the assay was null, it "couldn't resolve assay description".
The solution to this was to first get it from input params helper (if it exists, else it would take assay from the config), THEN look up assay description/do other things with assay.
Bitbucket PR incoming