ClickHouse task runs now track trigger sources and warm starts

Task runs replicated to ClickHouse now include trigger_source, root_trigger_source, and is_warm_start columns, giving teams deeper visibility into what fires their tasks and whether they started warm.
The ClickHouse task_runs_v2 table now surfaces analytics data that was previously hidden in the TaskRun.annotations JSON. When task runs replicate from Postgres to ClickHouse, the trigger_source and root_trigger_source fields are extracted from the annotations and populated as top-level columns. Similarly, is_warm_start — a new nullable boolean on the TaskRun model — is now set at attempt start and replicated over.
This enables analytics dashboards to answer questions like "what sources trigger the most task runs?" or "how often do warm starts occur?" without parsing JSON. The run region was already available via the worker_queue column, so this completes the picture of task run provenance in ClickHouse.
The changes touch the replication service, the ClickHouse schema, the Prisma schema, and the run attempt system — all the pieces needed to extract, store, and populate this data end-to-end.
View Original GitHub Description
Adds three new top-level columns to the ClickHouse task_runs_v2 table primarily for analytics:
trigger_source/root_trigger_source- extracted from the existing TaskRun.annotations JSON during WAL replicationis_warm_start- new nullable boolean on TaskRun in Postgres, set in the existing taskRun.update() at attempt start (no additional write). null until the first attempt starts.
Run region is already available via the existing worker_queue column in ClickHouse.