Skip to content

tasks v1.1.0

Choose a tag to compare

@budhash budhash released this 01 Jul 22:56
· 10 commits to main since this release
0654ea4

First-class milestone support — opt-in and fully backward-compatible.

Added

  • Milestone dimension. A task may carry one @milestone=<id-or-alias> tag; a task without it resolves to an implicit sentinel bucket (default, configurable via TASKS_MILESTONE_SENTINEL, which must not match the M<n> id pattern). The sentinel is never written to task lines, so existing TASKS.md files round-trip byte-for-byte.
  • Optional # Milestones registry mapping id → alias → status → title. When present it powers alias resolution (@milestone=alpha ≡ @milestone=m1) and rollups; when absent, milestones are freeform (grouped by raw value).
  • CLI: new … --milestone, set T-N --milestone (""/clear/sentinel-name clears), list --milestone (alias-resolved; default = unassigned), next --milestone, a new milestone rollup with a milestone <id> detail view and a milestone --table (milestone × features × status) view, and a migrate-tags-to-milestone <tag> helper for projects moving off the interim @tags=<id> convention. Migration leaves a task with a conflicting @milestone= untouched and reports it (never silently drops the label). show now displays a resolved Milestone: line.
  • validate warns (exit 0) on an @milestone= value not in the registry, and on registry-health problems (duplicate ids, colliding aliases), when a registry exists; it never hard-fails on milestone data. Assigning an unknown milestone via new/set prints a non-fatal freeform warning.

Upgrading

Vendored copies: ./tools/tasks.py selfupdate (1.0.x → 1.1.0). Projects that used the interim @tags=<id> convention can then run ./tools/tasks.py migrate-tags-to-milestone <id>.

Fully backward-compatible: a TASKS.md with no milestone data behaves exactly as before.

Full changelog: https://github.com/budhash/tasks/blob/main/CHANGELOG.md