---
title: "Type"
description: "Kind of work — a closed vocabulary on the sitting, not the objective tree."
---

**Type** is the kind of work a sitting was doing: `build:feature`, `fix:defect`, `plan:spec`, and the rest of a closed set.

It is **not** the product. It is **not** a Goal on the objective tree. Storage is a session annotation. The console word is Type. The old word was Goal. `assay goals` is a deprecated alias of `assay type`.

## Why a closed set

Free text does not aggregate. One real job splits across a dozen labels and a dozen spend totals. Type is a closed vocabulary. Assay admits a member or refuses. It does not coerce a near miss.

Two escapes are answers, not errors:

- **`other`** — none of the labels fits. Requires a note. That note is how a gap in the vocabulary becomes visible.
- **`skip`** — the opening does not say what the human was trying to achieve. Forcing a guess there is noise.

## The labels

| Label | Means |
|---|---|
| `build:feature` | New functionality, tool, or capability |
| `fix:defect` | Repair a broken behaviour whose cause is known |
| `debug:diagnose` | Find out why something fails; cause not yet known |
| `refactor:cleanup` | Restructure without changing behaviour |
| `test:verify` | Write, run, or repair tests |
| `review:code` | Review a diff, branch, or package |
| `audit:security` | Security, leakage, or correctness risk |
| `release:ship` | Cut a release, publish, or deploy |
| `explore:codebase` | Orient; no change intended yet |
| `plan:spec` | Spec, plan, ADR, task breakdown |
| `design:architecture` | System or integration structure |
| `design:ui` | Interface, page, or visual theme |
| `docs:write` | Author or update documentation |
| `docs:sync` | Reconcile a document with the system it describes |
| `docs:extract-public` | Derive a public version of private material |
| `content:write-prose` | Prose that is not documentation |
| `content:edit-style` | Rewrite, restyle, revoice, translate |
| `catalog:curate` | Catalog, list, or survey |
| `research:topic` | External research or options |
| `analyze:data` | Analyse a dataset or body of records |
| `analyze:forecast` | Forward-looking forecast |
| `ops:run-routine` | Recurring operational routine |
| `ops:check-status` | Current state of a system or account |
| `ops:monitor` | Watch over time for a condition |
| `ops:configure` | Install or set up a tool or environment |
| `chat:trivial` | Greeting or exchange with no work in it |

A host may register **its own** vocabulary for declared types. Assay stores the vocabulary ref. It does not replace this set for the judge.

## How a type gets there

| Source | How |
|---|---|
| **Declared** | Producer `declareSession`, or `assay declare --type`, or the session page in the console |
| **Judge** | Local (or opted-in) model picking from the closed set |
| **Heuristic** | Cheap features, no full content |

Rank: **declared > judge > heuristic**.

## Read

```bash
assay type
```

Spend, tokens, and valence per type. Sittings with spend and no label are an **unannotated** bucket. They are not dropped.

Dashboard `/type` is off the nav. Set type from the session page. See [Sessions](/sessions).
