Structured events for multi-repo publishing.
Publishing emits a stream of tagged events alongside its human-readable logging,
so machine consumers (CI, dashboards) can follow a run step by step. Every run
opens with a run_started event carrying wetrun: when false, the run is a dry
run and every package_completed is a prediction (its commit is 'simulated')
rather than an applied change. A run's run_finished summary is derived from the
same event list via summarize_events, so the stream and the summary never drift.
Events are consumed through a PublishingEventHandler sink (see
publishing_event_handler.ts).