task
A CLI for .tracker/tasks/ task trackers: one dir per task, one TASK.md each. Stdlib only, no
regular expressions.
Format
.tracker/tasks/{open,closed}/<ID>-<slug>/TASK.md (attachments allowed beside it)
# Task title
**Created**: 2026-04-21
**Priority**: 2
**Closed**: n/a
... free form description ...
- The dir is
<ID>-<anything>; only the ID before the first dash is read (01-is ID 1). - IDs are integers 1..N, unique across
open/+closed/, no gaps: deleting a task moves the highest-ID task into the hole. - The header fields come in any order, each once, followed by an empty line.
**Created**is an ISO date (or datetime).**Closed**isn/ainopen/, and an ISO date no earlier than**Created**inclosed/.**Priority**is a positive integer, higher is more urgent.- Files directly in
open/orclosed/(e.g..gitkeep) are ignored.
task.Task is one task, validated in __post_init__ (wrong type: TypeError, bad value: ValueError). It can
be built in memory: its TASK.md need not exist, but its extra_files must. task_from_path(task_dir) reads a
task dir into a Task.
task/task.py [--dir <tasks_dir>] {ls,create,check}
--dir defaults to ./.tracker/tasks. Logs go through logging; set TASK_LOGLEVEL (default INFO).
python task/task.py ls # open tasks, by priority then ID
python task/task.py ls --include_closed # plus closed ones
python -m task.task -d .tracker/tasks ls # same, via the installed package (`pip install .`)
check parses every task (so any format violation raises), then raises ValueError on duplicate IDs, an ID
gap (IDs must be 1..N), or a task whose **Closed** does not match its open/ / closed/ dir. create is
not implemented yet (task 1).
Tests
python -m pytest test/
One broken rule per case:
test/unit/test_task.py—Taskfield rules, on in-memory tasks.test/unit/test_task_from_path.py— the on-disk format: dir name, header, dates, extra files;mainon a throwaway tracker.test/unit/test_task_check.py—checkin-process (handle_command) on in-memory tasks: IDs and open/closed status.
python test/lint/run_all.py runs ruff and pylint.
Acknowledgments
Inspired by tsoding's tatr: tasks as plain files in the repo, driven by a small CLI.
Metadata
Release files for task-tracker-py 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| task_tracker_py-0.1.0.tar.gz | 5.9 kB | Without provenance | Details |
Release files / task_tracker_py-0.1.0.tar.gz
| Download URL | task_tracker_py-0.1.0.tar.gz |
|---|---|
| Size | 5.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0d37857ef4d8502b72aae5cece3b460a5a5c45b18594e0cdfb0319d0b900f41d
|
|
BLAKE2b-256 checksum How to use checksums |
4094444ef49580f5ee6a60a0fb4dc5f74fe0821ff6e5c0fec91f6923213ec6b2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/5.1.1 CPython/3.12.4
|
Security for task-tracker-py 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.