tix-tracker 0.12.0

A terminal issue tracker: markdown + YAML frontmatter issues with a kanban TUI and CLI
Documentation
# Listing issues

`tix list` answers "what is mine to do", one line per issue:

```console
$ tix list
NUM  ID        TITLE
19   K3M7QZ8A  Fix the login redirect
23   4PBRTQ19  Write the release notes
```

Three things are decided for you, and each has an escape hatch.

## The scope: your issues, in the board's entry column

The default listing is **scoped**:

* **yours** — the same identity `tix create` stamps when you pass no `--assignee`
  (your git author identity, when one can be derived; a checkout with no identity
  is scoped by column alone rather than to nothing), and
* **not yet started** — the board's **entry column**: the first configured column
  that is not the triage inbox. On the board `tix init` writes that is `todo`, and
  a board that renames it still gets a meaningful default.

`--all` lists every active issue, and any selection you name yourself *replaces*
the default rather than narrowing it — so `tix list --filter 'scope:triage'`
answers about the inbox instead of quietly intersecting it with `todo`:

```console
$ tix list --all                                    # the whole board
$ tix list --status "in progress"                   # one column
$ tix list --filter "label:bug overdue"             # the filter grammar
$ tix list --project p-3f9a2c                       # one project's members
$ tix list --epic e-7c4a91                          # one epic's members
```

`--sort`, `--group`, `--columns`, `--show` and `--format` order and print the
listing; they leave the scope alone. The full board is `tix render`.

## One line per issue

The default columns are the identity pair and the title — the sequential
`number`, the canonical 8-character `id` (stable across clones and branches,
unlike the number), and the title. An issue written before the id schema renders
`-` there rather than a blank cell, so "no id recorded" stays visible. The title
is **cropped** to the terminal's width, with an ellipsis when anything was
dropped, so every issue occupies exactly one line and each line lands exactly on
the terminal width. Piped output has no width to crop to, so it prints the whole
title.

`--columns` chooses and orders the columns; the full set is
`num,id,title,status,priority,cycle,milestone,reviewer,start,due,overdue,blocked,relations,progress,projects,epics,category,archived,wip,health`.

```console
$ tix list --columns num,title,status,priority
NUM  ID        TITLE                      STATUS       PRIORITY
19   K3M7QZ8A  Fix the login redirect     todo         high
```

A column that needs a service read is asked for by naming it: `--columns blocked`
carries the blocker, `--columns children` the rollup, `--show relationships`
appends both relationship columns, and `--show progress`, `--show wip`,
`--show health` and `--show category` append theirs.

## Structured output

`--format` writes the **displayed columns** as records under one root, so
`--columns` chooses the fields:

```console
$ tix list --format toml
[[issues]]
num = "19"
id = "K3M7QZ8A"
title = "Fix the login redirect"
```

`xml`, `yml` (or `yaml`) and `toml` are the formats. Records are the very cells
the table would have shown, so a structured listing and a table listing never
disagree about what a column holds. Group sections are a plain-text affordance
and are not part of a record: `--format` renders a flat sequence whatever
`--group` says.

## `tix ready`

`tix ready` is the listing a working session opens with: every issue that nothing
blocks and that has not begun, ordered by priority (highest first), then oldest,
then by number — so the **first row** is the issue to pick up next.

```console
$ tix ready --limit 3
NUM  ID        PRIORITY  TITLE
19   K3M7QZ8A  high      Fix the login redirect
23   4PBRTQ19  medium    Write the release notes
31   8XWQ2M5F  low       Tidy the release checklist
```

"Not begun" is read from the board: the column's workflow category (`backlog` and
`unstarted` are startable; `active`, `completed` and `canceled` are not), bounded
by the board's own order — nothing is next after the column new work lands in.
That second half matters on a board that leaves its working columns unmapped, as
`tix init` deliberately does: there every non-terminal column reads as
`unstarted`, and the order is what keeps work already under way off the list.

Blocked means an **open** blocker: the same graph the `blocked` column reads, so
finishing the blocker puts its dependents back on the list. `--limit`,
`--columns`, `--format`, `--project` and `--epic` are the same options the
listing takes; the inbox is included, because a freshly filed issue nothing
blocks is work that can be picked up.