temporality
Изменить страницу↗
Инженерные документы

Knowledge Explorer — этап 1: аудит и технический план

Статус: этап 1 ТЗ docs/human-knowledge-explorer.md (аудит и прототипирование). Документ фиксирует фактическое состояние кода, доступность данных для всех сценариев ТЗ, пробелы и предлагаемый минимальный объём первой версии. Утверждение объёма v1 — точка согласования с пользователем (ТЗ §19, этап 1).

#1. Аудит текущего интерфейса знаний

Вкладка «Знания» живёт в debugger/src/Observability.tsx (не отдельный компонент) и на сегодня даёт:

Ограничения против ТЗ (по итогам полевого тестирования):

Требование ТЗ Текущее состояние
§4 Карта тематических областей нет — только плоский список
§5 Исследовательский поиск с объяснением релевантности поиск есть, matched_by/score не показываются
§6 Фасеты: темы, сущности, проекты, тип, риск только states/scopes
§7 Граф связей нет (relationships в карточке не визуализируются)
§8 Досье с происхождением и переходами частично (history без переходов к первоисточникам)
§9 Битемпоральная история есть (as_of/known_at/сравнение)
§10 Сравнение противоречий нет (только бейдж at_risk)
§11 Исследовательские сессии нет
§12 Результаты исследования агента нет (агентский explore не выводится в UI)
Сохранение контекста переходов нет (URL-параметры tab/state/scope/qselected есть, контекста нет)

#2. Общий исследовательский слой: готовность данных

Движок observation/explore.go + POST /v1/observations/knowledge/explore (доступен UI через базу /api) закрывает почти все потребности ТЗ без нового бэкенда:

Сценарий ТЗ Операция Структуры Готовность
§4 Карта областей orient ExploreArea (topic/entity, счётчики, состояния, противоречия, представители) готово
§5 Поиск + объяснение search ExploreKnowledgeCard (matched_by, score) готово
§7 Граф связей expand (+IncludeCandidates) ExploreRelation (explicit/candidate, depth, via, event_id) готово
§8 Досье trace ExploreHistory (steps, usage, evidence) готово
§9 Временная история trace + knowledge/diff steps + битемпоральные срезы готово
§10 Противоречия compare ExploreConflict (basis, context_differences, resolution) готово
§12 Синтез/результаты агента synthesize ExploreSynthesis (established/disputed/retired, gaps) готово
Ограничения и честность все Limits, completeness, Notes («нет данных» ≠ «нет результатов») готово

Виды связей (supports/contradicts/derived_from/depends_on/supersedes/related_to) совпадают со словарём knowledge.linked — граф не требует отдельных данных.

#3. Пробелы и решения

  1. Фасеты бедны (ТЗ §6). GET /v1/observations/knowledge возвращает facets: {states, scopes}. Нужно расширить сервер (observation/ knowledge_query.go): topics, entities, projects, kinds, at_risk — счётчики по видимым знаниям с учётом тех же фильтров. Объём: S. Без UI-изменений обратно совместимо.
  2. Первоисточники (ТЗ §8.3). Evidence.Ref — id события журнала вида r/event/000001; событие несёт context.run. Переход «доказательство → событие → трейс рана» собирается на клиенте из GET /v1/observations/ events?... (поиск по event_id) + существующих ссылок на трейс рана. Эндпоинта «событие по id» нет — добавлять не обязательно: события уже доступны листингом с фильтром, но прямой GET /v1/observations/events/ {id} (S) упростит и ускорит досье. Рекомендуется.
  3. Карта знаний (ТЗ §4). Данные есть (orient), визуализации нет. Решение: SVG-облако областей без внешних библиотек (размер ∝ knowledge_count, цвет — доминирующее состояние, бейдж противоречий), рядом — альтернативный список областей (ТЗ §4.5). Объём: M.
  4. Исследовательские сессии (ТЗ §11). Хранилища нет. Варианты: а) localStorage (быстро, не переносимо между устройствами) — v1; б) workspace-таблица research_sessions (переносимо, видимо другим) — этап 4. Предлагаем: v1 localStorage, этап 4 — серверное хранилище с экспортом/импортом.
  5. Точка входа и маршрут. Новый пункт главного меню «Знания» → /knowledge (страница KnowledgeExplorer.tsx). Вкладка «Знания» в Observability остаётся до этапа 4 как операционная (быстрые lifecycle-действия над свежими предложениями), затем её lifecycle-панель переезжает в Explorer и вкладка удаляется. Это отражено в плане этапа 4.
  6. Контекст переходов (ТЗ §3.3, этап 2). Каждая навигация в Explorer пишет запись (откуда → куда → чем инициировано) в стек сессии (в памяти + localStorage). URL продолжает нести состояние (как сейчас: q/state/ selected/…), добавляются area, entity, tab Explorer'а.

#4. Архитектура UI

debugger/src/KnowledgeExplorer.tsx   — страница Explorer (этап 2+)
debugger/src/explorer/
  AreaMap.tsx        — SVG-карта областей (orient)
  Dossier.tsx        — досье знания (trace + chain + lifecycle)
  (фактические пути: debugger/src/Dossier.tsx, debugger/src/explorer/*)
  RelationGraph.tsx  — локальный граф (expand), SVG без зависимостей
  ConflictPanel.tsx  — сравнение противоречий (compare)
  HistoryTimeline.tsx— временная история (trace + diff)
  sessions.ts        — стек переходов + сохранение сессии
debugger/src/observationApi.ts       + explore(), facets (расширенные)
observation/httpapi/knowledge_query.go   + facets topics/entities/projects/kinds/risk
observation/httpapi/server.go        + GET /v1/observations/events/{id} (опц.)

Правила: вся выборка — через существующий API журнала; UI не считает связи сам (только отображает ExploreRelation); права — как у вкладки знаний (чтение reader, lifecycle-действия writer); никаких параллельных хранилищ.

#5. Предлагаемый минимальный объём v1 (этап 2)

  1. Страница /knowledge: заголовок с поиском, карта областей (orient по видимым знаниям проекта), список областей справа.
  2. Клик по области → поиск по ней (search с вопросом-областью) → список карточек с matched_by и score; клик по карточке → раскрытие досье-кратко (proposition, состояние, evidence-счётчик, риск) с действиями lifecycle.
  3. Фасетная панель: состояние, scope, тема, проект (после расширения фасетов), мультивыбор, счётчики.
  4. Стек переходов в памяти + URL-синхронизация (назад/вперёд браузера работают).

Не входит в v1 (этапы 3–4): граф связей, досье-полное, временная история внутри Explorer, сравнение противоречий, сессии, просмотр результатов агента (кратко доступен через существующий hints-предпросмотр).

#6. План этапов

Оценки: этапы 2–4 — по оценкам командной работы.

#7. Открытые вопросы — решения (2026-10-16)

  1. Минимальный объём v1 (§5) утверждён без графа связей — граф в этапе 3.
  2. GET /v1/observations/events/{id} — добавлен (этап 2).
  3. Сессии: localStorage/память в v1, серверное хранилище в этапе 4 — ок.
  4. Вкладка «Знания» в Observability: перенос lifecycle в Explorer и удаление старой вкладки на этапе 4 — ок.

#8. Статус этапа 2 (реализовано)

#9. Статус этапа 3 (реализовано)

UI-only поверх существующего движка explore (сервер не менялся, кроме клиентской типизации):

#10. Статус этапа 4 (реализовано)