Looks like it was supposed to be a mutation error, but a typo released in v0.6.15 made the error message formatting itself fail. Should be fixed in v0.6.18 and up after https://github.com/FluxML/Zygote.jl/pull/1038.
P.S. if you wouldn’t mind some unsolicited suggestions for the code itself, Flux.normalise is the only function that needs to be qualified to use. The rest are all exported by default, e.g. Flux reexports gradient and relu from Zygote and NNlib respectively. With respect to type annotations, the general convention is to use them judiciously (exceptions documented here) so that the model can work with Float32 arrays, GPU arrays, array views etc. without any implementation changes.