What is more important - accessing possible draft data or possible latest approved/actual version?
What operation(s) result in new version(s)?
Depending on the answers, you can get one of these two systems:
The key difference for developers is the meaning and importance of unversioned data. In version case, regular data are the actual and special access is needed for historic version data. Whereas in approval pattern it's the opposite - unversioned data is less important, since it's not yet 'approved'.
Naturally, approval workflow will be harder to reason about and will require careful development to communicate that plain project.tasks.actual is not quite project.last_approved_version.tasks.