Record the incident where a panel agent reverted seven files of other sessions, one recovered from a backup, and tighten panel isolation to per-agent sandboxes
This commit is contained in:
parent
0e189d2a4a
commit
a152e18770
2 changed files with 12 additions and 2 deletions
File diff suppressed because one or more lines are too long
|
|
@ -1,4 +1,4 @@
|
|||
# Журнал решений оркестратора — контракт D1–D39.112 (развязки 04.07 · пакеты 09–10.07 · приёмка/качество-первым/пивот/эмпирика 11–12.07 · арх-ресет+стройка пере-прогонного стека 13–19.07)
|
||||
# Журнал решений оркестратора — контракт D1–D39.113 (развязки 04.07 · пакеты 09–10.07 · приёмка/качество-первым/пивот/эмпирика 11–12.07 · арх-ресет+стройка пере-прогонного стека 13–19.07)
|
||||
|
||||
> **⟶ КАРТА АКТУАЛЬНОСТИ (ревизия D31, продлена до D38.2 [12.07]; исторические записи ниже НЕ переписываются — дисциплина D23.3).** Читая контракт целиком, держи под рукой, что чем перекрыто:
|
||||
> ⚠ **Навигация (актуализация 07.08, эра D39.1xx):** append-only-дисциплина (D23.3) означает, что
|
||||
|
|
@ -1597,3 +1597,13 @@ API-529-долг закрыт: 8-осевой refute-by-default воркфлоу
|
|||
**6. Не минтить номера чужим сессиям.** CURRENT-STATE ввёл «оркестратор №16» для параллельной приёмки полигона — при том что счётчик объявлен каноническим и ОДНИМ, живёт в промте оркестратора и показывает №15, а по D-логу №16 не существует. Номер снят: второй оркестратор назван ролью («параллельный, приёмка полигона»), номер выдаёт тот, кто пишет ему промт.
|
||||
|
||||
**7. Долг, оставленный сознательно:** срез хроники PROGRESS в архивный слайс (живой хвост несёт №11–№13, эра D39.91–105, всё закрытое) — НЕ сделан, потому что файл держит живая полигон-сессия, а срез это перекладывание сотни строк в контендящемся файле. Режет тот, кто лендит полигон. Туда же: архивация отработанного `PLATFORM_SESSION_PROMPT.md` (баннер-исход на нём стоит) — после приёмки фикс-пака, чтобы не ломать ссылку живой сессии.
|
||||
|
||||
## D39.113 — ИНЦИДЕНТ 08.08: агент панели откатил незакоммиченные правки двух параллельных сессий; один файл восстановлен, шесть потеряны; норма изоляции панелей ужесточена (08.08). ✅
|
||||
|
||||
**1. Что произошло.** В 00:13:39 агент воркфлоу-панели, которому я дал шелл, попытался работать в песочнице; его `cd` молча провалился (каталог песочницы исчез между вызовами), и следующая команда той же строки — `git reset -q; git checkout -q -- .` — отработала в РЕАЛЬНОМ рабочем дереве. Подтверждение: `git reflog` — два `reset: moving to HEAD` с этой меткой времени. Откатились незакоммиченные правки СЕМИ отслеживаемых файлов двух чужих сессий (полигон эксп-21 и параллельный оркестратор его приёмки). Коммиты обеих сессий целы; нетрекаемые файлы (`eval/role_topology/phase2b.py`) уцелели — `checkout -- .` их не трогает.
|
||||
|
||||
**2. Корень — МОЯ ошибка проектирования панели, не поведение агента.** Две причины, обе мои: (а) трём агентам панели я выдал ОДИН путь скрэтчпада, и они затирали друг другу подкаталоги — отсюда исчезнувшая песочница; (б) агентам с шеллом не был запрещён `git`, меняющий состояние дерева, при том что промт панели содержал запрет «ничего не редактируй в репозитории» — запрет прозой против команды, которая правит дерево не редактором, а git-ом. Прецедент этого класса в проекте уже был (урок 09.07: перезапись истории оркестратором стёрла незакоммиченные правки полигона) и не был превращён в механизм.
|
||||
|
||||
**3. Восстановлено одно из семи.** `docs/PROGRESS.md` — пинг полигона (26 строк секции «Полигон») восстановлен из моего собственного бэкапа, снятого в 00:08 при тестировании хука, за пять минут до инцидента; сверено, что дельта к HEAD = ровно эти 26 строк и ни одной моей. ⚠ Правки полигона в окне 00:08–00:13:39, если они были, в бэкап не попали. **Потеряно безвозвратно** (git-объектов нет — файлы не стейджились, `git fsck` и полный обход `--batch-all-objects` по маркерам дали пусто): незакоммиченные правки `docs/experiments/21-role-topology.md` · `docs/POLYGON_ROLE_TOPOLOGY_SESSION_PROMPT.md` · `docs/architecture/14-api-contract/README.md` (заполненное Приложение А от №14 — в HEAD осталась ЗАГОТОВКА с плейсхолдерами) · `eval/role_topology/absjudge.py` · `drift.py` · `verify_report.py`. Инвентарь и уцелевшие материалы — в скрэтчпаде сессии, записка `ИНЦИДЕНТ_08-08_потери.md`; текст Приложения А я держу в контексте и отдаю как РЕКОНСТРУКЦИЮ-черновик, а в дерево сознательно не писал: подменить потерянный файл правдоподобным хуже честной дыры.
|
||||
|
||||
**4. Норма (жёстче прежней, потому что прозой не сработала).** Агенту панели с шеллом: **свой каталог песочницы на КАЖДОГО агента** (общий путь = гонка и исчезающие каталоги) · **запрет на state-changing git явным перечислением** (`reset` · `checkout --` · `restore` · `clean` · `stash` · `add` · `commit`), а не общей фразой «не редактируй» · перед панелью, работающей в дереве с чужими незакоммиченными правками, **снимать бэкап этих правок** (`git diff > файл` вне репозитория) — сегодня спас именно случайный бэкап, а не процедура · формулировка «работай в копии» без выданного пути и без проверки, что копия существует, — приглашение к этому же инциденту. ⚠ Для читающего дальше: три доступных мне механизма изоляции (worktree на агента, запрет тулов, копия репозитория) не были применены ни один.
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue