Commit graph

165 commits

Author SHA1 Message Date
Simbiot Harness
72727c6339 TG: 👀 реально ставится, ответы в группе — reply'ем, правка сообщения не дублирует входящее
Жалоба Alex: «реплаю на сообщения Коди — не реагирует». Триаж реплай на
бота распознавал (07:57, rule=reply_to_bot, ответ через 25 с), но:
- set_reaction слал reaction_type одиночным объектом вместо reaction —
  массива ReactionType: Telegram видел пустую реакцию — в личке молча
  «снимал реакции» (ok → MessageSeen, 596/нед, 👀 не было видно), в
  группе 400 REACTION_EMPTY. Тест test_seen_indication закреплял баг —
  исправлен под Bot API;
- ответ в группе уходил отдельным сообщением: теперь reply на сообщение
  (батч — на последнее, досылка --followup — на исходный вопрос) с
  allow_sending_without_reply; личка — как было;
- edited_message уже принятого сообщения писался новым входящим
  (m-516174914/915 — исправленная опечатка дала дубль в батче) — пропуск.
Тест: test_tg_group_ux 10 PASS; полный набор — без регрессий.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 08:01:15 +00:00
Simbiot Harness
16d2b438bd адресация: имя бота — только звательное обращение; разговор О Коди — не повод отвечать
Кейс 2026-10-17 07:40: фильтр отсёк «Блять)»/«Продолжает)», но правило
«имя в тексте = обращение» ответило на «Так теперь Коди должен отвечать
когда его тегают…» и «Ещё и забыл что он Коди)» — люди обсуждали бота.
- детерминированно — только звательное: «Коди, …», «Коди!», «…, Коди»;
  имя посреди фразы — серая зона;
- промпт decision-модели: «Коди» = Cody, речь о нём в третьем лице —
  не обращение. Пробы: 8/8 (о боте ≤ 0.14, к боту ≥ 0.96); реплей
  истории правления — оба утренних ложных ответа ушли (0.40/0.13),
  разговор Alex с ботом без тега по-прежнему распознаётся;
- мандат мин-уровня: «Коди» в чате — это ты (бот писал о себе в
  третьем лице: «Коди … на вашей стороне»).
Тест: test_addressing 31 PASS; полный набор — без регрессий.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 07:46:20 +00:00
Simbiot Harness
3ff504143a адресация: группы без chat_type по chat_id<0; облако decision — таймаут 30 с, кулдаун 60 с
- старые записи инбокса без chat_type (до t-261013113629) считались
  личкой и обходили фильтр адресации — группа теперь и по chat_id < 0;
- утренний холодный старт clef:27b в облаке (> 15 с) взводил
  предохранитель на 5 минут → ответы от CPU-nimble по 10 с: облако
  ждём до 30 с, его кулдаун 60 с (локальной — по-прежнему 5 минут).
Реплей реальной истории «Правления» (62 сообщения, бот отвечает только
на адресованное, облако ~0.66 с): приветствия и переписка людей между
собой отфильтрованы; разговор Alex с ботом без упоминания распознан
по контексту; спорные — 2–3 в каждую сторону, «Коди»/@/reply — всегда.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 07:13:35 +00:00
Simbiot Harness
9d13e59742 адресация в группах: Коди больше не встревает в чужие разговоры
Кейс «Правления»: бот отвечал на каждое сообщение группы — «Доброе
утро!», реплики Alex для Vlad, ответы Vlad на вопросы Alex: фильтра не
было, любое сообщение разрешённого человека будило минутный LLM.

harness/addressing.py — триаж ДО гейта, без LLM:
- личка/портал/агенты — как раньше;
- группа, детерминированно: @juno42bot, reply на бота, имя (Коди/Cody,
  SIMBIOT_BOT_NAMES) → боту; reply на человека → не боту;
- серая зона — decision-модель, choice «кому адресовано»: бот / человек /
  группа; P(бот) ≥ 0.5 (SIMBIOT_ADDRESSING_MIN_P). В истории — только
  ответы бота на адресованное: «встревания» сбивали модель. Замер на
  истории правления: адресованное 0.93, остальные 14 ≤ 0.22 (noul с
  полной историей давал 4 ошибки). Модель недоступна → молчим.
