You don't have to use "1 lib" containing all "groups of rules", you can separate into as many libraries as you need or want. They are just standalone classes (libraries) that uses get_instance() to pull CI into them to access the form validation library, run the rules and return the result of the validation. It sounds basically like the same thing you are wanting when you say "all those things to be in separate files", except nothing in CI needs to change and can be used in any version of CI using current CI methods.