The Purpose of the procedure. Any Parameters the procedure takes. Preconditions that must hold for the procedure to work. Postconditions that will hold after the procedure finishes. There are different perspectives on preconditions.
Some people feel that preconditions are a contract.
Others feel that procedures should check their preconditions and respond appropriately. Robust programs deal appropriately with incorrect input. Sometimes, the appropriate response is to print an error message and crash. You can use error to do just that. A husk does the checking and then calls the kernel .