+## Logs and cancellation
+
+- Log with the `*slog.Logger` of the part (`daemonLogger`). The handler
+ formats the line; do not format values into the message.
+- Write the message as a short event in plain words, such as "receive
+ failed" or "subagent done". Do not explain what it means or what the
+ user must do.
+- Put names, IDs, counts, and durations in attributes, with short keys
+ (`name`, `id`, `after`, `retry`). Put the cause in `err`; the handler
+ writes it last.
+- Use info for normal events, warn for a failure that is retried or
+ loses nothing, and error for a failure that loses data or stops a
+ part.
+- Cancellation of a service or request context is an expected stop, not
+ a failure. Do not log it as an error, and do not hide all errors only
+ because the context is canceled. A joined error with an independent
+ failure stays a failure.
+- Use the worker or request context for this check. An operation that
+ reaches its own timeout while its worker is active stays a failure.
+- Never log secrets, tokens, message text, or phone numbers. Redact IDs
+ as the existing code does.
+