Domain language for Tunarr. It covers the channel-programming editor in @tunarr/web and the media library lifecycle in @tunarr/server; extend it as other areas are documented.
Missing: The state of a program or grouping that a scan no longer finds. The row stays in the database, lineups and search until it is found again or purged. Avoid: deleted, removed, unavailable (a library state, not a program state)
Trash: Every missing program and grouping, presented to the user for review before purge. Avoid: recycle bin, deleted items
Purge: The permanent removal of programs and groupings, after their lineup entries have been replaced with flex. The only way program rows leave the database. Avoid: delete, cleanup, empty (except in the UI action "Empty trash")
Purge scope: What a purge removes: the trash or one media source. A media source row is deleted only after its purge has emptied it. Avoid: target, filter
Lineup:
The ordered list of programs being edited for a channel, custom show, or filler list. Each entry carries a uiIndex, an originalIndex, and a cumulative startTimeOffset; the list tracks a dirty flag (modified since load) and keeps an original copy for reset. A pure domain module — no React or store dependencies.
Avoid: playlist, schedule (when you mean this editable ordered structure)
LineupSchedule: A scheduling rule — time slots or random slots — that the server evaluates to produce a channel's programming. Distinct from a Lineup: the schedule is a rule, the lineup is the resulting editable program list. Avoid: lineup, schedule
Program lookup:
A Record<id, ContentProgram> cache used to materialize condensed program references into full content programs. Lives outside the Lineup and is passed into materialization.
Avoid: program map, content map
Editor: The client working state for one editable entity (channel, custom show, or filler list): the entity's metadata plus its Lineup. Avoid: form, page state
Infinite schedule: A named set of Placements that several channels can share. Each channel generates its own timeline from it, extended forever as time passes. Distinct from a LineupSchedule, which belongs to one channel and produces a fixed Lineup. Avoid: dynamic schedule, schedule template
Slot: A reusable definition of what plays, in what order, and with what filler. A slot carries no timing and no length. A library slot can be placed by any number of infinite schedules. A private slot belongs to one schedule. Avoid: slot template, block
Placement: One use of a Slot inside a Infinite schedule. It holds when the slot plays, how much of it plays, and how it fits the schedule's grid. Avoid: slot instance, schedule slot
Preset: A built-in starting point for a new Infinite schedule, such as time slots or random slots. Applying a preset creates an ordinary infinite schedule, which keeps no link to the preset. Avoid: template, mode, schedule type
Spill over: How far content before an anchored Placement may run past the anchor's start time. Beyond it, the gap before the anchor gets filler or flex instead. Avoid: overflow, run-over (in infinite schedules)
Max start delay: How late an anchored Placement may start when earlier content ran long. Beyond it, the placement is skipped for that day. Avoid: lateness, grace period