Источники, claims, evidence и цитаты
Что это
Внутри raytsystem знание — это не свободный текст, а набор связанных типизированных записей. Понимание этих сущностей помогает читать ответы QUERY и разбираться в разделе Вселенная.
Источники и ревизии
Источник (Source) — это логическая единица материала (например, конкретный файл в рабочей области). У источника есть ревизии (SourceRevision): каждая ревизия неизменяема и привязана к точному хешу содержимого. Точные байты хранятся в _raw/ с адресацией по содержимому, поэтому одинаковые байты всегда дают одинаковый адрес (ADR-002, src/raytsystem/ingestion.py).
Поверх ревизии строится нормализация (Normalization) — извлечённый текст, разбитый на сегменты (Segment). Снимок нормализации ключуется ревизией источника, версией адаптера и конфигурацией; старые снимки не переписываются.
Claims, сущности, связи, ревью
- Claim — отдельное утверждение (факт), у которого есть статус (например, поддержан/подтверждён) и список ссылок на evidence. В ответах QUERY используются только активные подтверждённые claim'ы (
src/raytsystem/querying.py). - Сущности (entities) и связи (relations) образуют граф знаний поверх claim'ов.
- Ревью (reviews) фиксируют результаты семантической проверки. Важно: ревью сообщают о находках, но сами по себе не меняют каноническое знание (ADR-011).
Evidence и цитаты
Evidence связывает claim с конкретным местом источника. Полная цепочка: сырьё (raw) → ревизия (revision) → нормализация (normalization) → сегмент (segment). Сегмент указывает на точный фрагмент, а его извлечение (excerpt) закреплено хешем.
Когда QUERY отвечает, каждый факт снабжается цитатой (QueryCitation). Цитата хранит диапазон символов в ответе, ID claim'а и всю цепочку evidence вплоть до source_revision_id, normalization_id, segment_id и cited_excerpt_sha256. Ответ и все цитаты привязаны к одному поколению и его хешу; несоответствие приводит к отказу «fail closed» (src/raytsystem/querying.py). Так цитата остаётся проверяемой привязкой к точным байтам источника, а не пересказом.
Ручные заметки
Человеку доступна для правки только зона knowledge/manual/. Заметки из неё не становятся знанием «в обход» конвейера — они возвращаются в базу через операцию INGEST на общих основаниях (см. Что можно редактировать).
Поиск
Поиск по знаниям выполняется через полнотекстовый индекс FTS5. Он принимает ограниченную грамматику литеральных токенов, работает через параметризованный SQL и доступен всегда, без модели или API-ключа (ADR-011). Каждый найденный элемент несёт ID поколения и хеш канонического объекта — так поиск не может подсунуть факт из другого поколения. Запускается поиск командой QUERY (uv run raytsystem query "..." --json).
Связь с Knowledge Universe
Всё перечисленное визуализируется в разделе Вселенная (Knowledge Universe). Линзы Orbit, Knowledge, Work, Agent и Evidence показывают знания и их происхождение с разных сторон, а линза «Код» — отдельный code-graph. Рендер использует Sigma/WebGL с доступным списочным запасным вариантом. Подробнее — Раздел Вселенная.
Ограничения и безопасность
- Индексируемый текст источника всегда трактуется как инертные данные и экранируется перед отображением — он не является инструкцией (ADR-011).
- Evidence и raw неизменяемы; их нельзя редактировать вручную.
- Если подтверждённого claim нет, QUERY возвращает явный пробел, а не догадку.
Связанные страницы
- Модель данных базы знаний
- Операции: INGEST, QUERY, LINT, SAVE
- Раздел Вселенная
- Запуски и наблюдаемость
Источники истины
ops/decisions/ADR-002-immutable-raw-and-evidence.mdops/decisions/ADR-011-generation-bound-retrieval-and-draft-save.mdsrc/raytsystem/ingestion.pysrc/raytsystem/querying.py