What's the point of making it a format string if you are hardcoding where the % identifier goes anyway?!
The %w (or %v) identifier must be at the end for the magic to work, but you can still meaningfully format things in front of the wrapped error, e.g. fmt.Errorf("Write(%s): %w", filename, err)