The rules, with no files and no UI:
- Segment: one stretch of work; it can only be built with end > start.
- WorkDay: segments filed under one date, even past midnight.
- Journal: every work day plus what's happening now (Idle, OnBreak,
Working). Start opens a work day that stays open until End day; a
break longer than a setting opens a new day (the safety net for a
forgotten End day). Segments never overlap, even across days.
- snapshot(): the days with the running session included, so analysis
and export never special-case it.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
- clock: the system clock, with a time zone override (name or fixed
offset) and a manual adjustment; Start/Pause record whole minutes so
displayed times and totals always add up.
- format: every time, date and duration shown in the app goes through
Formatter (12h/24h, 7h 45m / 7:45 / 7.75); parse_time reads both 12h
and 24h input (22:30, 2230, 22h30, 10:30pm, 10p).
- resolve: turns a typed "01:30" into the moment meant, so an end time
before the start is the next day (night shifts).
- range: date ranges (week, month, last N days).
Co-Authored-By: Claude Opus 5.5 <[email protected]>
A terminal app (ratatui) to track work shifts, built on stable Rust,
edition 2024.
- Cargo.toml: eight well-known crates, each with a comment saying why:
ratatui (UI), jiff (dates and time zones), serde + toml + serde_json
(files), directories (per-OS folders), arboard (clipboard), anyhow.
- .cargo/config.toml: static C runtime on Windows, so the .exe runs
without the Visual C++ Redistributable; `cargo lint` alias.
- rustfmt.toml: one formatting style for `cargo fmt`.
Co-Authored-By: Claude Opus 5.5 <[email protected]>