# Daisy AI Daily Radar — методика наращивания сигналов и узлов v0.2

Статус: **PROPOSED_OWNER_REVIEW**. Пороговые значения ниже — не «истина», а preregistration для семидневного shadow pilot. После пилота меняются только по результатам измеренных false positive / false negative, а не по впечатлению от отдельных находок.

## 1. Что именно растёт

У системы три разные базы, которые нельзя смешивать:

1. **База артефактов** — видео, RSS-записи, captions, официальные релизы, страницы и метаданные. Она растёт автоматически и только дописыванием.
2. **База сигналов** — отдельные проверяемые утверждения о том, что изменилось или что появилось: релиз модели, новая практика работы, результат исследования, изменение организации, benchmark, инцидент. Сначала это кандидат, затем — подтверждённый сигнал.
3. **Граф внимания** — устойчивые сущности, которые имеет смысл проверять снова: канал, персона, организация, лаборатория, продукт или тема. Упоминание не создаёт узел.

Короткое правило:

> Новое видео — это артефакт. Фраза или событие внутри него — кандидат сигнала. Повторяющийся и идентифицированный источник таких сигналов — кандидат узла.

## 2. Шесть слоёв и права записи

| Слой | Единица | Кто пишет | Можно ли исправлять |
|---|---|---|---|
| L0 Source artifact | одно видео / публикация | crawler | нет; новый snapshot дописывается |
| L1 Observation | «мы увидели X в источнике Y» | parser | нет; ошибочная запись опровергается новой |
| L2 Signal candidate | структурированное утверждение | versioned extractor | нет; хранится версия и evidence |
| L3 Verified signal | принятое утверждение | reviewer; позднее — узкое deterministic rule | прежнее не стирается, а superseded |
| L4 Graph | node / edge | node — только человек; edge — правило или человек | изменения версионируются |
| L5 Analytical product | digest / карта / очередь Daisy | rebuild recipe | пересобирается и имеет срок годности |

LLM, crawler и parser не получают права напрямую создать permanent node. Они могут только предложить кандидата и приложить доказательства.

## 3. Две шкалы времени

Для каждого наблюдения и сигнала нужны отдельные времена:

- `published_at` — когда опубликован источник;
- `valid_from / valid_to` — когда утверждение верно в мире, если это известно;
- `observed_at` — когда Daisy впервые увидела источник;
- `processed_at` — когда extractor создал кандидата;
- `reviewed_at` — когда принято решение;
- `last_verified_at / review_due_at` — когда перепроверить.

Если время мира неизвестно, оно остаётся `UNKNOWN`; дата скачивания не подставляется вместо него.

## 4. Шесть независимых полос обнаружения

Каждая полоса хранит свой cursor и журнал проверок. Пересечение результатов считается corroboration, а не дубликатом работы.

| Полоса | Ритм | Что ловит | Типичная слепая зона |
|---|---|---|---|
| Approved channel RSS | ежедневно | все публикации 48+ согласованных каналов | ничего вне watchlist |
| Open query search | ежедневная ротация | новые авторы и неожиданные формулировки | relevance search поднимает старое |
| Entity gap queue | ежедневно | тех, кого давно не проверяли | требует хороших entity queries |
| Primary roster audit | еженедельно | новые лаборатории, модели, исследователи | медленнее новостей |
| Graph snowball | еженедельно | гостей, цитаты, инструменты, co-mentions | может раздувать граф |
| Blind-spot audit | ежемесячно | систематически пропущенные классы | не ловит срочное событие |

Общая память результатов есть только после дедупликации. Поисковая память полос раздельна: иначе две разные поверхности превращаются в одну и перестают независимо подтверждать находку.

## 5. «Не нашли» — полноценный результат

На каждую попытку создаётся `check` со статусом:

- `FOUND_NEW` — найдены новые артефакты;
- `FOUND_DUPLICATE` — найдено уже известное;
- `NOT_FOUND` — проверка состоялась, нового нет;
- `PARTIAL` — проверена только часть цели;
- `ERROR` — результата о рынке нет из-за технической ошибки.

`NOT_FOUND` двигает `last_checked_at`, но не `last_signal_at`. `ERROR` не двигает ни одну шкалу знания. Благодаря этому «рынок молчит» не смешивается с «мы не смотрели».

### Очередь по возрасту незнания

После обязательного ежедневного RSS оставшаяся ёмкость распределяется не по просмотрам и не только по P0/P1/P2:

```text
priority =
  0.45 × overdue_ratio +
  0.25 × knowledge_gap +
  0.20 × change_hazard +
  0.10 × node_priority
```

- `overdue_ratio` — сколько прошло относительно SLO узла;
- `knowledge_gap` — сколько обязательных полей/связей неизвестно;
- `change_hazard` — как быстро обычно меняется этот класс;
- `node_priority` — P0/P1/P2.

