Ticket tracker
July 24, 2026 · View on GitHub
A lightweight ticket tracker: capture work as tickets, group them into
categories, tag and cross-link them, and move each ticket through a simple
lifecycle from open to closed. This description, the per-status explanations,
and the transition help below are surfaced by the generated documentation
(rela docs).
This handbook is authored in Markdown; the tables, diagrams, and screenshot
below are resolved from the project's metamodel.yaml and acl.yaml by
rela-docs build, so they can never drift from the schema. It doubles as a
worked example of the rela-docs generator — see
the guide.
Tickets
A ticket records a piece of work. Every ticket carries these fields:
| Field | Type | Required |
|---|---|---|
title | string | yes |
status | ticket_status | yes |
priority | priority | yes |
reporter | string | yes |
Status
A ticket moves through the lifecycle below.
stateDiagram-v2
state "open" as s0
state "in-progress" as s1
state "resolved" as s2
state "closed" as s3
[*] --> s0
s0 --> s1: Start work
s1 --> s2: Mark resolved
s2 --> s3: Close
s2 --> s1: Reopen
Each status means:
| Value | Meaning |
|---|---|
open (default) | A newly filed ticket that no one has started yet. |
In progress (in-progress) | Someone is actively working on the ticket. |
resolved | The work is done and awaiting confirmation before it is closed. |
closed | The ticket is finished; no further work is expected. |
How a ticket connects to the rest of the tracker
belongs-to→ categoryblocks→ tickettagged→ label
The schema neighbourhood, two hops out:
graph LR
n0["ticket"]
n1["category"]
n2["label"]
n0 -->|"belongs-to"| n1
n0 -->|"blocks"| n0
n0 -->|"tagged"| n2
A worked example
ticket-1
- title: Login page 500s under load
- status: in-progress
There is 1 seeded ticket in this example.
Who can do what
The access model comes straight from acl.yaml:
| Type | Verb | editor | viewer |
|---|---|---|---|
ticket | create | ✓ | |
ticket | read | ✓ | ✓ |
ticket | update | ✓ | |
ticket | delete | ✓ |
The edit form
This is the ticket edit form as an editor sees it, with the two lifecycle-driving fields highlighted:
