From 255931845c42e5516a66d9b561cb8f2d1ac722a5 Mon Sep 17 00:00:00 2001 From: Andrey Epifancev Date: Thu, 15 Oct 2026 00:36:15 +0400 Subject: [PATCH] =?UTF-8?q?docs(openspec):=20R-9,=20R-10=20=E2=80=94=20?= =?UTF-8?q?=D1=80=D0=B0=D0=B7=D0=B4=D0=B5=D0=BB=D1=8C=D0=BD=D1=8B=D0=B5=20?= =?UTF-8?q?=D1=82=D0=B0=D0=B9=D0=BC=D0=B5=D1=80=D1=8B=20=D0=BF=D0=BE=D0=B4?= =?UTF-8?q?=D1=81=D0=BA=D0=B0=D0=B7=D0=BE=D0=BA;=20=D0=BF=D1=80=D0=B8?= =?UTF-8?q?=D0=B7=D0=BD=D0=B0=D0=BA=20=D0=BF=D0=BE=D0=B4=D1=82=D0=B2=D0=B5?= =?UTF-8?q?=D1=80=D0=B6=D0=B4=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D1=81=D0=B8=D0=B8=20(#23)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- openspec/changes/agent-v9-hardening/design.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/openspec/changes/agent-v9-hardening/design.md b/openspec/changes/agent-v9-hardening/design.md index 915ff9b..9e262c1 100644 --- a/openspec/changes/agent-v9-hardening/design.md +++ b/openspec/changes/agent-v9-hardening/design.md @@ -18,3 +18,5 @@ | R-6 | 2026-10-15 | В test_hub_4xx_in_refresh_not_retryable токен «неверный» заменён на «wrong-token» (ASCII) | Кириллица в заголовке Authorization даёт UnicodeEncodeError (latin-1) ещё до запроса, тест не проверял бы 401; проверка (текст «хаб: HTTP 401», retryable=False) не изменилась | Нет: только данные теста; поведение при не-ASCII токене в agent.json — наблюдение O-2 | | R-7 | 2026-10-15 | В run.py пустой/None sha256 в update.json (state=trial) считается устаревшим пробным периодом: условие `not sha or sha256_file(agent) != sha` в reconcile и in_trial (в плане — только `!= sha`) | Если agent.py не читается, sha256_file даёт None и совпал бы с отсутствующим sha — пробный период признан бы живым; пункты 1–2 Review Focus плана требуют обратного | Нет: усиление проверки; худший случай — лишний rolled_back при повреждённом update.json | | R-8 | 2026-10-15 | В README фраза про код 73 добавлена в конец абзаца «Остановка…» (якорь плана «и перезапускается.» в тексте — «перезапускается).») | Якорь плана не совпал с текстом README; смысл и текст предложения сохранены | Нет: размещение предложения в документации | +| R-9 | 2026-10-15 | Таймеры подсказок в `Updater` раздельные по виду (`hints[kind]`), а не один общий, как сказано в решении 10 | Review Focus 4 плана: подсказка «запускайте через run.py» не должна глушить подсказку о неполной публикации и наоборот | Нет: лишняя строка в логе раз в час | +| R-10 | 2026-10-15 | Финальное ревью I-1: «версия подтверждена», если при живом агенте в update.json увидено любое состояние кроме (`trial`, тот же sha); после выхода запасное правило — состояние не `trial` и sha `agent.py` = sha пробной версии. Подтверждённая версия не откатывается | Агент после `ok` сам пишет `rejected`/`staged` для следующей версии, запускатель опрашивает раз в секунду и мог не увидеть `ok`; спека откатывает только при действующем пробном периоде | Ложное «подтверждено» оставит больную версию без отката (худший случай — перезапуск по обычной паузе) |