Fairness rule: допустимый узел не может оставаться непроверенным дольше двух своих SLO. Размер аудитории не является первым ключом очереди.

Предложенные SLO: P0 — 24 часа, P1 — 72 часа, P2 — 7 дней; approved open query — не старше 48 часов.

## 6. Восемь ворот сигнала — от дешёвых к дорогим

Ворота стоят по стоимости. Если источник не проходит локальную проверку, captions и модель на него не тратятся.

### G0. Identity и дедупликация

Нужны stable platform ID и canonical URL. Повторная находка не создаёт второй артефакт: она становится новым evidence того же объекта.

### G1. Время

Для утреннего выпуска материал должен попасть в trailing 24h; поисковое окно допускает 36h из-за задержек индексации. Старое полезное видео идёт в архивный discovery, но не маскируется под «сегодня».

### G2. Периметр

У каждого артефакта должно быть объяснение, почему мы его получили: approved channel, approved query, gap-check конкретного узла или graph-snowball от принятого сигнала.

### G3. Действие над онтологией

Материал проходит дальше, если он способен:

- изменить свойство узла;
- добавить/закрыть связь;
- закрыть известный пробел;
- создать противоречие;
- стать одним из восьми типов сигнала.

Восемь типов v0.2: релиз модели/продукта; агентная практика; результат исследования; benchmark/evaluation; изменение организации/роли; партнёрство/инвестиция; policy/safety/incident; новый учебный формат или паттерн аудитории.

### G4. Паспорт доказательства

Обязательны: конкретный source artifact, URL, опубликованное и наблюдаемое время, evidence locator, метод извлечения, knowledge label и версия extractor.

### G5. Качество доказательства

Оценка качества evidence считается отдельно от полезности и популярности:

```text
evidence_quality =
  source_weight × knowledge_multiplier × envelope_completeness
  + corroboration_bonus
```

Результат ограничивается `0…1`. Первичный официальный артефакт весит 0.95; исследовательский доклад — 0.90; first-party demo — 0.80; named interview — 0.75; профессиональный разбор — 0.65; новость — 0.55; агрегатор — 0.35.

Knowledge multiplier: наблюдаемый факт 1.0; заявление первой стороны 0.85; производный расчёт 0.75; прогноз 0.65; мнение 0.45; неопределённое 0.40.

### G6. Новизна и противоречие

Кандидат сравнивается с действующими сигналами и получает один режим:

- `NEW` — нового утверждения ещё нет;
- `CORROBORATES` — независимый источник подтверждает существующее;
- `SUPERSEDES` — появилось более новое значение;
- `CONTRADICTS` — источники расходятся;
- `REPEATS` — только повторяет уже известное.

`CORROBORATES` увеличивает доказательность прежнего сигнала. `SUPERSEDES` не удаляет историю. `CONTRADICTS` всегда идёт человеку.

### G7. Маршрут решения

Финальный reason-coded outcome:

- `ACCEPT_SIGNAL`;
- `REVIEW_REQUIRED`;
- `DAILY_ONLY`;
- `ARCHIVE_DISCOVERY`;
- `REJECT_OUT_OF_SCOPE`;
- `REJECT_NO_EVIDENCE`;
- `REJECT_DUPLICATE`;
- `CONTRADICTION`.

Отклонённое не исчезает: оно остаётся в журнале прогона с причиной.

## 7. Пять осей вместо одного «магического» score

Нельзя складывать правду, популярность и полезность в одно число. Хранятся отдельно:

1. `evidence_quality` — насколько утверждение доказано;
2. `relevance` — насколько относится к вопросам Daisy и approved topics;
3. `novelty` — насколько меняет уже известную картину;
4. `attention` — просмотры, velocity и reach; только приоритет ревью;
5. `actionability` — есть ли воспроизводимые действие, инструмент, метод, вход и результат.

Текущий `relevance_score` v0.1 остаётся операционным приоритетом скачивания, но не используется как доказательство сигнала и не может сам создать узел.

## 8. Как появляется кандидат нового узла

Семь источников кандидатов:

1. неизвестный publisher релевантного видео;
2. повторяющийся гость в captions;
3. повторяющаяся организация, лаборатория, инструмент или продукт;
4. outbound citation на первичный источник;
5. co-mention hub, связывающий несколько approved topics;
6. пробел относительно официального roster/benchmark denominator;
7. предложение владельца.

Каждый evidence пишется отдельной строкой: origin artifact, source lane, дата, locator, topics, relevance и extractor version. JSON-список внутри карточки кандидата — только materialized view.

## 9. Identity до популярности

Минимальные identity keys:

