Skip to content

v5.4.0

Latest

Choose a tag to compare

@github-actions github-actions released this 12 Nov 04:54
· 8 commits to main since this release

Added

  • Why this label. Clicking an entry on the dashboard timeline says
    what labelled it: the rule (file, number and what it matches), your
    tag, or the local model with its share and the title words behind it.
    The Inbox shows why it guesses a label under each item instead of in
    a tooltip.
  • Templates. tock setup --template client|own adds the categories
    and rules for client work or your own projects that you don't have
    yet. It shows the plan first, never touches what is yours, labels from
    now on unless --past, and tock undo takes it back. A fresh
    tock setup asks which to start with.
  • Rules from a date. since = 2026-11-20T14:05:00 on a rule makes it
    label only time from then on, so a new rule need not relabel the past.
  • Dashboard settings. The gear in the top bar (or ,) turns the
    groups and features on and off as tock choice does, sets your work
    hours, session lengths and invoice details (with clients, which a
    project picks in the Library), edits the apps and sites tock never
    records, and picks the theme. config.toml keeps its comments.
  • Zoom. The dashboard timeline zooms to a quarter of an hour (⌘-scroll,
    pinch, double click, shift-drag, or the − + buttons), with a strip of
    the whole day to drag. The tock window zooms with ⌘+, ⌘− and ⌘0 and
    remembers the size.
  • Time trackd did not record is shown, with why: a crash, a stop,
    an update or config.toml not loading. The TUI's today tab lists it
    under the day, the dashboard draws a "Not recording" lane under the
    timeline and a line under the week's bars. Sleep, a locked screen, a
    logout and a shutdown are not counted; a restart only explains the time
    when the OS said the session was ending as trackd stopped, so a stop by
    hand before a restart still shows. Time with no Accessibility permission
    shows apart as "apps only". None of it is added to tracked or idle time.
  • Library in the dashboard: categories, projects (with an hourly
    rate) and goals, with their time in the last 30 days and when each was
    last seen. Add, edit, rename, archive and merge look-alike names there.
  • Rules in Library: every rule in the order tock checks them, with the
    time each labelled lately and which never match. Add, edit or delete a
    rule, learned ones too, with a preview of what it would change; every
    edit can be undone.
  • Invoice… in the week's Export menu makes the tock invoice PDF for
    a project with a rate, showing hours and total before you save.
  • trackd keeps a copy of your database every day while you're away, and
    tock keeps one before an update changes it. tock restore lists them
    and puts one back. [backup] keep sets how many daily copies stay
    (default 7).
  • tock doctor shows the last copy and whether the database checked out;
    --deep runs a full check. A damaged database shows in tock status
    and as a notice.

