# Daisy AI Daily Radar — уточнённый концепт и план запуска v0.3

Статус: **PROPOSED_OWNER_REVIEW / PRODUCTION LOCKED**. Версия v0.3 принимает сильные стороны v0.2 как стандарт и превращает шесть замечаний ревью в обязательные предзапусковые ворота. Ежедневный worker не включается, пока не закрыты merge и единая идентичность видео.

## 1. Новый центр конструкции

Радар — не новостная лента и не отдельный каталог YouTube. Это входной конвейер фабрики «Практики»:

```text
единый content_item
  → наблюдение и проверяемый сигнал
  → исследовательский core и/или SHELF_CANDIDATE
  → карточка «что взять · что проверить · где граница»
  → эпизод / урок
  → школа / B2B-программа
  → исполнение дела в Daisy
```

Две выходные маршрутизации независимы. `research_route` отвечает, нужен ли материал исследовательскому корпусу. `publishing_route` отвечает, нужен ли он кураторской полке. Один материал может одновременно получить `ADD_TO_CORE` и `SHELF_CANDIDATE`.

## 2. Что не меняется

- fail-closed: всё остаётся `PROPOSED`, пока владелец не принял решение;
- артефакт, сигнал и узел — разные сущности;
- `NOT_FOUND` отличается от `NOT_CHECKED` и технической ошибки;
- ASR запрещён; используются только доступные платформенные captions;
- evidence, relevance, novelty, attention и actionability не смешиваются;
- просмотры определяют только порядок проверки;
- новый узел и contradiction всегда требуют человека;
- история append-only, производная аналитика пересобираема.

## 3. Исправление состава внимания

Проблема v0.2 — не отсутствие frontier-источников, а перекос дорогой обработки в их сторону. Поэтому баланс считается не по числу узлов графа, а по **слотам captions, extraction и человеческого review**.

Целевое распределение дорогих ежедневных слотов:

| Полоса | Доля | Что получает |
|---|---:|---|
| Практика работы EN | 30% | обычная работа, профессии, self-productivity |
| RU + builder | 30% | русские практики, Copilot, vibe coding, n8n/Make |
| Frontier primary | 30% | только первичные релизы и действительно важные исследования |
| Open discovery | 10% | новые каналы и слепые зоны |

Из списка ревью формируется longlist 18 каналов; после stable-ID и alias-check выбираются около 16. До импорта ID они не становятся watch nodes. Jeff Su и Kevin Stratvert предлагается поднять в P0, бизнес-медиа оставить P2-weekly, frontier-хвост переводить в P2/DORMANT по фактическому yield.

## 4. Единая идентичность видео

`radar_item` и `discovery_candidate` больше не являются двумя «истинами» о ролике. Канонический объект уже существует в корпусе — `content_item`.

```mermaid
flowchart LR
    Y[YouTube video ID] --> C[content_item]
    C --> S[content_snapshot]
    C --> T[transcript + segments]
    C --> D[discovery_candidate membership]
    C --> R[radar_item membership]
    D --> E[search-hit evidence]
    R --> G[daily-run evidence]
```

Ключ идентичности: `(platform_id, platform_item_id)`. Порядок ingest:

1. найти или создать `content_item`;
2. проверить существующие snapshot и transcript;
3. скачать только отсутствующий разрешённый слой;
4. добавить radar/discovery membership;
5. дописать evidence обнаружения.

До production нужна аддитивная миграция `radar_item.content_item_id → content_item`, backfill по YouTube ID и dual-ingest test: один ролик, найденный обеими подсистемами, создаёт один `content_item`, один канонический transcript и не вызывает второй captions request.

## 5. RU и рынок обучения

Цель v0.3 — 31 запрос: 26 daily и 5 weekly. RU daily увеличивается до восьми рабочих/builder-запросов. Новостной RU-запрос становится weekly. Добавляются две weekly-полосы рынка обучения ИИ и отдельный кандидат типа сигнала `AI_EDUCATION_MARKET_CHANGE`.

