interesting: true/falseprimary_kinds (prompt, config, troubleshoot...) и profile_routingDIGEST_CLASSIFY_MODEL (Haiku-class, ~10x дешевле Sonnet)interesting=true если есть has_code_block или reaction_count > 3profile_routing per threaddiscord_channel.digest_profile_id → приоритетdiscord_server.digest_profile_iddiscord_digest по embedding similarity к incoming тредамupdate_of / supersedes вместо re-extract{message_id, char_start, char_end} → skipentity_refs + same kind + high similarity → merge с version trackingextraction_window_id — re-processing replaces, not appends_digest_loop() в app/scheduler.py рядом с _gather_loop()last_digested_at + digest_schedule_minutespending digest job для due каналовdigest_enabled: bool — default false, opt-indigest_schedule_minutes: int — default 1440 (ежедневно)asyncio.Event для instant trigger (как у gather)discord_digest_jobchunks_processed: intitems_extracted: int — все типы (decisions + actions + knowledge + questions + topics + links + artifacts)pass1_eliminated: int — сколько тредов Pass 1 отсёкvalidation_failures: intwall_clock_seconds вычисляется из completed_at - started_attest_digest_classify.py — classifier возвращает корректные interesting флаги, bias к true на code/workflow/reactions, batch classificationtest_digest_dedup.py — pointer exact match dedup, embedding similarity merge, entity-aware merge, idempotency on re-runtest_digest_scheduler.py — digest loop scheduling, digest_enabled respected, no duplicate jobs, wake signalScheduler автоматически создаёт digest jobs для enabled каналов.
Pass 1 отсекает ≥50% тредов. Cross-run dedup не даёт дублировать knowledge items.
Все метрики заполняются в discord_digest_job.