fix interface implementation error and refactor out isKeyPathValid -> isOptionSettable