# Capture now, decide later

**Write down what arrived, with where it came from, and decide nothing. Triage is the one decision, and the capture stays as it arrived.**

An agent in the middle of other work notices things, and a webhook posts whatever happened. Neither is a decision, so neither lands in the graph: a capture is the words as they came and their source, in an inbox that is personal and that no read of the graph looks at. A suggested project is a hint, never authority, and a source that sends the same item twice gets its first capture back. Triage is the only way out, and it is the person’s call: it creates a task in whatever status they named, `discarded` and `reference` included, points the task back at the capture and at every link the capture came with, and leaves the capture exactly as it was.

Driven by a person and an agent. Every step below is a step in
`packages/server/tests/e2e`, run against a listening server on every pull
request; the calls under each one are what that run executed.

The same flow is playable at https://flow.ttoss.dev/docs/examples/capture-then-triage.

## 1. Ana starts a project

- `POST /api/v1/projects` → `201`

## 2. Her agent captures what it noticed, verbatim, with where it saw it

- `POST /api/v1/captures` → `201`

## 3. A webhook suggests the project, and that decides nothing

- `POST /api/v1/captures` → `201`
- `GET /api/v1/tasks?project=proj_pdyjcdp1as` → `200`

## 4. The same item sent again gets its first capture back

- `POST /api/v1/captures` → `200`

## 5. The inbox holds both, oldest first

- `GET /api/v1/captures` → `200`

## 6. Ana says yes to the first, and triage makes it a task

- `POST /api/v1/captures/cap_j2hx897e59/triage` → `201`
- `GET /api/v1/tasks/task_rjkzt06xyy` → `200`

## 7. The capture leaves the inbox and stays as it arrived

- `GET /api/v1/captures` → `200`
- `GET /api/v1/captures?triaged=true` → `200`

## 8. Triaging it again answers with the task it already made

- `POST /api/v1/captures/cap_j2hx897e59/triage` → `200`

## 9. The other is not work, and saying so is a triage too

- `POST /api/v1/captures/cap_bvqwn4fw2s/triage` → `201`
- `GET /api/v1/captures` → `200`
- `GET /api/v1/next` → `200`