Вердикт: MessageTriaged{addressed} (+ 👀 только тогда) или
MessageIgnored{not_addressed}. Поллер пишет reply_to_user_id/is_bot и
mentions_bot; 👀 в группах ставит триаж, а не приём.
Тест: test_addressing 25 PASS; полный набор — без регрессий.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 07:04:56 +00:00
Simbiot Harness
2b266caab5 сжатие стора с подписью + «сначала ответ, потом работа» на мин-уровне
harness/compact.py + cli.py compact [--dry-run|--vacuum|--verify-archives]:
шум сек-уровня (CycleTicked sec, ReflexObserved без алерта/команд/каналов)
старше часа → архив jsonl.gz (0600, строки целиком со sig) → мост цепочки
(подписи унесённых строк, на которые ссылаются остающиеся, + маркеры
boundary:<id> для legacy-границ) → подписанный StoreCompacted с sha256
архива/строк/моста → удаление пачками. audit.verify_events принимает мост
только при совпадении хеша с подписанным событием; проекции подгружают
мост лениво, если хвост перекрыл сжатый диапазон (rebuild с нуля).
Репетиция на копии прода: 1389 → 200 МБ, verify 484 с/3.4 ГБ → 29 с/420 МБ,
архив 246 МБ — все 2.47 млн подписей проверены; rebuild_projections OK.
Найдено репетицией: legacy-граница (id 466633) и коллизия id сжатия в
одну секунду — оба покрыты тестом. scripts/compact-store.sh — процедура
с VACUUM под остановленными писателями.

мин-уровень: если до ответа нужна работа >30 с — сначала короткий
tg-reply, итог — cli.py tg-reply <id> --followup (в чат входящего:
группа → группа; идемпотентно по тексту). p90 «старт LLM → ответ» был 223 с.

hour: лимит 300 вызовов оставлен — реальный пик 205 (p90 169), 100
оборвал бы 8 из 19 тиков.
Тесты: test_compact 25 PASS, test_followup 10 PASS; полный набор — без регрессий.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 20:10:26 +00:00
Simbiot Harness
b257c32558 аудит @juno42bot 2026-10-16: медиа без подписи в триаже, мин-тик по входящему, тишина сек-уровня, изоляция тестов
- фото/документ/видео без подписи выпадали из триажа (_pending_inbox и
  build_context пускали только текст/голос): висели до 23 ч, все 4
  неотвеченных за неделю — такие. Один фильтр _is_pending, медиа с тегом
  и путём файла; окно свежести SIMBIOT_MEDIA_PENDING_H=6 — старые не
  будят LLM задним числом; стикер без текста — не повод.
- MinNudge: мин-тик через 3 с тишины после MessageReceived/Transcribed, не
  ждём границы минуты (было: медиана 36 с до старта LLM, p90 93 с при
  24 с самой модели). Слот следующего такта, граница его пропускает;
  SIMBIOT_MIN_NUDGE=0 — выключить.
- сек-уровень: CycleTicked+ReflexObserved каждую секунду = 1.35 млн
  подписанных событий/нед (98% стора 1.37 ГБ). Теперь heartbeat раз в
  60 с + такты с событием (алерт, команды, каналы); «reflex ok» не
  спамит журнал.
- 6 тестов писали в боевой стор под SIMBIOT_HOME тика (TTFTWatchdogRetry
  с бюджетом 0.5 с в проде — это они): изоляция SIMBIOT_DB.
