In regard to tip 4, I've been using statesman[1] which allows you to store the transitions as table backed active record objects along with any contextual metadata.
Depending on how much auditability you need on why transitions happened, this may be preferable to papertrail.
Depending on how much auditability you need on why transitions happened, this may be preferable to papertrail.
[1] https://github.com/gocardless/statesman