Schema and Fields

How schema.yaml defines ticket types, per-type fields, statuses and priorities, and how the app rebuilds from it.

Everything a project’s tickets can be is declared in .lovelace/schema.yaml: the ticket types, the fields each type carries, the statuses and the priorities. The validator, the indexer, the MCP server and the app’s forms all read those definitions at runtime. There is no migration step: change the file and every surface follows.

Types and fields

Each type owns its field list:

types:
  - name: task
    id_prefix: T
    fields:
      - name: title
        type: string
        required: true
      - name: priority
        type: enum
        values_from: priorities
      - name: parent
        type: reference
        refers_to: [epic]
      - name: estimate
        type: number

Field types are string, number, boolean, date, enum, list and reference. Enums take values or values_from: priorities; lists take an item_type; references take refers_to. Any field can carry a label, required and a default.

Five core fields are locked and managed by the tooling: id, type, status, created, updated. title is required on every type.

Statuses

statuses:
  - name: backlog
  - name: todo
    agent: ready
  - name: in_progress
    agent: in_progress
  - name: in_review
  - name: done
    agent: complete
  - name: cancelled

Status order is column order on the Board, and a ticket can move to any defined status. The optional agent role tells your agent where to pick up work (ready), which status marks work in flight (in_progress) and where finished work lands (complete); at most one status per role.

Priorities

priorities: [urgent, high, medium, low]

Ordered, highest first. Fields opt into the list with values_from: priorities.

Editing

Settings edits all of this through generated forms and writes back through core validation; hand-editing the YAML is an equally supported path, and malformed input gets an error with file and line, never a crash. Actors (you, plus named agent identities) live beside the schema in actors.yaml. For the reasoning behind fields-as-data, see Local First.