From eae2771525c58c872157b301925f5a8b9cd17fb5 Mon Sep 17 00:00:00 2001 From: Andrey Epifancev Date: Tue, 13 Oct 2026 23:11:46 +0400 Subject: [PATCH] =?UTF-8?q?docs(openspec):=20=D0=BF=D0=BE=D1=80=D1=8F?= =?UTF-8?q?=D0=B4=D0=BE=D0=BA=20=D1=80=D0=B5=D1=88=D0=B5=D0=BD=D0=B8=D0=B9?= =?UTF-8?q?=20=D0=B2=20design.md=20(#9)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- openspec/changes/bridge-reliability/design.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openspec/changes/bridge-reliability/design.md b/openspec/changes/bridge-reliability/design.md index 798a287..d633bd8 100644 --- a/openspec/changes/bridge-reliability/design.md +++ b/openspec/changes/bridge-reliability/design.md @@ -73,13 +73,13 @@ Non-goals — см. proposal.md. 10. **Агент: `claimed` при восстановлении не пишется повторно.** `execute(cmd, journal_claimed=True)`; `recover` вызывает с `False` — запись `claimed`/`started` для этого id уже есть. 11. **Версия агента 3**, `min_agent_version` не поднимается. Тела запросов агента не меняются. +12. **Признак `online`.** Спека data-model меняется под код: `agent_status` отдаёт `online: false`, если `last_seen_at` + старше 5 минут (решение без обсуждения, см. ниже). 13. **Один процесс агента на журнал (финальное ревью, I-1).** `agent.py run` берёт исключительную блокировку `<журнал>.lock` (`fcntl.flock`, `LOCK_NB`); занята — сообщение «агент уже запущен…» и код 1. Без неё два процесса (например, при перезапуске через `nohup`/launchd без остановки старого) выполняли бы довыданную команду одновременно: идемпотентность «проверь, потом сделай» от одновременного выполнения не защищает (две `ensure_issue` могут не найти дубль друг друга). Агент v2 блокировки не имеет — при выкатке хаба убедиться, что процесс агента один. -12. **Признак `online`.** Спека data-model меняется под код: `agent_status` отдаёт `online: false`, если `last_seen_at` - старше 5 минут (решение без обсуждения, см. ниже). ## Risks / Trade-offs