Keep uninitialized projection rows distinct during rolling deploys

Keep uninitialized projection rows distinct during rolling deploys

When moving a PostgreSQL read-time calculation into persisted fields, distinguish uninitialized rows from evaluated-empty rows. A NULL sentinel can preserve a compatibility lookup until a writer or backfill initializes the projection. Do not immediately default new rows to evaluated-empty: a new application instance may create the row while an old worker records an event without updating the projection, causing the reader to suppress a valid result. Drain old event writers before backfilling empty projections. This bridge preserves correctness but retains old lookup cost for uninitialized rows; it does not replace writer-version coordination.

Applies when: persisted derived fields replace historical event calculations during a rolling deployment. Keywords: PostgreSQL projection backfill rolling deployment sentinel old writers compatibility