Run it in your browser
Runs fully in your browser, files never leave your device.
Drag and drop the file onto this box, or use the picker. Columns: person, date, start, end, role. Times are HH:MM, and an end before the start counts as overnight.
Minimum rest hours, maximum weekly hours and coverage rules. Leave empty to use the config below, which matches examples/config.json. Clear the box entirely to run on the built in defaults (11 hours rest, 40 hours per week, no coverage rules).
Lint report
What it does
Clopen detection: rest between consecutive shifts below the configured minimum, 11 hours by default
Overlapping and double-booked shifts for the same person, including overnight shifts
Weekly hours breaches per person, with weeks starting on Monday and a configurable maximum
Coverage checks: required people per role per day, with per-date overrides in the config
A weekend fairness table in every report, and exit code 1 on error findings so the check can gate a publish step
Install and usage
Requires Node.js 20 or later. There are no dependencies to install.
git clone https://github.com/aamirtechs/roster-lint.git
cd roster-lint
node src/cli.js examples/roster.csv --config examples/config.json --out-dir out
The roster CSV needs person, date, start, end and role columns, with times in HH:MM format. If the end time is before the start time, the shift counts as overnight. Outputs are report.md and findings.csv.