Feature Summary
This file tracks the most important user-visible behavior changes in wheneverd.
It complements CHANGELOG.md by staying high-level and focusing on what users will notice.
How to update
- Update
## Unreleasedin commits that change user-facing behavior (CLI UX, defaults, generated output, breaking changes). - Skip internal refactors, tests, and docs-only tweaks unless they affect users.
- Keep entries short, written from the user’s point of view.
- On release, move items from
## Unreleasedinto a new## x.y.zsection that matches the gem version.
Unreleased
0.3.0
- Schedule DSL:
commandaccepts argv arrays, adds ashellhelper for/bin/bash -lc, andwheneverd initincludes examples. - Adds
wheneverd status(showsystemctl --user list-timers+systemctl --user statusfor installed timers) andwheneverd diff(diff rendered units vs files on disk). - Adds
wheneverd validateto validate renderedOnCalendar=values viasystemd-analyze calendar(and with--verify, runssystemd-analyze --user verifyon temporary unit files).
0.2.1
- Removes an unused filtering metadata keyword argument from the schedule DSL.
0.2.0
- Adds
wheneverd linger enable|disable|statusfor managing systemd user lingering vialoginctl.
0.1.0
- The
wheneverdCLI is implemented using Clamp (--help, usage errors inERROR: ...format,--verbosefor details). - The gem includes a small “whenever-like” domain model (interval parsing, durations, triggers, schedules).
- The gem can load a Ruby schedule DSL file via
Wheneverd::DSL::Loader.load_file. - Schedule DSL supports
every(period, at: ...) { command("...") }entries (multiplecommandcalls per entry). - Schedule DSL supports multiple calendar period symbols per
everyblock (e.g.every :tuesday, :wednesday). - Supported
everyperiods include interval strings/durations, calendar shortcuts (:hour,:day,:month,:year), day selectors (:monday..:sunday,:weekday,:weekend), and standard 5-field cron strings. at:supports a string or an array of strings (for calendar schedules), like"4:30 am"or"00:15".- The gem can render systemd
.serviceand.timerunits viaWheneverd::Systemd::Renderer.render. - Generated unit basenames include a stable ID derived from the job’s trigger + command (reordering schedule blocks won’t rename units).
- Interval timers include both
OnActiveSec=andOnUnitActiveSec=to ensure a newly started timer has a next run scheduled. - The gem can write/delete generated unit files via
Wheneverd::Systemd::UnitWriterandWheneverd::Systemd::UnitDeleter. - The
wheneverdCLI supportsinit,show,write,delete,activate,deactivate, andreloadfor working with schedule files, unit directories, and managing user timers viasystemctl --user. wheneverd write/wheneverd reloadprune previously generated units for the identifier by default (use--no-pruneto disable pruning).- The
wheneverd currentcommand prints the currently installed unit file contents from disk for an identifier. - The
wheneverd delete/wheneverd currentcommands only operate on units matching the identifier and generated marker. wheneverd initprints whether it wrote or overwrote the schedule template.- Schedule DSL supports
every :rebootas a boot trigger (rendered asOnBootSec=1).