Problem
The schedule import can't represent a set whose date is known but time is not. If a CSV row has a Date but no Start Time, the date is silently dropped:
computeTimes (diff-schedule) only builds timeStart when both date and startTime are present — date alone yields timeStart = null.
- The
sets table has no standalone date column; the date only ever exists inside the time_start timestamp. SetPayload and the create_sets INSERT carry time_start / time_end, never a bare date.
So importing a date-only CSV creates sets with time_start = null and the date is lost entirely. (Re-importing date-only over sets that already have times preserves the existing times — preserve-on-omit — but still doesn't apply the CSV date.)
This is a real use case: festival lineups are often announced per-day before set times are finalized.
Scope of work
- Schema — add a way to record a date without a time. Likely a nullable
sets.date column distinct from time_start, or an agreed convention. Needs a migration.
- Diff / commit —
computeTimes, SetPayload, commit_schedule__create_sets / __update_sets need to carry and persist the date independently of time_start. Decide interaction with the existing preserve-on-omit behavior.
- CSV —
Date alone (no Start Time) becomes a valid, meaningful input.
- UI research (do this first) — figure out how a date-only / untimed set should render in the schedule and lineup views, and how an entirely untimed set (
time_start = null, no date) currently renders. The design of 1–3 depends on the answer.
Context
Surfaced while reviewing the schedule-ingestion PR (#31). Out of scope for that PR — this is a feature, not a fix.
Problem
The schedule import can't represent a set whose date is known but time is not. If a CSV row has a
Datebut noStart Time, the date is silently dropped:computeTimes(diff-schedule) only buildstimeStartwhen bothdateandstartTimeare present — date alone yieldstimeStart = null.setstable has no standalone date column; the date only ever exists inside thetime_starttimestamp.SetPayloadand thecreate_setsINSERT carrytime_start/time_end, never a bare date.So importing a date-only CSV creates sets with
time_start = nulland the date is lost entirely. (Re-importing date-only over sets that already have times preserves the existing times — preserve-on-omit — but still doesn't apply the CSV date.)This is a real use case: festival lineups are often announced per-day before set times are finalized.
Scope of work
sets.datecolumn distinct fromtime_start, or an agreed convention. Needs a migration.computeTimes,SetPayload,commit_schedule__create_sets/__update_setsneed to carry and persist the date independently oftime_start. Decide interaction with the existing preserve-on-omit behavior.Datealone (noStart Time) becomes a valid, meaningful input.time_start = null, no date) currently renders. The design of 1–3 depends on the answer.Context
Surfaced while reviewing the schedule-ingestion PR (#31). Out of scope for that PR — this is a feature, not a fix.