Files
obsidian-vault/personal/plans/mattermost-mention-thread-autoresponse.md.bak-mention-result
T

99 lines
4.7 KiB
Plaintext
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
tags:
- hermes
- mattermost
- mention
- adapter
- whale
type: plan
namespace: personal
status: plan approved — in progress
created: '2026-09-29'
updated: '2026-09-29'
---
# План: MM mention-gating — авто-ответ в треде с ботом
**Дата:** 2026-09-29
**Статус:** план утверждён Alex, выполняется
## Задача (Alex, дословно)
> «в канале — меншен обязателен, в треде где только с ботом переписка — авто, без меншена»
## Проблема (подтверждена фактами)
`plugins/platforms/mattermost/adapter.py:734` — гейт применяется к **любому** не-DM:
```python
if channel_type_raw != "D": # тред = channel_type "O" → гейт срабатывает
...
if require_mention and not is_free_channel and not has_mention:
return # молча дроп, inbound не создаётся
```
**Доказательство (2026-09-29, канал `hermes-maintenance` = `a6nyh77eyjbn5c1owh1i8eebee`):**
| Время | Пост | Меншн | inbound в gateway.log |
|---|---|---|---|
| 12:38:01 | `@whale` | ✅ | ✅ есть |
| 12:38:40 | `тут, отлично. как нам сделать бэкап...` | ❌ | ❌ **нет** (ответа не было) |
Пост 12:38:40 — в треде `pcoiddzrqty3ipqtozgcs9ttte`, начатом ботом. Меншн не нужен, но требуется.
## Решение
Пропускать mention-гейт, когда пост находится **в треде** (`root_id` задан).
В корне канала меншн остаётся обязательным.
### Критерий (выбран)
**Тред = `root_id` непустой.** Просто, детерминированно, не требует API-запросов.
Обоснование: чтобы ответить в треде, бот должен быть в канале. Треды канала — общие
рабочие ветки; вовлечение в тред человеком = приглашение. Дополнительный критерий
«бот уже отвечал в этом треде» требует запроса к API на каждое сообщение (латентность +
зависимость от прав) и не даёт выигрыша: в канале бот и так отвечает на `@whale`.
### Правка
В `_handle_ws_event` перед mention-гейтом вычислить `root_id` и добавить его в условие:
```python
is_thread_reply = bool(post.get("root_id"))
...
if require_mention and not is_free_channel and not has_mention and not is_thread_reply:
return
```
Плюс: стрип меншна выполнять как раньше (если меншн есть — убрать из текста).
### Что НЕ меняется
- Корень канала без `@whale` → по-прежнему молчит.
- `MATTERMOST_FREE_RESPONSE_CHANNELS` — не трогаем.
- DM — не затронуты.
- `MATTERMOST_REQUIRE_MENTION=true` — остаётся.
## Шаги
1. Коммит ДО (`hermes-agent`, ветка `main`, HEAD `207a1de16c`).
2. Правка adapter.py — скрипт `python3 /tmp/<name>.py`, не sed.
3. Тест: `pytest plugins/platforms/mattermost/ tests/ -k mattermost -o "addopts="` (если есть).
4. Коммит ПОСЛЕ.
5. Рестарт gateway — **делает Alex** (`gateway run --replace` из этой сессии её убьёт).
6. Приёмка Alex в UI: пост в треде без меншна → ответ есть; пост в корне канала без меншна → ответа нет.
## Питфоллы
- 🔴 `gateway run --replace` из этой сессии убивает саму сессию (инцидент 2026-09-29 11:31).
- 🔴 Логи читать из `~/.hermes/hermes-whale/logs/`, не из `~/.hermes/logs/`.
- Адаптер читает `config.extra.*` ИЛИ env — при правке поведение env перебивает config
(см. `_apply_yaml_config`, строки 1108-1114).
- Логи уровня DEBUG не пишутся — `skipping non-DM message without @mention` в `gateway.log`
не виден (`grep -c` вернул 0 при 1.6 МБ лога). Судить по наличию/отсутствию `inbound message`.
## Связанные заметки
- [[personal/tech/hermes-whale-mattermost-transport.md]] — транспорт, env-ключи, инцидент с рестартом
- [[personal/tech/hermes-pairing-multi-profile.md]] — pairing