# Privacy

> How to write useful documents that hold no prompt, completion or transcript text.

Most of what makes a run worth comparing is not its text. It is the shape of the work, the models, the tokens, and whether the result was accepted. OCP's `metadata_only` profile keeps exactly that, and every document says which profile it follows.

## Writing metadata_only well

| Field | Good | Not allowed under `metadata_only` |
|---|---|---|
| `run.title`, `task.title` | `fix flaky retry test` | The issue body, or the prompt given to the agent |
| `outcome.reason` | `2 tests failed` | The test output |
| `outcome.receipt` | `tests pass 42/42` | The CI log |
| `cause.reason` | `review asked for input validation` | The review comment |
| `artifact.path` | `src/retry.py` | The file's content, which OCP never records |

- The schema caps label fields such as these at 500 characters. Short is better: a label is for grouping and debugging, not for reading the work. Some strings have no cap, such as `task.features` values, setting `options` and `ext` payloads; they must hold no prompt or transcript text all the same.
- Paths, repository names and working folders are not text, but they can be sensitive. You can write opaque ids instead.
- If you need text, use the `full` profile and put it inside an `ext` namespace. Core fields stay labels under both profiles.

## Sharing documents

A document that stays on the machine it was recorded on can keep paths and repository names. Before documents leave, reduce them further: hash repository names, and drop titles, paths, commands and commit hashes. loopmath's `share` command does this, and prints exactly what would leave with `--preview`.

## Trust

The schema checks the 500-character cap on label fields, not on every string, so it is not a privacy filter. The rule that no field holds prompt or transcript text cannot be checked by a program: the profile is a promise the producer makes. If you read documents from producers you do not control, you rely on that promise. See [Privacy](https://orchestrationcontextprotocol.io/specification/0.3/privacy) in the specification.
