Skip to content

v0.11.0

Latest

Choose a tag to compare

@github-actions github-actions released this 10 Oct 15:49
v0.11.0

things-cli v0.11.0 — smaller JSON for agents

JSON listings are now sized for agents, and there is a new things doctor for checking database access. Most of the rest is a refactor of the write and import code, with no change in behaviour, plus a set of fixes to how --when times are sent and checked.

Behaviour changes

  • -j listings print a default set of fields. list views, search and projects used to print every field of every row. They now print the fields an agent needs to pick an item and act on it: uuid, title, type, status, start, startBucket, dates, reminder, project, area and heading titles, tags, repeating and checklist progress. Notes, parent uuids, sort indexes and the creation date are left out. On a 94-task list the output drops from 90 KB to 29 KB. --fields all prints the full record exactly as before, and things show <uuid> -j is unchanged. (#454)
  • --fields (-f) picks the keys yourself. things anytime -j --fields uuid,title,deadline prints only those keys, in that order. Unknown names are refused with the unknown field token and the list of valid names. (#451, #459)
  • Weekdays and evening times are sent and checked. friday and friday@9pm are sent as the date Things gives them (the next such day after today, so saturday@9pm on a Saturday is next week) and read back. evening@6pm is sent as evening@18:00 and checked to be in This Evening today. import accepts and resolves them too. (#458)
  • A --when the CLI cannot check is reported as not confirmed. An abbreviation such as fri or a phrase such as next friday that Things understood used to print the item as if confirmed. add, project add, edit and import now report it as not confirmed (when not checked) (JSON confirmed: false, reason: when), exit 0. (#453, #458)
  • Dated --when times are sent as a date. today@6pm, tomorrow@9am and <date>@<time> are sent to Things as YYYY-MM-DD@HH:MM and read back, in add, edit and now import, so a time Things misfiles is caught. A bare 12-hour time such as 9:30pm is sent as 21:30. (#443, #446, #449)
  • Project refs say "project not found". open --project and project edit refuse a ref that names a to-do, and every kind of miss (title, row number, uuid) now reports the project kind. (#448, #444, #445)

New

  • things doctor checks that the Things database can be found and opened, and reports a permission denial (Full Disk Access) as such. (#447)

Also

  • A padded --list, --area or --heading name is sent trimmed when only the trimmed name matches. A title that really has the spaces still matches as typed. import sends names as given. (#456)
  • The missing-area and "--heading needs a list" warnings use one wording across add, edit and import, and a list given by uuid is named by its title. (#450)
  • Large refactors of the import, edit and database code, each checked against the previous binary with a comparison runner now in tools/compare/. (#431–#455)
  • The README puts Install first. (#457)
  • The bundled skill and the docs at things.rlew.io are updated. Run things skill install after upgrading.

Requirements

macOS with Things3 installed. Binaries for Apple Silicon (darwin_arm64) and Intel (darwin_amd64).


What's Changed

Other Changes

  • refactor: let each error type fill its own --json error payload by @ryanlewis in #431
  • refactor: share small helpers and the --when read-back verdict by @ryanlewis in #433
  • fix(add): check every field before --create-tags creates a tag by @ryanlewis in #434
  • refactor(db): build alias-specific SQL with functions and share the row loop by @ryanlewis in #432
  • test(db): add shared test helpers and move raw TMTask inserts onto the fixture by @ryanlewis in #436
  • fix: check every edit field before --create-tags creates a tag by @ryanlewis in #435
  • test: keep import creation-dates in step with the pinned clock by @ryanlewis in #437
  • refactor: split importcheck.go and share the --when rules with import by @ryanlewis in #438
  • fix(edit): check the auth token before --create-tags creates a tag by @ryanlewis in #439
  • refactor: build the target warnings in one place by @ryanlewis in #440
  • test: add days to Things dates with AddDays, not the day bits by @ryanlewis in #441
  • refactor: simplify code churned through 0.10.0 by @ryanlewis in #442
  • fix(when): send a bare 12-hour --when time as HH:MM and read it back by @ryanlewis in #443
  • fix(open): refuse a --project ref that is not a project by @ryanlewis in #444
  • fix(project): match only projects by title for project edit by @ryanlewis in #445
  • fix(when): send a dated --when time as YYYY-MM-DD@HH:MM and read it back by @ryanlewis in #446
  • fix(db): report permission denial in database discovery; add things doctor by @ryanlewis in #447
  • fix(lookup): report a project not found for every ref shape in a project lookup by @ryanlewis in #448
  • fix(import): send a dated when time as YYYY-MM-DD@HH:MM and read it back as sent by @ryanlewis in #449
  • feat(output): add --fields to limit JSON listings to named keys by @ryanlewis in #451
  • chore(warnings): one wording for the missing-area and heading-needs-a-list warnings by @ryanlewis in #450
  • refactor(edit): decide whether an edit is sent in one place by @ryanlewis in #452
  • fix(when): report a --when the read-back cannot place as not confirmed by @ryanlewis in #453
  • test: tidy date helpers and rows.Err, rename the unlogged rule, add the binary comparison runner by @ryanlewis in #455
  • feat(output)!: print a default field set on -j listings, with --fields all for the full record by @ryanlewis in #454
  • fix: send a padded list, area or heading name trimmed when only that form matches by @ryanlewis in #456
  • docs(readme): move Install up and mention the import read-back of created items by @ryanlewis in #457
  • fix(when): send weekday names as their date and check evening@time, in add, edit and import by @ryanlewis in #458
  • feat(list): add -f as the short form of --fields by @ryanlewis in #459
  • docs(release): add v0.11.0 release notes header by @ryanlewis in #460

Full Changelog: v0.10.0...v0.11.0