# Передача состояния: как продолжить работу в новом чате

Этот файл заменяет переписку. Он написан для того, чтобы новый чат начинался
с одного сообщения и не требовал пересказа истории.

## Первое сообщение в новом чате

> Репозиторий `C:\Users\Ochenstarik\Agent_projects\server-monitor-manager`,
> GitHub `ochenstarik-ui/server-monitor-manager`.
> Прочитай `agents/README.md` и `agents/claude/notes/2026-08-18-передача-состояния.md`,
> сверь состояние с GitHub и продолжай как главный агент: проверяешь работу
> Codex и Antigravity, пишешь им задания, мержишь и выпускаешь релизы.

Больше ничего пересказывать не нужно: доска, задания, отчёты и архив лежат
в репозитории.

## Где что лежит

| Что | Где |
|---|---|
| Правила работы агентов | `agents/README.md` |
| Задания агенту | `agents/<agent>/inbox/` |
| Отчёты агента | `agents/<agent>/done/` |
| Принятые пары «задание — отчёт» | `agents/_accepted/ГГГГ-ММ-ДД-имя/` |
| Доска состояния (прежний формат) | `agents/_salvage-2026-08-18/smm-deliverables/README.md` |
| Архив закрытых заданий | `agents/_salvage-2026-08-18/smm-deliverables/Старые задачи/` |
| Инструкция владельцу по серверам | `agents/_salvage-2026-08-18/smm-deliverables/smm-cleanup-and-install-2026-08-15.md` |

Доску стоит перенести из `_salvage` в постоянное место — она живая, а не архив.

## Состояние на 2026-08-18

- `main` — `f8e751c`, слит PR #62 `codex/release-alpha20`;
- последний релиз — `v0.1.0-alpha.20`;
- открыты: PR #63 `antigravity/console-links` (управление Links в консоли),
  PR #64 `chore/agents-workspace` (эта самая схема папок), плюс dependabot;
- ветка `claude/deps-update` содержит незакоммиченные правки двух workflow
  и два новых задания в `agents/claude/inbox/`.

### Сожжённые номера версий

`alpha.10`, `alpha.11`, `alpha.19` — теги созданы, `Release pipeline` упал,
релизы не опубликованы, номера не переиспользуются.

`alpha.19` сожжён при мне и по процедурной дыре, а не по вине исполнителя:
шаг `Package bootstrap` сверяет `DEFAULT_RELEASE_TAG` в `deploy/smm-setup.sh`
с выпускаемым тегом, но весь блок закрыт условием `refs/tags/*`, поэтому
репетиция через `workflow_dispatch` идёт по `refs/heads/main` и эту сверку
пропускает. Репетиция была зелёной, тег упал.

**Вывод, который дороже самого случая:** репетиция, не покрывающая шаги,
исполняемые только на теге, не является репетицией. Проверять это до
следующего выпуска.

## Рабочие соглашения

Выведены из происшествий, а не из общих соображений.

1. **Задание содержит только предстоящую работу.** Файлы, начинавшиеся
   с описания уже сделанного, исполнитель принимал за отчёт о выполнении:
   Codex ответил «задание уже выполнено, PR #58» вместо работы над
   невыполненной частью. Сделанное живёт на доске, а не в задании.
2. **Отчёт — раздел в описании PR.** Отдельный файл с отчётом результатом
   не является. Antigravity однажды сдал только такой файл, не создав ни ветки,
   ни PR.
3. **Проверять по репозиторию, а не по отчёту.** Смотреть диф от базы слияния,
   а не от `main`: отставшая ветка в обычном дифе выглядит так, будто удаляет
   чужую работу.
4. **Критерий приёмки должен быть достижим.** «Проверка запустилась
   автоматически» была недостижима: событие от `GITHUB_TOKEN` не запускает
   другие workflow. Это дефект задания, а не исполнителя.
5. **Границы областей прописывать явно.** Codex — `deploy/**`, релизный
   пайплайн, проверка релиза. Antigravity — `src/**`, консоль, тесты Control
   и Desktop. Пересечение областей ломает параллельную работу.
6. **Зелёный CI не означает работающую машину.** Так найдены: отсутствующий
   cosign, права на каталог mesh, отдача ассетов из ресурсов сборки. Каждый раз
   тест подставлял временный путь и проходил, а на сервере отказывало.
7. **Команды владельцу помечать, где выполнять**: 🖥 на Windows, 🐧 на сервере.
   Путаница машин стоила нескольких заходов.
8. **Долгие загрузки — с индикатором.** Молчащий `curl -fsSL` на 24 МБ дважды
   принят за зависание и прерван.

## Живая установка

Проверено на настоящих машинах, а не в CI.

- **Hub** `178.212.13.102` (`host1885995-3.hostland.pro`), Ubuntu 24.04 x86_64,
  поставлен из `v0.1.0-alpha.14`;
- отпечаток CA:
  `EB:05:E5:16:42:EE:97:28:C2:E9:EA:6F:3E:48:3C:0C:1C:1E:02:E0:ED:9B:AF:7B:BF:24:2C:19:D4:4B:11:C4`;
- публичный ключ WireGuard Hub: `AjN8XwPB11bRQa0fO5ljPlAWc0FxU+fxbeUT8AZczHk=`;
- **Node `ai-agent`** — `vm1957808.vds.chsl.one`, адрес `10.77.0.2`, mesh собран,
  ping 7.6 мс. На этой машине работает 3x-ui и он не пострадал;
- свободных серверов больше нет. `tests/acceptance/three-server-mesh.sh` требует
  Hub и три узла: источник и две цели, потому что смысл проверки в том, что
  к одной цели доступ по Link открыт, а ко второй закрыт. На двух машинах
  это не проверить;
- WSL под узлы не годится: все дистрибутивы WSL2 делят один сетевой стек,
  два `smm0` с разными адресами не поднять. Проверено экспериментом.

**Физическая приёмка — единственный пункт Горизонта 0, не закрываемый кодом.**

## Что важно знать про продукт

- подпись релиза проверяется настоящим материалом с обеих сторон: установкой
  на чистый runner (Linux) и `UpdateService` (Windows), автоматически на каждом
  релизе;
- проверка подписи требует исходящего доступа к службам sigstore; в закрытом
  контуре установка зависнет;
- таблица nftables `inet ochenstarik_smm` цепляется только к хуку `forward`
  и только к трафику `smm0 → smm0`. Хука `input` в ней нет, политика `accept`.
  Поэтому установка на сервер с 3x-ui безопасна — проверено на живой машине;
- опубликованный тег неизменяем, ассеты не заменяются: исправление выпускается
  следующим номером.
