4408743570
Today the run span (the SERVER trace event keyed by runId) is created inside `traceEventConcern.traceRun`, which sits *after* the mollifier gate. When the gate diverts a trigger into the Redis buffer, the run span is therefore not written to the event store until the drainer replays the snapshot — buffered runs are invisible in the trace view, parents' trace trees miss the child until drain, and alerting pipelines can't reference the run. Hoist the gate evaluation and mollify branch inside `traceRun` so both paths open the run span. The mollify branch records mollifier attributes on the same event, captures `event.traceId`/`event.spanId` into the buffer snapshot (replacing the separately-allocated `mollifier.queued` OTel span), and returns the synthesised result. `traceRun` flushes the PARTIAL event to the store on callback return. Extend the existing call-site test to assert (a) traceRun fires before buffer.accept and (b) the snapshot's traceId/spanId match the run span's IDs. The MockTraceEventConcern now mirrors the production ClickhouseEventRepository shape so the `traceContext.traceparent` assertion exercises the seeding path. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>