You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(service-automation): stop splicing driver text into engine.ts's last three store-seam log messages (#6299) (#6498)
All three catches sit around the `SuspendedRunStore` driver and rendered their
failure by interpolating the thrown value's `.message` into the log MESSAGE.
`ObjectLogger.write()` adds one `<ts> <LEVEL>` head per call, so a multi-line
driver error turned ONE record into several physical lines of which only the
first was greppable. The cause now goes to the logger's structured slot via
`describeThrownForLog`, closing the #5048 / #5575 / #5636 / #5661 / #5737 /
#5912 / #6230 family for this file.
The #4632 level was judged per seam rather than batch-copied from #6230:
- forgetSuspendedRun -> raised to `error` (durability): the hot cache is
dropped before the store delete, so a failed delete leaves the suspension
consumed in-process and the durable row alive, to be re-listed and re-resumed
after the next restart.
- cancelRun -> raised to `error` (durability): an unreadable store makes the
read report "no such suspended run", so the method returns `false` (its
contract's idempotent success) and the cancellation is silently skipped.
- listSuspendedRunsDurable -> stays `warn` (functional): nothing
claimed-persisted failed to land; the listing degrades to the in-memory cache
and the message now says so out loud.
Claude-Session: https://claude.ai/code/session_01USNUyHEr7uaU6MoEWXitei
Co-authored-by: Claude <noreply@anthropic.com>
fix(service-automation): the last three `engine.ts` seams stop splicing a driver's failure into the log message, and two of them are re-graded `error` (#6299)
6
+
7
+
All three catches sit around the `SuspendedRunStore` driver and rendered their
8
+
failure by interpolating the thrown value's `.message` into the log MESSAGE.
9
+
`ObjectLogger.write()` adds exactly one `<ts> <LEVEL>` head per call, so a
10
+
driver error carrying newlines turned ONE record into several physical lines of
11
+
which only the first was greppable — and on the `warn` path, inside `serve`'s
12
+
boot-quiet window, `BootLogCapture.offer()` keeps only lines with a level head,
13
+
so the continuation lines were dropped outright. Measured on the restored
14
+
concatenation: a three-line driver error became 3 physical lines and the boot
15
+
filter retained 1, and that one carried no driver fact. The cause now goes to
16
+
the logger's structured slot (`describeThrownForLog`), so the record stays on
17
+
one physical line in every format. This closes the family of #5048 / #5575 /
18
+
#5636 / #5661 / #5737 / #5912 / #6230 for this file.
19
+
20
+
The level was judged per seam (#4632), not batch-copied from #6230:
21
+
22
+
-**`forgetSuspendedRun` → raised to `error`.** The hot cache is dropped before
23
+
the store delete and this is the single choke point every consumption of a
24
+
suspension passes through, so a failed `delete` leaves the suspension gone
25
+
in-process and the durable row alive. Callers still report success, and the
26
+
surviving row is re-listed and re-resumed after the next restart, running a
27
+
continuation that already ran.
28
+
-**`cancelRun` → raised to `error`.** An unreadable store makes the failed read
29
+
read as "no such suspended run", so the method returns `false` — which its
30
+
contract calls idempotent success — and the cancellation is silently skipped
31
+
while the call reads clean. The run stays parked and durably resumable.
0 commit comments