tix-tracker 0.8.0

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

`tix export/import` talks to GitLab through the `glab` CLI and to Linear
through `linear-cli`. If the tool is missing, `tix` fails with a clear,
actionable error. Repeated exports are idempotent: issues are matched by their
`gitlab_id` / `linear_id`, and conflicts resolve in favor of the newer
`updated` timestamp.

## Linear

The canonical Linear CLI is [`linear-cli`](https://crates.io/crates/linear-cli)
(nesszer/linear-cli), the `cargo:linear-cli` crate pinned in `mise.toml`.
Authenticate it with `linear-cli auth login`, or give `tix` a token.

`tix` injects the token into the tool's environment as **`LINEAR_API_KEY`** —
the name `linear-cli` reads. When resolving a token, `tix` accepts
`LINEAR_TOKEN` (its own name) first and falls through to `LINEAR_API_KEY`, so a
workspace already configured for the tool is picked up without exporting a
second, tix-specific variable; both names beat a cleartext token in `tix.toml`.

`tix` drives these verbs: `issues create`, `issues update`, `issues list`,
`issues get`, and `relations add -r <kind> <FROM> <TO>` for a blocking edge. An
import is one `issues list` call (which returns only identifiers and states)
plus one `issues get <ID>` per open issue, to read the body, labels, and
timestamp. A relation is sent only once **both** of its issues exist remotely:
`tix export` creates or updates every issue first, then adds each edge — once,
from the issue that declares it — with both endpoints' remote identifiers. An
edge whose target is not part of the export set is reported rather than sent, and
a dry run previews the same sends.

`tix import --target speckit` is a local target: it reads a GitHub Spec Kit
project (`.specify/`, `specs/NNN-<feature>/tasks.md`, `.specify/bugs/*`,
`.specify/assessments/*`) with no CLI and no network, creating one parent issue
per feature, one child subissue per task, and one issue per bug or assessment —
all labeled `speckit`. It is idempotent by the source path recorded in each
issue's `files`, so re-running creates only what is new. See
[`../spec-kit-integration.md`](../spec-kit-integration.md).

Imported issues enter through an explicit, reported policy rather than bypassing
review: `tix import --target gitlab --triage-policy entry`. Absent the flag, an
import routes into the inbox only when the project has a `[triage]` section, and a
project without one imports exactly as it did before the inbox existed. See
[triage](triage.md).