- Channel — YouTube `channel_id`, не handle и не название;
- Organization — официальный домен + canonical/legal name;
- Person — canonical name + текущая affiliation + primary profile;
- Tool/product — official URL + publisher node;
- Topic — versioned ontology code.

Если candidate совпадает с alias существующего node, создаётся alias/evidence, а не новый node.

## 10. Ворота promotion: candidate → permanent node

Все условия обязательны:

1. stable identity заполнена;
2. duplicate/alias check пройден;
3. есть связь минимум с одной approved topic;
4. есть два релевантных артефакта в разные даты **или** official roster + один релевантный артефакт;
5. есть две независимые source lanes **или** явное предложение владельца;
6. записано, какой coverage gap закрывает узел и какой ожидается monitoring yield;
7. назначены tier, язык, регион, content policy и `review_due_at`;
8. владелец нажал `APPROVE`.

Никогда не достаточно отдельно: одного вирусного видео, числа подписчиков, одного поискового результата или одного упоминания моделью.

### Node candidate score

Score только сортирует очередь ревью:

- 25 — recurrence evidence;
- 20 — независимость source lanes;
- 20 — topic relevance;
- 15 — ожидаемый monitoring yield;
- 10 — coverage gain;
- 10 — полнота identity.

Порог не создаёт node автоматически.

## 11. Ограничители graph explosion

- ежедневный snowball — максимум один hop;
- еженедельный аудит — максимум два hops;
- не более 50 новых кандидатов в день;
- не более пяти кандидатов от одного origin item;
- generic noun, одноразовый гость и неподтверждённый tool-name не становятся кандидатами;
- новый topic требует изменения ontology version, а не обычного node review.

## 12. Жизненный цикл существующего узла

Узел не удаляется, если перестал быть интересным:

- `APPROVED` — входит в мониторинг;
- `HOLD` — доказательств недостаточно;
- `DORMANT` — временно нет yield, cadence снижен;
- `ARCHIVED` — больше не мониторится, но остаётся в истории;
- `MERGED_ALIAS` — объединён с каноническим узлом;
- `REJECTED` — не прошёл promotion.

Смена affiliation или channel handle создаёт новую assertion/edge version. Стабильный node ID не переиспользуется.

## 13. Что показывать на дашборде каждый день

### Coverage denominator

- сколько checks было запланировано / выполнено;
- `FOUND_NEW / DUPLICATE / NOT_FOUND / PARTIAL / ERROR`;
- coverage по lane, tier, topic и language;
- overdue nodes и queries;
- median detection lag.

### Funnel

- новые артефакты / дубликаты / старые вне окна;
- signal candidates;
- accepted / daily-only / review / rejected по reason;
- contradictions;
- новые node candidates;
- approved / hold / rejected nodes.

### Качество

- captions available rate;
- evidence envelope completeness;
- доля кандидатов с двумя независимыми lanes;
- false positives на 30 принятых/неделю;
- false negatives на 30 rejected и 20 `NOT_FOUND` checks/неделю;
- расхождение с внешними roster denominators раз в месяц.

## 14. Ритм расширения базы

### Каждый день

1. RSS approved channels.
2. Due open queries и entity gap queue.
3. Дедупликация и append raw artifacts.
4. Captions только для новых релевантных items.
5. Signal candidates и reason-coded routing.
6. Candidate nodes только в review queue.
7. Digest последних 24 часов + coverage + rejected section.

### Каждую неделю

1. Проверка новых node candidates и contradictions.
2. Graph snowball до двух hops.
3. Primary roster audit.
4. QA samples и recalculation materialized views.
5. Пересмотр dormant/overdue nodes.

### Каждый месяц

1. Blind-spot audit по внешним denominators.
2. Coverage и language/topic imbalance.
3. Merge aliases, archive dead nodes.
4. Новая method/ontology version, если меняются типы или gates.

## 15. Что автоматизируем только после shadow pilot

В v0.2 verified semantic signal требует человеческого review. После семи дней можно открыть узкий auto-route только для deterministic primary-source фактов при `evidence_quality ≥ 0.85`, полном паспорте и отсутствии противоречия. New node и contradiction остаются ручными всегда.

## 16. Решения, которые нужно принять владельцу

1. Подтвердить восемь signal types или изменить перечень.
2. Подтвердить SLO P0/P1/P2 и 48h для open queries.
3. Подтвердить source weights и knowledge labels как стартовые для калибровки.
4. Подтвердить обязательные восемь условий promotion node.
5. Решить, считать ли official roster + один artifact достаточной заменой двум независимым lanes.
6. После семидневного пилота решить, открывать ли узкий auto-accept для verified signals.

Машиночитаемая версия: `registry/growth-method-v0.2.json`.