Changed

  • trackd asks the browser for the tab's address only when the window or
    its title changes, and otherwise every 10 seconds instead of every 2.
    Less CPU with a browser in front.
  • The dashboard answers clicks. Hours, work blocks and lane names zoom
    the timeline; kinds, categories and apps pick out their bars; a day in
    the week's bars, the score line or the month calendar opens it; Top rows
    lead to the Inbox or the Library; the status strip links to the rules.
    The date in the top bar steps by day, week or month with the view and
    opens a calendar. ? lists every key and gesture.
  • Billed time says so everywhere. Learning a rule from the inbox (TUI,
    CLI or dashboard) now says when it relabels time on an issued invoice,
    as tagging does, and the TUI marks billed rows with the invoice number.
  • Focus, Day routine and Billing are groups you can turn off. tock choice focus off hides sessions, the focus score and every focus
    notice in the TUI, the dashboard, the menu bar and the notch, and trackd
    stops them; tock choice billing off hides rates and invoices and stops
    tock invoice issue; tock choice routine off stops the day's notices.
    Each is one line in config.toml, and the members keep their own settings
    while their group is off. All three are on unless you turn them off, so
    nothing changes for you on upgrade. tock choice now lists the switches
    by group.
  • Invoices are issued and kept, and never change after. tock invoice
    now previews (a PDF marked DRAFT, nothing stored), and tock invoice issue issues: the next YYYY-NNNN number, stored with its PDF in the
    database and in ~/.local/share/tock/invoices/. Later rule edits,
    relabels or a new rate change nothing in it; tock invoice check shows
    how today's labels differ. Corrections are a void with a reason and a
    replacement with --supersedes. tock invoice show prints an issued
    invoice; --json gives the stored record byte for byte. Amounts are exact (integer cents), days
    can be rounded ([invoice] round), and an invoice can carry your and the
    client's tax numbers and one tax rate. Projects can set billable = false and client = "…". The old YYYYMM-project numbers are retired,
    and PDFs made before this release are not imported. The dashboard's
    Invoice… saves a DRAFT preview or issues, with the same checks as
    the CLI. Billed time is underlined on the timeline, and relabelling it
    says the invoice stays as issued.
  • Linux updates through the sync folder are off until you turn them
    on, and never trust a key by themselves.
    Before, a Linux machine
    trusted the first key it found in the sync folder, so anyone who could
    write there first could run code on it. Now: make bootstrap-hint on
    the Mac prints the key's fingerprint, tock update trust <fingerprint>
    on the Linux machine pins it, and update = true under [sync] turns
    updates on. A machine that already pinned a key keeps it, but needs
    update = true. An update that fails part way puts both binaries back.
    The one-time install command now checks both files against sums it
    carries itself.
  • Claude is off until you turn it on. Having Claude Code or
    ANTHROPIC_API_KEY no longer turns on suggestions, summaries or
    tock ask. tock choice claude on turns them on and lists what is sent.
    If you used them before, run it once; the TUI says so the first time.
  • trackd records nothing while config.toml does not load, for
    example after a typo or with a setting from a newer tock. Before, hidden
    apps and sites could be recorded with their titles and URLs in that
    state. tock status, tock doctor, the TUI, the dashboard and the menu
    bar say why, and recording starts again within seconds of the fix.
  • trackd upgrades the database in a short-lived child process, so the
    safety copy taken before an upgrade no longer leaves trackd about 7 MB
    larger until its next restart.
  • An older trackd keeps running after a newer tock updates the
    database
    , as long as the update only adds to it (all of them so far).
    Before, a trackd restarted after brew upgrade but before tock setup
    refused the database and stayed down with no word outside tock doctor.
    When an update does need a newer trackd, trackd stops, and tock status, tock doctor, the TUI and the menu bar say "trackd is older
    than the database" with the command that fixes it for your install.
  • Failed writes and dropped samples are counted and shown. tock status starts with write failed! or dropped! for 24 hours after
    one, and tock doctor says when and how many. Before, both were only in
    trackd's log.
  • tock bug-report writes a file to attach to an issue: doctor's
    checks, your config with every text value removed, the end of the logs
    without titles or URLs, and when trackd ran. It sends nothing.
    tock doctor --json prints the checks for scripts.
  • trackd and the menu bar keep their previous log as trackd.log.1 and
    tockbar.log.1 when the log passes 10 MB, instead of emptying it.
  • Fix hints follow how tock was installed: tock setup for Homebrew,
    opening tock for the .dmg, make install from source.
  • tock restore refuses while something else has the database open
    and names it, for example a tock web you started by hand. Before, the
    copy was put back under it and that process went on using the old file.

Fixed

  • Private windows in more browsers. Microsoft Edge, Vivaldi, Chromium
    and the beta, dev and nightly builds of Chrome, Edge and Brave were
    recorded like any app, so an InPrivate or incognito window's titles
    were kept. They now get the URL of the front tab, as Chrome does, and
    nothing at all from a private window. Firefox forks (Zen, LibreWolf,
    Waterfox, Floorp, Developer Edition, Nightly) are handled like Firefox.
    Opera, Dia, Orion, Tor Browser, Mullvad Browser and a few others keep
    the app only, without titles, because tock cannot tell their private
    windows apart. The first time you use one of the newly supported
    browsers, macOS asks whether trackd may control it.
  • Security: the invoice preview and tock report --open wrote to the
    shared temp folder under a name anyone could guess, so on a Linux machine
    with other users a planted link could make them overwrite one of your
    files. They now write to ~/.local/state/tock/drafts and reports.
  • tock invoice issue refuses while [invoice] name is empty, and the
    preview says so: an issued invoice never changes, so one without your
    name could only be voided.
  • tock invoice check shows minutes and seconds when a change is too
    small for hundredths of an hour, instead of two equal numbers.
  • tock project add and set take --rate, --client and --billable,
    so billing no longer needs rules.toml edited by hand.
  • tock <command> --help prints that command's lines and works before
    trackd has recorded anything; a mistyped flag shows the command's lines
    instead of all of the usage.
  • Reading a day no longer slows down as history grows: it scanned every
    span before the day (8 ms after six months, 2 ms now).
  • Two tock programs starting at once after an update could both try to
    update the database.