# Безопасность, приватность, срок хранения

Хранилище держит знание о работе, а не конфиденциальное содержание работы. Реальны три риска:
секрет, вставленный в запись, данные заказчика, сохранённые навсегда, и устаревший рецепт, которому
продолжают доверять.

## Что не хранится никогда

| Никогда | Почему |
|---|---|
| Учётные данные: пароли, токены, ключи API, закрытые ключи, cookies, идентификаторы сессий | запись копируют, индексируют и публикуют; секрет из неё не возвращается |
| Персональные данные: имена, адреса почты, телефоны, адреса людей | хранилище не CRM и не имеет правового основания |
| Содержимое заказчика: строки базы, документы, переписка | переиспользуема форма решения, а не содержание |
| Внутренние имена хостов, IP-адреса, внутренние пути | они выдают топологию и быстро устаревают |
| Непроверенный результат | догадка со схемой хуже отсутствия записи |

## Заполнители

| Заполнитель | Заменяет |
|---|---|
| `<HOST>` | любое имя хоста или IP |
| `<USER>` | любое имя учётной записи |
| `<PATH>` | любой абсолютный путь, особенно машинный |
| `<API_KEY>`, `<TOKEN>` | любые учётные данные |
| `<CUSTOMER>`, `<PROJECT>` | любую организацию или непубличное имя репозитория |
| `<DB>` | любое имя базы данных |

Инструмент часть этого принуждает: `experience.py add` отказывает записи с литералом, похожим на
токен, или с абсолютным путём машины. Это пол. Отличить реальное имя хоста от заполнителя он не
может, поэтому человек читает запись перед публикацией.

## Уровни чувствительности

Каждая запись, касающаяся приватного контекста, объявляет уровень в теле, под заголовком
`## Sensitivity`:

| Уровень | Значение | Где допустим |
|---|---|---|
| `public` | приватного контекста нет; безопасно в публичном репозитории | везде |
| `internal` | упоминает форму приватного проекта, не идентифицируя его | только приватное хранилище |
| `restricted` | называет организацию или окружение | не хранится; остаётся в приватной системе учёта |

Запись уровня `restricted` — записка самому себе о том, что хранилище — не то место.

## Срок хранения

| Правило | Причина |
|---|---|
| Записи помечаются устаревшими, никогда не удаляются | след аудита и делает хранилище надёжным; молчаливое удаление возвращает неверный подход |
| `status: deprecated` плюс `superseded_by: <id>` | читателя перенаправляют, а не останавливают |
| `last_verified_at` старше 180 дней даёт предупреждение | проверка годичной давности не описывает этот год |
| `last_verified_at` ставится только после реальной перепроверки | иначе поле врёт, и следующий агент ему верит |
| Заменённый рецепт остаётся читаемым | он объясняет, почему появился новый |

## Перепроверка

Перепроверка означает: снова прогнать проверку рецепта в текущем окружении. Если она падает, запись
становится `deprecated`, а провал уходит в запись `failure`, связанную с ней. Пометить `validated`
после прочтения записи — не перепроверка: чтение ничего не доказывает об окружении.
