Skip to content

fix(signage-manager): match schedule conflicts to the player - #537

Merged
MrYuion merged 2 commits into
developfrom
fix/signage-manager-schedules
Oct 2, 2026
Merged

MrYuion merged 2 commits into
developfrom
fix/signage-manager-schedules

Conversation

@MrYuion

@MrYuion MrYuion commented Oct 2, 2026 •

Copy link
Copy Markdown
Collaborator

Schedule conflicts and the timeline did not match what the player does:

  • Disabled playlists: they still counted as conflicts.
  • Validity dates: checked by whole day only, and a schedule's end date did not cut blocks.
  • Past conflicts: conflicts from earlier today were still reported.
  • DST: times skipped by a DST change were drawn.
  • Playlists without schedules: treated as takeovers.
  • Zone search: searching for a display by zone name missed most zones.

Changes

  • Disabled playlists: conflicts use only enabled takeover playlists.
  • Validity dates: runs respect playlist and schedule validity to the minute.
  • Past and running conflicts: conflicts that already ended are dropped. Runs still playing from yesterday are included.
  • Single passes: they play alone ahead of timed runs on the player, so they conflict only with other single passes.
  • DST: skipped clock times are not drawn.
  • No schedules: playlistSchedules with no schedules gives one all-day, non-takeover schedule. It is exported once and replaces the copy in playlist-item-details.
  • Labels: play-once label and all_day from one helper.
  • Disabled blocks: "Disabled" in the aria label and tooltip.
  • Conflict scan: touching runs are merged, and results are cached by assignment set.
  • Smaller fixes: [(ngModel)], linkedSignal for the tab, and hour labels in the locale.

Testing

  • Unit tests for each fix, with Sydney time pinned for DST. Each fails without its fix.
  • nx test signage-manager (979) and nx build signage-manager pass.
  • Local PlaceOS stack: 13/13 checks pass. These covered disabled playlists, mid-day validity, schedule end dates, past conflicts, single vs timed, zone search, tab sync, disabled labels, en-GB hours, no-schedule playlists and Sydney DST.

Merge order

Conflicts with #531 only in apps/signage-manager/USER_STORIES.md. Based on develop.


Changes made by Claude Opus 5.5 (1M context) in Claude Code, running in T3 Code.

🤖 Generated with Claude Code

@vercel

vercel Bot commented Oct 2, 2026

Copy link
Copy Markdown

Deployment failed for project frontend-templates with the following error:

Resource is limited - try again in 24 hours (more than 100, code: "api-deployments-free-per-day").

Learn More: https://vercel.com/placeos?upgradeToPro=build-rate-limit

@greptile-apps

greptile-apps Bot commented Oct 2, 2026 •

Copy link
Copy Markdown

RetriggerConfidence Score: 5/5

[Medium risk] Refines schedule conflict detection and timeline display logic.

The PR appears safe to merge based on the changes since the previous review.

What we checked:

  • Spring-forward run ends early: No. playedRun calculates the end from elapsed play time, and the Sydney tests check both the block end and a later takeover conflict.

Summary

This PR makes the signage timeline and takeover-conflict checks follow the player’s schedule rules. It also improves schedule search and timeline labels.

  • Timeline blocks respect playlist and schedule dates, skip clock times lost to daylight saving, and treat playlists without schedules as all-day normal content.
  • Conflict checks use enabled playlists, ignore finished overlaps, and compare single passes separately from timed runs.
  • Schedule lists search by zone name and keep their selected tab in sync with the route.
  • Timeline hour labels follow the locale, and disabled blocks include “Disabled” in their text and tooltips.

Reviews (2) · Last reviewed commit: "fix(signage-manager): end schedule runs ..."

Comment thread apps/signage-manager/src/app/schedules/signage-schedule.util.ts Outdated
@MrYuion

MrYuion commented Oct 2, 2026

Copy link
Copy Markdown
Collaborator Author

LGTM

- Ignore disabled playlists in conflict detection.
- Respect playlist and schedule validity to the minute.
- Drop conflicts that already ended, and include runs still playing
  from the previous day.
- A single pass does not conflict with a timed takeover.
- Do not draw times skipped by a DST change.
- Playlists without schedules play all day, never as a takeover.
- Search displays by every zone name, label disabled blocks, and use
  the locale for hour labels.
On a spring-forward day, playedRun added the play length to clock
minutes, so a run ended an hour early on the timeline and conflicts in
the extra hour were missed. The end now comes from the elapsed length,
as on the player, then is cut at valid_until. On the fall-back day a run
is never shorter on the clock than its length.
@MrYuion
MrYuion force-pushed the fix/signage-manager-schedules branch from 7cff910 to e992ca1 Compare October 2, 2026 05:45
@MrYuion
MrYuion merged commit 84e438c into develop Oct 2, 2026
1 of 2 checks passed
@MrYuion
MrYuion deleted the fix/signage-manager-schedules branch October 2, 2026 05:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant