simbiot-harness/harness
Simbiot Harness 1bc33d5678 fix(delivery): идемпотентная автодоставка артефактов в TG — три атомарных барьера против дублей (t-260930083937)
Инцидент: Alex получал презентацию трижды (m-516173239/241). Две причины:
1) гонка push (тик) vs pull (delivery-демон): оба проходили проверку
   delivery_status != 'sent', пока TG-отправка (до 35с) была в полёте;
2) ad-hoc curl sendDocument из мин-тиков вообще без метки delivered.

Фикс — delivery_ledger (INSERT OR IGNORE: факт доставки раз и навсегда)
+ delivery_locks (атомарный claim ДО отправки, TTL 120с; одно SQLite-
выражение = нет гонок между потоками и процессами). deliver_result /
deliver_artifact: ledger → claim → отправка → запись; сбой → release,
демон досыплет. Requeue сбрасывает ledger (доработка доставляется заново).

Новое: cli.py tg-deliver-file (идемпотентная отправка файлов, --force),
tg-notify -k <ключ>, tg_inbox.send_document (multipart на чистом urllib),
deliver_pending pre-filter по ledger, мандаты уровней: прямые
curl/api.telegram отправки запрещены. DeliverySkipped логирует пропуски.

Тесты: tests/test_delivery_idempotency.py — 49 проверок (гонка потоков,
межпроцессный claim, сбои+ретраи, requeue, CLI). Регрессия: 6/6 тестов ОК.
2026-09-30 13:41:34 +00:00
..
__init__.py Simbiot Harness v0.1: тактовая лестница на Strands + CQRS/ES-спина 2026-09-29 15:28:50 +00:00
_fw_asr_worker.py feat(voice): транскрипция голосовых TG в рантайме — полный путь file_id→download→ASR→MessageTranscribed (t-260929171234-cad7af) 2026-09-30 00:02:30 +00:00
_llm_worker.py feat(gate): гейт важности LLM-тика по per-level порогу + model в событиях 2026-09-30 08:29:54 +00:00
commands.py fix(delivery): идемпотентная автодоставка артефактов в TG — три атомарных барьера против дублей (t-260930083937) 2026-09-30 13:41:34 +00:00
dashboard.html feat(dashboard): детали задачи по клику — метаданные, промоушены, отчёт закрытия, JS-раскрытие строки (t-260929220004-033c0f) 2026-09-30 06:42:08 +00:00
dashboard.py feat(dashboard): детали задачи по клику — метаданные, промоушены, отчёт закрытия, JS-раскрытие строки (t-260929220004-033c0f) 2026-09-30 06:42:08 +00:00
es.py fix(delivery): идемпотентная автодоставка артефактов в TG — три атомарных барьера против дублей (t-260930083937) 2026-09-30 13:41:34 +00:00
events.db feat(tg-cmd): без-LLM команды бота /лестница /статус /задачи /помощь — мгновенные ответы сек-рефлексом + setMyCommands (t-260929210755-9bf6a6) 2026-09-30 02:30:27 +00:00
isolated_runner.py fix(spend): BudgetSpent пишется воркером инкрементально + живой usage из 9router (t-260929170544-adebea) 2026-09-29 20:20:15 +00:00
levels.py fix(delivery): идемпотентная автодоставка артефактов в TG — три атомарных барьера против дублей (t-260930083937) 2026-09-30 13:41:34 +00:00
proactive.py feat(proactive): инициативные реплики харнеса в чат — ритм/анти-спам/банк тем AUM (t-260930073419) 2026-09-30 11:15:49 +00:00
rag_lookup.py feat(rag)+fix(timeout): RAG-инструмент в тиках + хард-кап шагов воркера 2026-09-30 04:16:46 +00:00
runtime.py feat(gate): гейт важности LLM-тика по per-level порогу + model в событиях 2026-09-30 08:29:54 +00:00
scheduler.py fix(delivery): идемпотентная автодоставка артефактов в TG — три атомарных барьера против дублей (t-260930083937) 2026-09-30 13:41:34 +00:00
tg_commands.py feat(tg-cmd): без-LLM команды бота /лестница /статус /задачи /помощь — мгновенные ответы сек-рефлексом + setMyCommands (t-260929210755-9bf6a6) 2026-09-30 02:30:27 +00:00
tg_inbox.db feat(tg-cmd): без-LLM команды бота /лестница /статус /задачи /помощь — мгновенные ответы сек-рефлексом + setMyCommands (t-260929210755-9bf6a6) 2026-09-30 02:30:27 +00:00
tg_inbox.py fix(delivery): идемпотентная автодоставка артефактов в TG — три атомарных барьера против дублей (t-260930083937) 2026-09-30 13:41:34 +00:00
voice.py feat(voice): транскрипция голосовых TG в рантайме — полный путь file_id→download→ASR→MessageTranscribed (t-260929171234-cad7af) 2026-09-30 00:02:30 +00:00