Status: IN
A participant that has voted YES in `prepare()` holds locks and cannot unilaterally commit or abort until it receives the coordinator's decision, creating an unbounded blocking window if the coordinator fails
Source: entries/2026/05/29/topic-three-phase-commit.md
for op in operations:
self.locks[op["key"]] = tx_id # locks held until commit() or abort()
self.log.append({"tx_id": tx_id, "state": "prepared"})
return {"vote": "yes"}