# The validator — every inconsistency Flow's own arithmetic can find

`GET /api/v1/projects/{id}/validate`

MCP tool: `validate-project`

Reports what the graph contradicts about itself, narrowed to what touches this project; it never refuses or changes anything. Each finding has a `check` and the ids involved, and each prompts a proposal to the person, never a write of your own:
- `retracted_basis` — `task` still cites `retracted`, a withdrawn record,
  as its cause. Propose a new `basis` for `task`, or reconsider it.
- `supersedes_cycle` — `records` supersede each other in a loop. Propose
  which `supersedes` edge to retract.
- `canonical_memory_or_view` — `from`, an `agent_memory` or `view`
  record, is cited as the cause (`kind`) of `to`. Propose citing the
  source it was derived from instead.
- `self_basis` — `record` cites itself as its own cause (`kind`).
  Propose retracting that edge and naming a real cause.
- `calendar_without_date` — `task` is on `calendar` with no
  `scheduled` wait carrying `until`. Ask the person for the date.

A `blocks` cycle is reported by `get-order`, not here.

## Parameters

- `id` (path, required) — The project's `proj_…` id, as `list-projects` answers it.

## Responses

- `200` — Every finding that touches this project
- `404` — No such task, or a `project` naming one this caller is not a member of