Новые формулировки проходят owner review до запуска. Zerocoder и Яндекс Практикум рассматриваются как P2 organization candidates, но не получают permanent node без identity и promotion gate.

## 6. Контракт semantic summary

Семь существующих полей сохраняются. Добавляются обязательные классификаторы:

- `deliverable_types[]` — DT01–DT16 с evidence;
- `context_loops[]` — K1–K10 с evidence;
- `promise_types[]` — `DO_A_TASK / UNDERSTAND / SAVE_TIME / AUTOMATE / EARN_MONEY / BUILD_BUSINESS / AVOID_RISK / STAY_CURRENT`;
- `knowledge_status` для каждого значения;
- независимые `research_route` и `publishing_route`.

Для `SHELF_CANDIDATE` обязательны четыре поля: `what_to_take`, `what_to_verify`, `boundary`, `evidence_locators`. Это не готовая публикация и не автоматическая рекомендация: это карточка для куратора.

## 7. Ёмкость shadow pilot

После исправления запросов верхняя оценка дешёвого сканирования:

```text
26 daily queries × 25 search slots + 64 RSS polls = до 714 наблюдений/день
```

Это не означает 714 downloads. Первый dry run сохраняет `hydrate_limit = 40`:

- 12 — work/practice EN;
- 12 — RU + builder;
- 12 — frontier primary;
- 4 — open discovery/blind spots.

Сначала переиспользуются существующие `content_item`, snapshots и transcripts. Ежедневно показываются denominator, новые ID, дубликаты, reuse, новые captions, backlog, p50/p95 времени и rate-limit/challenge events. После YouTube challenge параллелизм не повышается. Если backlog держится два дня, сначала сокращаются low-yield queries и P0, а не слепо увеличивается нагрузка.

## 8. Жёсткая очередь запуска

| Gate | Работа | Условие выхода |
|---|---|---|
| L0 | merge `feat/daisy-agent-video-discovery` | discovery находится в `main` |
| L1 | rebase радара + content identity migration | dual-ingest test PASS |
| L2 | registry/query v0.3 | выбраны ~16 каналов, импортированы stable IDs, согласован 31 запрос |
| L3 | 24-часовой capacity dry run | опубликован denominator/reuse/backlog/runtime report |
| L4 | shadow pilot 7 дней | измерены coverage, lag, FP/FN и ёмкость |
| L5 | калибровка | владелец принимает пороги и narrow auto-route |
| L6 | production 05:30 MSK | активны runbook, rollback, dashboard и weekly audit |

L4 запрещён до L0–L3. Ручной feature-branch deploy может показывать UI, но не считается production-ready состоянием кода.

## 9. Одиннадцать решений владельца

Рекомендации ревью перенесены в интерактивную карту как отдельный decision ledger:

1. состав — принять с добором и ребалансом З1;
2. P0/P1/P2 — принять с work-up/news-down;
3. Shorts — оставить low priority без отдельной полосы;
4. языки — EN+RU, но RU query budget довести до паритета;
5. summary — принять с DT/K/promise/SHELF delta;
6. типы сигналов — восемь текущих + education-market change;
7. SLO — принять как preregistration;
8. source weights/knowledge labels — принять для shadow calibration;
9. восемь promotion gates — принять без изменений;
10. official roster + один artifact — допустить как замену двум полосам;
11. auto-accept — HOLD до пилота, затем только deterministic primary-source facts.

Решение `APPROVE` в интерфейсе означает принятие именно рекомендуемой формулировки. `HOLD` оставляет gate закрытым. `CHANGE` требует новой версии контракта до запуска.

## 10. Definition of Done перед production

- discovery смержен, radar rebased, CI зелёный;
- один platform video ID разрешается в один `content_item`;
- повторный ingest не скачивает captions второй раз;
- новый состав и запросы имеют owner decision;
- summary schema содержит DT/K/promise и независимый shelf route;
- capacity dry run и 7-дневный shadow report опубликованы с denominators;
- FP/FN samples и NOT_FOUND audit выполнены;
- production worker включается отдельным решением, с rollback и weekly audit.

Машиночитаемый план: `registry/launch-plan-v0.3.json`.
