mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-10-24 04:33:17 +00:00
Retain the attempted terminal phase on writer failure
The direct writer-interface control also checks the fixed failed phase. Report the attempted terminal, not the preceding in-memory recovery phase. Contract-Neutral: Correct the fixed diagnostic label and its existing contract control; restoration, evidence-failure exit and authority remain unchanged. Change-source: pulse-maintainer
This commit is contained in:
@@ -438,13 +438,14 @@ class Transaction:
|
||||
|
||||
if self.receipt["observation_failures"]:
|
||||
unverified()
|
||||
terminal = self.receipt["status"] if self.receipt["observation_failures"] else status
|
||||
try:
|
||||
self.save(self.receipt["status"] if self.receipt["observation_failures"] else status)
|
||||
self.save(terminal)
|
||||
except (OSError, Failure) as error:
|
||||
if isinstance(error, Failure) and str(error) != "receipt-observation":
|
||||
raise
|
||||
if self.receipt["status"] not in self.receipt["observation_failures"]:
|
||||
self.receipt["observation_failures"].append(self.receipt["status"])
|
||||
if terminal not in self.receipt["observation_failures"]:
|
||||
self.receipt["observation_failures"].append(terminal)
|
||||
unverified()
|
||||
# One bounded attempt to retain the failure, not to obtain a pass.
|
||||
self.recovery_save("observation_failed")
|
||||
|
||||
@@ -339,6 +339,7 @@ class TransactionTest(unittest.TestCase):
|
||||
self.assertEqual(engine.estate_hash(self.paths), self.before)
|
||||
self.assertEqual(tx.receipt["recovery"]["elapsed_seconds"], 300)
|
||||
self.assertEqual(tx.receipt["failure"], "new-service-crash")
|
||||
self.assertIn(phase, tx.receipt["observation_failures"])
|
||||
self.assertEqual(tx.receipt, json.loads((self.attempt / "receipt.json").read_text()))
|
||||
# Keep each independent snapshot/intent; never reuse its path.
|
||||
self.attempt = self.root / "attempts" / ("b" * 64)
|
||||
|
||||
Reference in New Issue
Block a user