Tags give the ability to mark specific points in history as being important
-
t0198-f2f3-spec-2026-10-03
74b959e2 · ·TODO-0198: F2/F3 SPEC, gate 'не хуже хардкода', каркас + эксперты
-
-
p1-audit-0174-2026-10-03
262f9a8c · ·TODO-0174 P1: аудит шага — ОТКЛОНЁН, 5 блокеров Коммит bf88254 содержал только тест (1 файл, +417) без кода, который он проверяет. Независимый аудит переполучил все числа и нашёл: 1. В коммите нет кода, сообщение коммита описывало 5 файлов. 2. Охранный тест test_stand_covers_new_paths пересобирает стенд у себя (свой SQLite + save_news_hits + add_proactive_trigger). Настоящий стенд делает только init_store. Оба мира дают 51, наборы разные 2-на-2. Реальный стенд не задевает 4 из 10 зон (news_digest 0/14, reminder_cancel_miss 0/14, context_overflow 0/7, web_search_digest 0/14). 3. reminder_topic: перестановка _CALENDAR_TOPIC меняет 5 из 6 проб mention -> calendar. 4. skills.py:1587 — английский ответ стал немецким («aktualisiert.»). 5. conftest.py: reload(server) переприсваивает server._relay_rooms новым {}, test_relay.py держит старый объект из коллекции -> test_relay_duplex детерминированно падает (1 failed/113 passed против 114 passed на исходной фикстуре). Правка при этом не нужна. Плюс 4 крупных (_TOPIC_CREATE пере-матчит «listeme 3 ekle»; _FORGET починил 2 языка из 7; 17 мёртвых строк skills.py:1615-1631; литералы yumurta в продовом regex) и 3 мелочи. Полный прогон agent_core: 1 failed, 1928 passed, 3 skipped, 462 subtests, 772.02s — единственный сбой это блокер 5. Состояние зафиксировано для разбора, НЕ как принятая работа. Отчёт: TODOs/TODO-0174/P1-AUDIT-2026-10-03.md -
-
-
-
strategy-2026-09-30
c3f58921 · ·TODO-0194 · стратегия корпуса против хардкода и запрет регресса Прод не трогаем: 77.3% против 82.8% означает, что модель проигрывает собственной исходной логике. Измерено, почему хардкод побеждает. 75.5% корпуса сидит в четырёх метках, из них 47.6% — класс <LLM>. 4702 строки (13.1%) — настоящие намерения, помеченные «инструмента нет», потому что регулярка не распознала: «запоини что я в Берлине» это memory_remember. Мы учим модель отказывать там, где регулярка сдалась, то есть на своём поле. Языки вымирают незаметно: fr закрывает 12 намерений из 73. Концепция: хардкод есть конечный перебор паттернов, и если носитель обучения подмножество этих паттернов, модель по построению не может его превзойти. Поэтому разметка перестаёт быть выводом регулярки и становится конструкцией, генерация идёт от семантической рамки, слой <LLM> делится на три класса, на каждое намерение ставится пол и потолок. Храповик запрещает регресс: 85 полов по языкам и намерениям могут только растивать. Проверено вживую — итерация с растущим агрегатом и умирающими uk/tr/es/fr отклонена. Тактическая честность: расхождение ledger с последним замером обнаруживается, иначе вписанный вручную floor 99.9 заблокировал бы все честные итерации навсегда. Золотой набор пуст: без человека он останется пустым, и это единственная опора, которую нельзя сгенерировать.
-
counterfactual-2026-09-30
376a35a0 · ·TODO-0193 · контрофактик: 901 строка зря уходит в LLM, но исполнить метку нечем Интеграция в бой заблокирована конструктивно, а не организационно: 30 функций try_*, ноль адресуемых по имени метки. Тень вместо роутера. Из 10977 тестовых на 1406 регулярки сдались при реальном намерении, и модель указывает верный инструмент на 901 — 8.2% трафика. Потолок 91.0% против 82.8%. Порог доверия непригоден: точность падает с уверенностью, 26.9% на margin 0.99. План «порог 0.85 → раскатка» в исходном виде нерабочий. Первая версия скрипта выдала выдуманные «1.1%» из-за чужого токенизатора. Воспроизведение метрики из compare.json поставлено предохранителем перед любым выводом — сработал и заблокировал мусор.
-
autopilot-2026-09-30
5e3ead5c · ·TODO-0192 · автономный прогон, сверка с живым Алексом, гипотезы против фактов Одна команда без агента: пайплайн, сверка с ЖИВЫМ инстансом по HTTP в работающий контейнер, проверка гипотез, заявка круглым столам. Сверка идёт по трём осям сразу — язык × флоу × домен, пять флоу: canon, typo, hedge, partial, compound. 30 сценариев, живой ответил на все 30. Гипотезы против фактов: 7 подтверждено, 1 опровергнута. Важнее самого этого — механизм сначала ВРАЛ: операторы > и < не были реализованы вовсе, и вердикты выходили случайными, а в отчёт не писались total/replied, из-за чего факт читался нулём. У каждой оператора теперь тест на границе, а check_hypotheses принимает гипотезы и факты параметрами, иначе его нечем тестировать. По стендам честно: круглые столы в репозитории — разбор архитектуры экспертами, гостевых фраз на семи языках там нет. Синтезировать немецкие и турецкие экспертные диалоги я не стал — это тот же класс выдумки, что дал 6002 смеси языков и +23.9 п.п. роста бенчмарка, принятого за рост модели. Заявка собрана, метки без сида перечислены, требования к реплике прописаны.
-
iter0191-handoff-2026-09-30
d867c202 · ·TODO-0191 · виток закрыт, передача джунам и Талосу Ветка iter/0190-ml-router. Прод не тронут. ЧТО РЕАЛЬНО СДЕЛАНО корпус 36 016 строк · 2 131 сид · 7 языков · 74 метки модель 77.3% против живых 82.8%, разрыв 5.5 п.п. ни один язык не ниже 67% (было 13% на fr) ONNX opset 17, seq динамический, сверка с fp32 3.81e-06 67 тестов пайплайна, 1 751+ тест на проду ЧТО НЕ ДОСТИГНУТО И ПРЕДСКАЗАНО ЗАРАНЕЕ гейт 85% не пройден, и он не будет достигнут увеличением модели: гибрид уехал в порог 1.0, в бою берутся одни регулярки; модель выигрывает только там, где регулярок нет (lat 54.9% против 29.6%) главный остаток — 100 непереведённых слотов каталога и инциденты только на ru/de/en (2/2/2/0 в остальных). Это перевод, а не код 77.3% оптимистичны: все 10 977 тестовых строк участвовали в выборе порога, отложенного набора не существует модель на NPU не запускалась: формат готов, совместимость с XDNA не проверена ЧТО СРАБОТАЛО И ПОВТОРЯЕМО заморозка нижних 6 слоёв +32 п.п. на dev и lr=1e-4 после неё +12.6. Обе оси от узкого места Radeon 890M, а не от архитектуры. На другом железе перепроверить обе. ОДИННАДЦАТЬ УРОКОВ в SPEC.md раздел 5 — от «меряй, где теряется результат» до «set("a-z") даёт три символа, а не диапазон». Каждый стоил реального прогона. -
iter0190-close-2026-09-30
59008579 · ·TODO-0190: кривая объёма, раунд 2 авто-поиска, ONNX для NPU Кривая объёма больше не плоская: 5.24% на 20 сидах → 20.41% на 300, дальше спад -3.4 п.п. Объём помогает, но не бесконечно. Помеха названа: подрезка по сидам убирает и метки, поэтому кривая мерит «объём + состав» вместе. Раунд 2 авто-поиска: lr=1e-4 дал dev 17.69% → 30.35%. Вместе с заморозкой 6 слоёв из раунда 1 — около +45 п.п., и обе оси от узкого места Radeon 890M, а не от архитектуры модели. Экспорт ONNX сделан и проверен: 110 КБ граф + 471 МБ весов, opset 17, 74 метки, seq динамический, расхождение с fp32 3.81e-06, метки совпали 5/5. На NPU не запускалась — формат корректен, совместимость с XDNA не проверена. Итог: модель 77.3% против живых 82.8%, разрыв 5.5 п.п.
-
paraphrase-seeds-2026-09-29
cd0d8da5 · ·TODO-0188 · перефразы: +23.9 п.п. оказалось мусором, честный результат 61.6% Перефразы вместо вариаций — правильная идея: у большинства меток был ровно один сид, и из-за этого нельзя было построить честный отложенный набор (dev сжался до 58 строк и трёх меток, кривая «объём → точность» вышла плоской на всех объёмах). Перефраза — это независимый сид, и это разблокировало валидацию. ПЕРВАЯ ЦИФРА БЫЛА НЕВЕРНОЙ, И ВОТ ПОЧЕМУ. Прогон дал «47.3% → 71.2%», что выглядело отличным результатом. Проверка на смешение языков показала: 'а, не мог бы ты merke dass ich in berlin bin' ← русский + немецкий 'ну, не мог бы ты retiens que je vis à berlin' ← русский + французский 'короче, не мог бы ты hatırla ki berlin'deyim' ← русский + турецкий Словари синонимов и рамки вежливости РУССКИЕ, а применил я их ко всем языкам. 20 514 из 32 729 перефраз — 63% — оказались смесью двух языков, попали в корпус с метками от живого кода и обучали модель мусору. Именно поэтому вырос и эталон: регулярки узнавали двухязычный мусор лучше модели, и «рост» на 23.9 пункта был ростом БЕНЧМАРКА, а не модели. Починено: генерация разрешена только языку с собственным словарём, то есть пока только русскому. Покрыто тремя тестами, включая прямой — немецкий сид обязан дать ПУСТО, а не смесь. ЧЕСТНЫЙ РЕЗУЛЬТАТ после починки было 8 968 строк, 533 сида, модель 47.3%, живой 56.4% стало 17 229 строк, 905 сидов, модель 61.6%, живой 71.9% Разрыв сократился с -9.1 до -10.3 п.п. — почти без изменений, и это правда. Модель выигрывает у регулярок на en (+19.3), de (+0.9) и lat (+50.8), проигрывает на ru, es, tr. ГЛАВНЫЙ ЭФФЕКТ ПЕРЕФРАЗ НЕ В ЦИФРЕ ТОЧНОСТИ, А В СТРУКТУРЕ: меток с двумя и более независимыми сидами стало 61 из 72 вместо 20 из 65. Именно это сделало валидацию различающей и открыло возможность честно измерить зависимость от объёма, а не гоняться за процентами. ОСТАЛОСЬ: словари переводов не написаны, поэтому перефразы только на русском, а нехватка данных больше всего именно у de/en/fr/es/uk/tr. Это следующий рычаг и следующая задача. -
hybrid-dispatch-2026-09-29
174dd75e · ·TODO-0186 · гибрид «модель/регулярки»: 63.7%, и где именно расходятся Главный результат: раз регулярки остаются в бою, спорный вопрос не «лучше ли модель», а где каждая линия выигрывает. модель 57.4% живой 53.4% ГИБРИД 63.7% при пороге доверия 0.08 Порог — плато 0.08..0.32 в пределах 1 п.п. от лучшего, то есть не остриё. Проверено тестом: гибрид обязан быть не хуже обеих чистых линий, а порог обязан лежать плато, а не быть одиночным максимумом. Оба свойства зафиксированы тестами, иначе «порог 0.08» нечем было бы защитить от подгонки. ТАБЛИЦА ПАРИТЕТА, 65 ИНСТРУМЕНТОВ — TODO-0186/PARITY.md Артефакт, который едва не провёл. Первый подсчёт дал «регулярки выигрывают 56% строк, модель 37%». Разбор: метка <LLM> занимает 324 строки из 1414, то есть 23% теста, и на ней регулярки дают 96% против 54.9%. Но <LLM> — не навык, а «ничего не вернуть», и правильный ответ там и есть пустой ответ: выигрыш по построению. Без отделения этого класса вывод ПЕРЕВОРАЧИВАЕТСЯ. Столбец «реальный навык» в таблице теперь несёт это явно. Честная картина по 64 реальным навыкам: модель 41 метка, 518 строк (48%) регулярки 15 меток, 463 строк (42%) ничья 8 меток, 109 строк (10%) Закономерность, которая делает гибрид осмысленным: модель сильна там, где регулярок НЕТ (companion_seed 0%→100%, prompt_help 26%→93%), и слаба там, где регулярки заточены (reminder_set 76%→21%, memory_forget 71%→27%, короткие menu_подписи 83%→54%). Ни одна чистая линия не выигрывает — только диспетчер. ДВА ДЕФЕКТА, КОТОРЫЕ НАДО РАЗОБРАТЬ companion_shelf_recommend — модель 0.0% при 40 строках. Не «плохо», а ровно ноль: похоже на вырождение класса в тренировке. reminder_set — 20.7% против 75.9%, целое семейство напоминаний. ВАЛИДАЦИЯ, ТРИ ПОПЫТКИ, КАЖДАЯ ВСКРЫЛА СВОЙ КЛАСС ОШИБКИ нарезка по строкам → val 97.6% при test 60%: измеряет запоминание; нарезка по сидам → val падает 43→35, test растёт 42→52, и early-stop выбрал ХУДШУЮ эпоху, потому что у 45 из 65 меток сид ровно один и он целиком уходил в валидацию, метка исчезала из обучения; только метки с >=2 сидами → val и test движутся вместе (45.0% и 61.2%). Guard на потерю меток при отрезании теперь есть, и он покрыт тестом. ЧЕСТНО ПРО ЦИФРУ: гейт 85% НЕ пройден (модель 57.4%). Прошлые 89.3% были на одних say_ru, самом лёгком подмножестве. Все 1414 тестовых строк участвовали в выборе порога, поэтому 63.7% — оптимистично: отложенного набора у нас нет. Гибрид нигде не применён в коде, это расчёт, не боевая логика. -
domain-registry-core-2026-09-29
3cee06d4 · ·TODO-0182/0183 · домены незнания: ядро готово, до продукта не доведено Смена постановки за день, зафиксирована честно. БЫЛО: «автодобавление неизвестных тем» — то есть сбор фраз. СТАЛО: регулярная проверка ДОМЕНОВ, где Алекс не спец, и три разных ответа: домена нет — спросить; домен в работе — сообщить со сроком; срок наступил — сообщить самому. Ключевая развилка, которую я упустил в первой постановке: фраза != домен. Про марки велосипедов, про марки машин и «а BMW надёжный» — три фразы, один домен. Сбор по фразам дал бы 402 записи и ноль инсайта. Домены уже названы в shelf_competence.v1.json: 71 роль, 61 уникальный, вторая таксономия не заводится. ГОТОВО И ПРОВЕРЕНО (TDD, 11 тестов) - observe(): один домен — одна запись со счётчиком, не папка на вопрос - reply_for(): спросить / «уже работаю, ориентир на дату» / «теперь в теме» - check_due(): какие сроки наступили - seed_from_competence(): 61 домен «уже спец» — по ним молчит Регресс: 1775 passed, 462 subtests (было 1764, +11). НЕ ПОДКЛЮЧЕНО К ПРОДУ domain_registry.py не вызывается ни одним обработчиком. Никто не зовёт reply_for, никто не зовёт check_due. APScheduler в проекте нет, отдельного воркера в compose нет — периодика требует правки фонового потока агента, то есть production-кода в критичном пути. Остаток завёлся отдельным TODO-0183, работа остановлена владельцем. Прод не тронут. ДВА РЕШЕНИЯ, КОТОРЫЕ НЕЛЬЗЯ ПЕРЕПИСАТЬ - check_due() подсвечивает срок, но НЕ завершает работу. Срок наступил != работа сделана. Если дату подтверждает таймер, Алекс начнёт врать «стал спец» по календарю — тот же класс выдумки, что TODO-0181. В done переводит только ручной complete(). - «Изначально компетентный» и «стал компетентным» — разные вещи. Их смешал, Алекс хвастался «кстати, теперь в теме» тем, что и так умеет, на каждом вопросе. Тест поймал, добавлено поле known. УРОК ДНЯ, ЗАПИСАННЫЙ В 0177/0179/0180 Симптом «ответ оборвался на третьем пункте списка» имел ДВЕ причины: потолок 120 токенов и обрезку по предложениям. Я закрыл первую, не проверив на проде, и объявил победу. Симптом «плохой топ-10» оказался добивкой не-немецкими марками, а не повторами, которые я закрыл и записал в графе «сделано». Общее: выбирать параметр по названию и называть закрытым то, что не проверено на живом ответе.
-
reply-truncation-lists-2026-09-29
7115fd57 · ·TODO-0177..0181 · обрезанные ответы разобраны до причины, grounding ждёт решения За день снят один симптом с двумя разными причинами и один симптом, у которого причина оказалась не той, что думали. ЗАКРЫТО - TODO-0179: _clip_voice резал нумерованные списки посредине. Разрез шёл по `[.!?...] + пробел`, а пункты разделены \n, который в класс не входит — весь список склеивался в одно «предложение» и отсчёт до voice_max_sentences=3 не совпадал с пунктами. Строка в 79 символов с хвостом «3.» воспроизводится из _clip_voice(full, 3) побайтово. После фикса: 99 и 921 символ доезжают. - TODO-0177: потолок генерации 120 → 1024 токенов, ALEX_MAX_TOKENS. - TODO-0180: дубликаты в одном списке (модель добирала «топ-10» повторами, Specialized и Cube шли дважды). Повторы убраны, потеря пунктов сказана вслух. ОТКРЫТО, ЖДЁТ РЕШЕНИЯ ВЛАДЕЛЬЦА - TODO-0181: Алекс добивает «топ-10» не-немецкими марками и ОБОСНОВЫВАЕТ их («Bianchi итальянский, но компоненты связаны с немецкими рынками»). Проверить факт регуляркой нельзя, эвристика выкинет настоящие Cube и Canyon вместе с мусором. Нужен grounding-слой либо запрет добивать список до N. ЧЕСТНО ПРО ПРОВЕРКУ - Фикс 120 → 1024 объявлен закрытым и не закрывал симптом: «топ-10 марок» — это ~25 токенов, при лимите 1024 обрезаться не может. Симптом имел две причины, я закрыл одну и не проверил на проде сразу. - Детеп повторов задеплоен и на живом ответе не сработал ни разу. Настоящая причина — добивка неподходящими брендами. Закрыт симптом, выглядевший причиной. - Правильный первый шаг в обоих случаях — curl на бэкенд и длина ответа, а не выбор параметра по названию. Прод: смоук 14/0, регрессия 1764 passed, 462 subtests. Ответы упираются в 1024 токена при длинных обоснованиях — отмечено, не чинилось.
-
proactive-alarm-accepted-2026-09-26
8b8ed3db · ·TODO-0169 · будильник напоминаний принят владельцем в браузере Сквозной сценарий подтверждён: постановка голосом → подтверждение с меткой времени → пузырь в чате → модал со списком и деактивацией → звонок → голос на звонке («Внимание. …»). Эта приёмка закрыла 4 бага, невидимых в коде: клиентский навык перехватывал команду (R20), цепочка брала таймер один раз при открытии страницы (R21), shell-ловитель съедал команды с числом (R22), парсер не знал форм времени без числа (R23). Плюс R24: клиент теперь сообщает метку сборки, service worker обновляется сам. Итог: agent_core 1746 passed, FE 345, tsc чисто, локали 181=181 ×7, lang_audit 41×7.
-
-
-
plan-0174-intent-truth-learn-2026-09-26
3d4ad8fd · ·TODO-0174 epic plan: phrase→allowlist tool→truth→self-learn (F0–F7)
-
proactive-reminder-truth-2026-09-26
0233112e · ·LLM больше не выдумывает напоминания и не врёт об удалении