resolvedAttributes

The LogRecord attributes produced by CaptureConfig.attributeMapper, applied at the synchronous capture edge on the caller that logged — never on the drain coroutine (#1630). A queueing edge fills this by calling LogCapture.resolveAtEdge while the caller's ambient state is still the state the line was emitted under; LogCapture.capture then uses the snapshot instead of re-running the mapper off-thread.

null means the event was never edge-resolved. LogCapture.capture then applies the mapper itself — correct for a caller that invokes capture() directly from its own log site, because that call is the synchronous edge. A queueing edge must always resolve: leaving this null there is exactly the #1630 bug.