# Основные понятия

> Из чего состоит запись памяти MMW — поля, статусы, ярлык scope, уверенность, версии по fact_key, сводки и связи графа.

Из этой страницы вы узнаете:

1. какие поля есть у записи памяти и откуда они берутся;
2. что значат статусы `unverified`, `stale` и `conflict`;
3. как связаны записи между собой: версии одного факта, сводки и граф.

Пример на всю страницу: команда договорилась, что **staging выкатывается через systemd-юнит `app-staging`**, а правило записано в `docs/deploy.md`.

## Запись памяти

Запись — это один факт, решение или договорённость. Агент создаёт её инструментом [`remember`](/reference/remember/), находит — инструментом [`search`](/reference/search/). Так выглядит запись в результатах поиска:

```json
{
  "id": "4d428a41-e7b0-4f81-a886-f40c6f6c766c",
  "workspace": "default",
  "scope": "shared",
  "content": "staging выкатывается через systemd-юнит app-staging",
  "source": "agent",
  "source_id": "docs/deploy.md",
  "source_hash": "sha256:9f2c…",
  "source_revision": "a1b2c3d",
  "fact_key": "deploy.staging.method",
  "confidence": 0.8,
  "status": "unverified",
  "derived_from": [],
  "score": 2,
  "graph_relations": [],
  "created_at": "2026-10-05T09:12:00+00:00",
  "updated_at": "2026-10-05T09:12:00+00:00"
}
```

| Поле | Кто задаёт | Что значит |
| --- | --- | --- |
| `id` | сервер | Уникальный идентификатор записи. Нужен для `forget` и `derived_from`. |
| `workspace` | агент | Рабочая область — именованная коллекция внутри проекта. По умолчанию `default`. |
| `scope` | агент | Ярлык для фильтрации, по умолчанию `shared`. Доступ не ограничивает (см. ниже). |
| `content` | агент | Текст записи. Секреты в нём заменяются заглушками до сохранения. |
| `source` | агент | Кто сохраняет: по умолчанию `owner`; встречаются `agent`, `telegram` и другие. |
| `source_id`, `source_hash`, `source_revision` | агент | Происхождение: документ, хеш его содержимого, версия. См. [Источник и свежесть](/memory/source-and-freshness/). |
| `fact_key` | агент или архивариус | Ключ темы. Записи с одним ключом сравниваются между собой. |
| `confidence` | агент, архивариус | Уверенность от 0 до 1, по умолчанию 0,5. |
| `status` | сервер | `unverified`, `stale` или `conflict` — вычисляется при каждом поиске. |
| `derived_from` | агент | ID записей, которые эта запись обобщает. |
| `score` | сервер | Релевантность запросу в этом поиске. |
| `graph_relations` | архивариус | Связи с другими записями. |
| `created_at`, `updated_at` | сервер | Время создания и последнего изменения (ISO 8601). |

`remember` никогда не удаляет и не перезаписывает существующие записи: каждый вызов добавляет новую. Удаляет только [`forget`](/reference/forget/), и то мягко — запись пропадает из поиска и графа, а факт удаления остаётся для аудита.

## Статусы

Статуса `verified` в MMW нет. Сервер хранит, **откуда** взялся факт, но не утверждает, что он **истинен**.

| Статус | Когда | Что делать агенту |
| --- | --- | --- |
| `unverified` | Обычное состояние любой новой записи, даже с `source_hash`. | Пользоваться, помня об источнике и уверенности. |
| `stale` | Источник изменился: в `search` или `validate_memory` передан `current_source_hash`, отличный от сохранённого; или архивариус отметил запись как опровергнутую новой. | Перечитать источник, обновить факт. |
| `conflict` | Есть другие записи с тем же `fact_key` в той же рабочей области, но с другим содержимым или хешем источника. | Не выбирать молча — показать расхождение человеку. |

Если подходят несколько статусов, побеждает более тревожный: `conflict` важнее `stale`, `stale` важнее `unverified`. Сводка получает худший статус из записей, на которых она построена.

Хеш, который присылает клиент, — это сведения о происхождении, а не доказательство. Поэтому новая запись всегда `unverified`. Старые версии сервера могли хранить `verified`; в результатах поиска такие записи показываются как `unverified`.

## scope — ярлык, а не права доступа

`scope` (по умолчанию `shared`, часто используют `private`) — просто метка: по ней можно отфильтровать `search` и `validate_memory`. Запись с `scope: "private"` видят все, у кого есть доступ к проекту.

Кто что видит, определяют другие механизмы:

- в личном аккаунте — проект ключа (см. [Рабочие области и проекты](/memory/workspaces-and-projects/));
- в организации — **видимость** записи: только автор, отдел, проект или вся организация (см. [Видимость](/organizations/visibility/)).

## confidence

Число от 0,0 (не уверен) до 1,0 (уверен), по умолчанию 0,5. Значение вне диапазона отклоняется. Агент задаёт его при записи; архивариус может **понизить** уверенность старой записи, если новая её уточняет или опровергает.

Хорошая привычка: 0,9 и выше — для того, что прочитано в документе или подтверждено человеком; 0,5 — для выводов агента; ниже — для догадок.

## fact_key и версии факта

`fact_key` — устойчивое имя темы, например `deploy.staging.method`. Повторное сохранение с тем же ключом добавляет **новую версию**; прежние остаются, ничего не удаляется.

```text
  fact_key = deploy.staging.method
  ───────────────────────────────────────────────────────────
  v1  «через systemd-юнит app-staging»     ─┐
  v2  «через Docker Compose, сервис staging» ├─ обе со статусом conflict,
                                            ─┘  пока лишнюю не удалят через forget
```

Если содержимое версий совпадает (тот же текст и тот же хеш источника), конфликта нет. Подробно — [Конфликты и сводки](/memory/conflicts-and-summaries/).

Если вы не задали `fact_key`, его может присвоить архивариус — служебный ключ вида `archivist:полка:кратко`.

## derived_from — сводки

Когда агент сжимает несколько записей в одну (например, «итоги недели по деплою»), он передаёт их ID в `derived_from` (до 50 существующих записей). Сводка помнит, из чего собрана, и **наследует** `conflict` и `stale` своих источников — сжатие не прячет нерешённые противоречия.

## Связи графа

После сохранения [архивариус](/memory/archivist/) сравнивает запись с недавними записями той же рабочей области и может построить связи. В результатах поиска они видны в `graph_relations`:

```json
"graph_relations": [
  {
    "relation": "supersedes",
    "direction": "outgoing",
    "weight": 0.9,
    "target_id": "0b7e…",
    "preview": "staging выкатывается вручную через scp"
  }
]
```

Типы связей: `relates_to` (связано), `fixes_issue` (исправляет проблему), `supersedes` (заменяет). `preview` — первые 120 символов связанной записи. Связи с удалёнными или невидимыми вам записями не показываются.

## Что дальше
