A technique is described for guaranteeing recovery in a computer system comprising
of recovery contracts with a plurality of obligations for a message exchange between
a first component and a second component. Three forms of contract are described,
governing interactions between three types of components. Each contract is bilateral,
i.e. between a first component and a second component. The first and second components
have mutual agreement on when the contract will be released to facilitate log truncation,
and independent and/or autonomous recovery.