I had previously been tagging user-immediates in a way that wasted tag-space and didn't match up with the obvious implementation used for things like bools and chars.
This is now fixed. A nice side-effect of this change is that matches against bools are now detected as complete or incomplete.
Incomplete matches are now detected earlier in the compiler, in a way that makes it easier to figure out the code that actually triggered it.
I've also, for fun, started writing the lisp reader in irken itself.