Bitcoin.org's developer documentation has a pretty good description of the consensus rules, but it does not and cannot describe them fully. This is because the consensus rules are dictated by the code that enforces them, not by a document. AFAIK, there is no list of things that can be hard forked and things that can be soft forked as such lists would be infinite. A hard fork can do anything; a soft fork can do much less, but with some "tricks", a soft fork can do just about anything too.
In general, a hard fork is a change which makes something that was previously invalid, valid. This would mean things like changing the transaction and block formats, the current scripting system, etc.
In general, a soft fork is a change which makes something that was previously valid, invalid. This would mean things like changing when the OP_NOP (no operation) opcodes are actually no op and not. Soft forks can also add extensions to what currently exists, but not always change what already exists. So a soft fork could add something to the transaction format, but it can't change the current transaction format to something else. Changes like these would be segwit and extension blocks.