Тест: tests/test_tick_latency_noise.py 20 PASS; полный набор — без регрессий.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 19:32:15 +00:00
Simbiot Harness
88bb2c0a95 decision-модель в тиках: Ollama Cloud clef:27b → локальная nimble (systemone-bench)
harness/decision.py — клиент /v1/systemone по схеме router42 бенча:
механика — быстрый путь, decision-модель — арбитр, недоступна → фолбэк.
- порядок батча задач: из 9 старейших первой — самая ценная для AUM (on);
- тема инициативной реплики: выбор вместо round-robin (on);
- серая зона гейта (только warn/info): P(нужен LLM) < 0.35 → тихий такт (shadow);
- cli.py decide: статус бэкендов, вопрос 2–9 вариантов / P(да), --stats.
Бэкенды: облако clef:27b (~0.7 с, SIMBIOT_DECISION_API_KEY) → nimble на
CPU (10–30 с); предохранитель на бэкенд, кеш детерминированных ответов,
DecisionMade (backend/model/ms/applied) — policy trace для GA-сшивки.
Дефолт SIMBIOT_DECISION=off — старые тесты герметичны.
Тест: tests/test_decision.py 34 PASS (фейковый эндпоинт); полный набор — без регрессий.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 19:21:29 +00:00
Simbiot Harness
c7b7996faf digest: hour 2026-10-16 17:00 — MCP-токены: показ на деталях агента + тул agent_token_issue + свой токен у mon (батч 2/2) 2026-10-16 17:11:51 +00:00
Simbiot Harness
6a8d1c832a digest: hour 2026-10-16 16:00 — Mon на своём сервере, фиксы claude-панелей (батч 4/4) 2026-10-16 16:11:39 +00:00
Simbiot Harness
b2391c2b5b set-tg-bot: 3 попытки getMe timeout=15 + backoff 3/6с (t-261016141220) 2026-10-16 14:19:22 +00:00
Simbiot Harness
0f7d63722c digest: hour 2026-10-16 13:00 — bypass-развертка claude code, gennady закрыта 2026-10-16 13:04:54 +00:00
Simbiot Harness
b9755187cf deploy-claude-code: bypass permissions + root по умолчанию (t-261016120111) 2026-10-16 13:04:02 +00:00
Simbiot Harness
ecc9765996 member_create в описаниях тула портала (t-261016064519): describe_tools + промпты min/hour 2026-10-16 07:15:46 +00:00
Simbiot Harness
fc8d848bc5 hour-2026-10-15-2300: дайджест часа — тихий час (0 неотвеченных), фикс памяти контекста e-261015222515 (0daf101), эскалаций 0, burn 7д 193.68→238.62 2026-10-15 23:03:34 +00:00
Simbiot Harness
0daf10135c e-261015222515: память разговора в контексте тика — секция НЕДАВНИЙ РАЗГОВОР (отвеченные реплики + наш ответ тех же чатов, cap 12) рядом с батчем неотвеченных; мин-уровень больше не теряет нить после ReplySent; тест +6 PASS 2026-10-15 23:02:41 +00:00
Simbiot Harness
2432b6f012 t-261015090129: отложенный рестарт лестницы (ждёт конца LLM-воркера) — демон подхватит рефлекс agent-channel 2026-10-15 10:30:05 +00:00
Simbiot Harness
9fa188bccb t-261015090129: канал агент↔агент через MCP — poll_messages (портал: очередь agent_message + курсор per-agent) → инбокс триажа (chat_id=portal:agent:<имя>, kind=agent_message), ответ ask_agent из send_reply/send_batch_reply; рефлекс демона раз в минуту; тест 24 PASS + регрессии чисто 2026-10-15 10:11:11 +00:00
Simbiot Harness
acedc438f1 t-261015083454: отчёт аудита меты событий — карта полей по 30 типам, пробелы (ToolCalled/ToolResult 68k без trace_id/level/ts; TaskCompleted без level), внедрённое (f3ab66e) и план на 6 следующих шагов 2026-10-15 09:08:20 +00:00
Simbiot Harness
f3ab66e19e t-261015083454: мета-информация в событиях — trace_id+level+ts в каждом trace-событии (ToolCalled/ToolResult 68k были без связи с тиком), duration_ms/ok/exception в ToolResult, имя инструмента вместо '?', level+trace_id в TaskCompleted/TaskFailed; смоук + 5 тестов PASS 2026-10-15 09:07:32 +00:00
Simbiot Harness
f667ab6d2c t-261015000631: атомарный клейм задач (claim_task_if_ready) — гонка двойного claim hour/day закрыта на уровне стора 2026-10-15 01:15:44 +00:00
simbiot
91a7815938 аудит burn 9router 7д (t-261014152017): топ-потребители + рекомендации −10% burn 2026-10-14 18:05:02 +00:00
Simbiot Harness
acfdf3e5b9 e-261014163808-4da3ec: TTFT-watchdog+ретрай висящего апстрим-вызова в LLM-воркере — зависание до первого токена больше не роняет весь тик (2 павших hour-тика 13:08/16:11, batch TaskFailed); тест test_ttft_retry 7 PASS 2026-10-14 17:08:27 +00:00
Simbiot Harness
744edd537e iishnitsa: правки описаний спикеров (Simbiot/avatar.cil.by/vybirai.cil.by), варианты анонса v2-v4 + session-лендинг; аватары через Kie AI (t-261013153213, t-261013153320) 2026-10-13 16:18:20 +00:00
Simbiot Harness
a4b5b62c28 landing: публичный URL landing.cil.by (статика через Caddy), туннель localhost.run выпилен (e-261013154449) 2026-10-13 16:04:20 +00:00
Simbiot Harness
fa815cd55b footer: ссылки на проекты simbiot/avatar/vybirai.cil.by (по просьбе Alex) 2026-10-13 15:21:52 +00:00
simbiot-hour
d850d4828a t-261013131228: резолв цели реплая без текста — reply_to_desc из инбокса (chat_id, reply_to_message_id); build_context показывает содержимое документа вместо «reply на сообщение без текста»; тест 8 PASS (документ/текст/вне инбокса/контекст) 2026-10-13 13:15:44 +00:00
Simbiot Harness
5b1d30a0ff t-261013113629: маршрутизация ответов TG в чат-источник — chat_type/chat_title в MessageReceived, дефолтный чат уведомлений = личка Alex (chat_id>0 фолбэк для старых записей); тест 11 PASS (группа→группа, личка→личка, смешанный батч, дефолт) 2026-10-13 11:44:43 +00:00
Simbiot Harness
5a889e42a4 merge origin/master (hour digests, systemone-bench skill) + конфликт skills/README.md разрешён объединением строк 2026-10-12 09:11:25 +00:00
Simbiot Harness
ebaa677c69 t-261012090606: порог load-алертов по умолчанию 0.75*nproc (16 ядер → 12.0), policy cpu_alert_threshold переопределяет; фикс 230 ложных алертов/час 2026-10-12 09:09:52 +00:00
Simbiot Harness
e6f09ac08a hour 11:00 26-10-11: редизайн лендинга cil.by от Alex (m-516174040) задеплоен в прод, бэкап прежней версии 2026-10-11 11:18:29 +00:00
Simbiot Harness
dfa3b2d8a8 t-261010093054: MCP портала кооператива как стандартный тул харнеса — portal_mcp (booking_slots/booking_create, реестры, казна, лента), guardrail на деньги-тулы, 4 вызова/тик, трейс PortalMcpCalled, cli mcp-call, тест 18 PASS 2026-10-10 10:19:09 +00:00
Simbiot Harness
57a0f97318 t-261010092931: typing «печатает…» весь тик LLM — без привязки к pending-инбоксу; чаты из всего TG-инбокса, фолбэк на чат харнеса; тест: всё seen/пустой инбокс/только портал/чат неизвестен (25 PASS) 2026-10-10 10:05:14 +00:00
root
7f445392ee hour digest 18:26 UTC: session_productize дубль №6 — корень дублей починен (гонка core42.json 18% битых чтений → ложное НЕЗНАКОМО; фикс a1114a2, 0/300 после), backup.service восстановлен после 21ч простоя, эскалаций 0, очередь пуста 2026-10-09 21:26:44 +03:00
root
b14559a706 session_productize: 6-й тик — product_create всё ещё 500 (карточка id 13 жива), КОРЕНЬ дублей починен: гонка core42.json -> ложное НЕЗНАКОМО -> анти-спам пропускал дубли (фикс в systemone-bench a1114a2: атомарная запись + retry чтения; после фикса 'знакомо', 0/300 гонка-падений) 2026-10-09 21:18:17 +03:00
Simbiot Harness
58cc3785c6 t-261009160906: анти-гонка уровней min/hour на входящих TG — привязка артефакта к сообщению (-m), guard в deliver_artifact, reply_artifact в read model, тест гонки (8 PASS) + концепт ИИШНИЦЫ 2026-10-09 16:16:09 +00:00
root
aa781359f1 hour digest 2026-10-09 15:05: systemone-insight done (t-261009141729), очередь пуста 2026-10-09 18:04:51 +03:00
root
48c497329e hour digest 13:05 UTC: батч 2/2 — шаблон гипотез + рыночная симуляция (E[dAUM]: вход +24..94k vs −1.5k), эскалаций 0, очередь пуста 2026-10-09 16:12:55 +03:00
root
54beef9dd7 market simulation: logit конкуренция + сегменты + сценарии входа, MC 400 trials, E[dAUM] по сценариям + чувствительность (t-261009123019-a32bb3) 2026-10-09 16:12:04 +03:00
root
f8985ca596 product hypothesis template v1: конкуренты/цена/профиль клиента/сегменты+каналы (t-261009122125-45922c) 2026-10-09 16:03:14 +03:00
root
c82b412632 hour digest 12:05 UTC: session_productize дубль №5 закрыт по cooldown (500 жив, карточка id 13 new), витрина без изменений, эскалаций 0, очередь пуста 2026-10-09 15:05:34 +03:00
root
0c885470fb session_productize: 5-й тик — product_create всё ещё 500, карточка id 13 жива (t-261009110039) 2026-10-09 15:04:20 +03:00
root
d7f34967b9 session_productize: 4-й тик — product_create всё ещё 500, карточка id 13 жива (t-261009045856) 2026-10-09 08:03:38 +03:00
root
fcadbc9890 hour digest 23:05 UTC: session_productize дубль №3 закрыт по cooldown (500 жив, витрина замерена), эскалаций 0, очередь пуста 2026-10-09 02:06:22 +03:00
root
962b6a0dc8 session_productize: третий дубль-тик (t-261008225713) — product_create всё ещё 500 (проба 23:0x), голос карточки id 13 восстановлен (votes=1), витрина кооператива замерена для price_ladder_audit, ранбук актуализирован 2026-10-09 02:05:54 +03:00
Simbiot Harness
37fe77f923 ui.cil.by компакт-лендинг (m-516173960/62): черновик out/, деплой static/index-compact.html; прод / = компакт, прежний на /index-full.html; форма на живую /api/apply; фикс crash-loop simbiot-ui (порт 8905 держал сирота) 2026-10-08 18:07:36 +00:00
Simbiot Harness
d0fb26c8e7 Simbiot UI v0.2: план по решениям Alex (m-516173892) — брендинг, $99.9/mo seat included, ключи наши, студийный RAG, ручной онбординг (t-261008135024-7ea338) 2026-10-08 14:04:59 +00:00
root
d7fda35e6d landing(sites): аудит-фиксы конверсии (t-261008082527-ae7b47): CTA-петля → presale.cil.by (живой Stripe, paid=1), social proof из стора (580k+ подписанных событий, 280k+ sec-тиков, 1 платник), contact-hint кликабелен (портал), FAQ первый открыт, canonical/og:url → simbiot.cil.by; проверено: HTML-валидатор 0 ошибок, якоря целы, туннель отдаёт обновлённую версию 2026-10-08 12:12:58 +03:00
Simbiot Harness
336d47f978 es: rogue-key guard — чужой audit-ключ пишет legacy, стор не ломается (инциденты 06.10/08.10) 2026-10-08 08:52:56 +00:00
root
d31f831058 hour digest 07:35 UTC: батч 3/3 закрыт — burn 1000x фикс (17.4 vs 17048 у.е.), presale P0 снят проверкой (CTA живой, paid=1, $100/mo), repo-синк детектор в дневном тике (behind=0, baseline); тесты 20/20 2026-10-08 10:33:12 +03:00
root
2e31249992 feat(scheduler): fetch origin + детектор дрейфа репо в дневном тике (t-261007082307-2e2294) — _repo_sync_check: git fetch + behind/ahead замер RepoSynced (1/день, дедуп), эскалация при behind>0 два дня ПОДРЯД (счётчик из истории стора — рестарт демона не сбрасывает); fetch-fail фиксируется честно (behind=unknown), тик не валит; порог SIMBIOT_REPO_SYNC_MAX_AGE_DAYS (default 2); тест 17 проверок hermetic (git-песочница), весь сюит 20/20 зелёный; живой прогон: behind=0 ahead=13, baseline записан 2026-10-08 10:32:05 +03:00