chore: актуализация проекта — приёмка, задания и история релизов в документации #65
6 changed files with 564 additions and 0 deletions
151
agents/claude/done/2026-08-18-deps-update.md
Normal file
151
agents/claude/done/2026-08-18-deps-update.md
Normal file
|
|
@ -0,0 +1,151 @@
|
||||||
|
# Отчёт: обновление зависимостей GitHub Actions и NuGet
|
||||||
|
|
||||||
|
- **Задание:** `../inbox/2026-08-18-deps-update.md`
|
||||||
|
- **Агент:** `claude`
|
||||||
|
- **Дата:** 2026-08-18
|
||||||
|
- **Ветка / коммиты:** `claude/deps-update`. Правок workflow эта ветка не
|
||||||
|
несёт — см. «Как доставлено».
|
||||||
|
|
||||||
|
## Что сделано
|
||||||
|
|
||||||
|
Разобрано отставание зависимостей и проверены три открытых PR Dependabot по
|
||||||
|
GitHub Actions. Проверка была содержательной, а не сводилась к «CI зелёный».
|
||||||
|
|
||||||
|
- `actions/download-artifact` v4.1.8 → v8.0.1 (PR #46). Затрагивает одну
|
||||||
|
точку — `linux-release.yml:256`; это была последняя старая ссылка в дереве,
|
||||||
|
`linux-platform-matrix.yml` уже использовал v8.0.1 (SHA `3e5f45b2…`).
|
||||||
|
Обновление приводит репозиторий к одной версии.
|
||||||
|
- `docker/setup-qemu-action` → v4.2.0 (PR #44). Одна точка,
|
||||||
|
`linux-control-agent.yml:83`; прежняя ссылка была закреплена по SHA
|
||||||
|
`c7c53464…` с комментарием `# v3` без минорной версии.
|
||||||
|
- `sigstore/cosign-installer` v3.5.0 → v4.1.2 (PR #45). **Не принят**,
|
||||||
|
причина в разделе «Вопросы к приёмке».
|
||||||
|
|
||||||
|
Все три правки я предварительно применял локально и построчно сверял с
|
||||||
|
ветками Dependabot — совпадение полное. Затем правки из ветки сняты, чтобы
|
||||||
|
не применить одно и то же дважды: доставка идёт слиянием PR Dependabot.
|
||||||
|
|
||||||
|
NuGet не обновлялся — см. «Что не сделано».
|
||||||
|
|
||||||
|
## Как доставлено
|
||||||
|
|
||||||
|
Решением владельца от 2026-08-18: сливаются PR #44 и #46, правки из этой
|
||||||
|
ветки сняты. В ветке остаются только задания, отчёты и записка передачи
|
||||||
|
состояния. PR #45 остаётся открытым.
|
||||||
|
|
||||||
|
## Как проверено
|
||||||
|
|
||||||
|
Сверка применённых правок с ветками Dependabot (до снятия правок):
|
||||||
|
|
||||||
|
```
|
||||||
|
$ git diff -- .github/ | grep -E '^[+-][^+-]' | sort > mine.lines
|
||||||
|
$ for b in dependabot/github_actions/actions/download-artifact-8.0.1 \
|
||||||
|
dependabot/github_actions/sigstore/cosign-installer-4.1.2 \
|
||||||
|
dependabot/github_actions/docker/setup-qemu-action-4.2.0; do
|
||||||
|
git diff origin/main...origin/$b -- .github/
|
||||||
|
done | grep -E '^[+-][^+-]' | sort > pr.lines
|
||||||
|
$ diff pr.lines mine.lines
|
||||||
|
СОВПАДАЕТ построчно
|
||||||
|
```
|
||||||
|
|
||||||
|
Старых версий после применения в дереве не оставалось:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ grep -rn "download-artifact@fa0a91b8\|cosign-installer@v3\|setup-qemu-action@c7c53464" .github/workflows/
|
||||||
|
старых версий не осталось
|
||||||
|
```
|
||||||
|
|
||||||
|
YAML всех шести workflow разбирается:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ for f in .github/workflows/*.yml; do python -c "import sys,yaml;yaml.safe_load(open(sys.argv[1],encoding='utf-8'));print('OK',sys.argv[1])" "$f"; done
|
||||||
|
OK .github/workflows/linux-control-agent.yml
|
||||||
|
OK .github/workflows/linux-platform-matrix.yml
|
||||||
|
OK .github/workflows/linux-release.yml
|
||||||
|
OK .github/workflows/release-verification.yml
|
||||||
|
OK .github/workflows/windows-build.yml
|
||||||
|
OK .github/workflows/windows-release.yml
|
||||||
|
```
|
||||||
|
|
||||||
|
Текущее состояние ветки — правок workflow нет:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ git diff 23eb3f5 --stat -- .github/
|
||||||
|
(пусто)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Что не сделано
|
||||||
|
|
||||||
|
**NuGet не обновлён — нет .NET SDK на машине.**
|
||||||
|
|
||||||
|
```
|
||||||
|
$ dotnet --version
|
||||||
|
bash: dotnet: command not found
|
||||||
|
|
||||||
|
PS> Get-Command dotnet
|
||||||
|
dotnet not found on PATH
|
||||||
|
```
|
||||||
|
|
||||||
|
В `Directory.Build.props` включён `RestorePackagesWithLockFile=true`, в CI
|
||||||
|
сборка идёт с `-p:RestoreLockedMode=true`, и в дереве семь
|
||||||
|
`packages.lock.json`. Поднять версию в `Directory.Packages.props` без
|
||||||
|
пересборки lock-файлов — гарантированно уронить CI. Без SDK пересобрать их
|
||||||
|
нечем, поэтому файлы не тронуты.
|
||||||
|
|
||||||
|
Отставание по данным `api.nuget.org` на 2026-08-18 (запрошены версии,
|
||||||
|
`dotnet list package --outdated` не запускался):
|
||||||
|
|
||||||
|
| Пакет | В репозитории | Актуальная |
|
||||||
|
|-------|---------------|------------|
|
||||||
|
| Microsoft.AspNetCore.Authentication.Certificate | 10.0.10 | 10.0.11 |
|
||||||
|
| Microsoft.AspNetCore.Mvc.Testing | 10.0.10 | 10.0.11 |
|
||||||
|
| Microsoft.Data.Sqlite | 10.0.10 | 10.0.11 |
|
||||||
|
| Microsoft.Extensions.Configuration.* (4 пакета) | 10.0.10 | 10.0.11 |
|
||||||
|
| System.Security.Cryptography.ProtectedData | 10.0.0 | 10.0.11 |
|
||||||
|
| Microsoft.NET.ILLink.Tasks (`Directory.Build.props`) | 10.0.10 | 10.0.11 |
|
||||||
|
| Microsoft.Windows.SDK.BuildTools | 10.0.28000.2270 | 10.0.28000.2526 |
|
||||||
|
| Microsoft.Windows.SDK.BuildTools.WinApp | 0.4.0 | 0.6.0 |
|
||||||
|
| Microsoft.WindowsAppSDK | 2.2.0 | 2.4.0 |
|
||||||
|
| Microsoft.NET.Test.Sdk | 18.8.1 | 18.9.0 |
|
||||||
|
| xunit.v3 | 3.2.2 | 4.0.0 (мажорная) |
|
||||||
|
| xunit.runner.visualstudio | 3.1.5 | 4.0.0 (мажорная) |
|
||||||
|
| SQLitePCLRaw.bundle_e_sqlite3 | 3.0.5 | 3.0.5 — актуален |
|
||||||
|
|
||||||
|
Открытых PR Dependabot по NuGet нет, хотя в `.github/dependabot.yml`
|
||||||
|
экосистема `nuget` настроена с недельным интервалом. Причина не определена.
|
||||||
|
|
||||||
|
## Замечено рядом
|
||||||
|
|
||||||
|
Вне границ задачи; предлагаю отдельными заданиями.
|
||||||
|
|
||||||
|
1. **`sigstore/cosign-installer` закреплён тегом, а не SHA.** Все остальные
|
||||||
|
действия в репозитории закреплены по коммиту с комментарием версии;
|
||||||
|
cosign-installer — единственное исключение, и это единственное действие,
|
||||||
|
от которого зависит подпись релиза. Тег подвижен.
|
||||||
|
2. **`Microsoft.Windows.SDK.BuildTools.WinApp` 0.4.0** — версия ниже 1.0,
|
||||||
|
мажорных гарантий совместимости нет; переход на 0.6.0 делать отдельно.
|
||||||
|
3. **xunit 3 → 4 — мажорный переход** для двух пакетов, отдельной задачей
|
||||||
|
с прогоном тестов.
|
||||||
|
|
||||||
|
## Вопросы к приёмке
|
||||||
|
|
||||||
|
**PR #45 (`cosign-installer` 3.5.0 → 4.1.2) не принят к слиянию.**
|
||||||
|
|
||||||
|
Зелёные проверки на #45 и #46 про релиз ничего не доказывают:
|
||||||
|
`linux-release.yml` запускается только по `push` тега `v*` и по
|
||||||
|
`workflow_dispatch` (строки 3–12), на pull request он не выполняется вовсе.
|
||||||
|
Мажорная смена installer меняет версию cosign у producer, а
|
||||||
|
`deploy/ochenstarik-server-monitor-manager.sh:34` фиксирует у consumer
|
||||||
|
`COSIGN_VERSION="v3.1.3"` с проверкой SHA-256. Какую версию cosign ставит
|
||||||
|
installer 4.1.2 по умолчанию — не проверял, это не определено.
|
||||||
|
`docs/release-policy.md` показывает четыре поломки контракта
|
||||||
|
producer/consumer по cosign: alpha.12, alpha.13, alpha.17, alpha.18.
|
||||||
|
|
||||||
|
Предлагаю до слияния #45 прогнать `Release pipeline` через
|
||||||
|
`workflow_dispatch` на репетиционном теге — с оговоркой из
|
||||||
|
`agents/claude/notes/2026-08-18-передача-состояния.md`: репетиция идёт по
|
||||||
|
`refs/heads/main` и пропускает шаги под условием `refs/tags/*`, так был
|
||||||
|
сожжён alpha.19. Значит проверять нужно ещё и то, что нужные шаги вообще
|
||||||
|
исполнялись.
|
||||||
|
|
||||||
|
Второй вопрос: обновлять ли NuGet отдельным заданием на машине с .NET SDK.
|
||||||
104
agents/claude/done/2026-08-18-git-sync.md
Normal file
104
agents/claude/done/2026-08-18-git-sync.md
Normal file
|
|
@ -0,0 +1,104 @@
|
||||||
|
# Отчёт: синхронизация git-состояния репозитория
|
||||||
|
|
||||||
|
- **Задание:** `../inbox/2026-08-18-git-sync.md`
|
||||||
|
- **Агент:** `claude`
|
||||||
|
- **Дата:** 2026-08-18
|
||||||
|
- **Ветка / коммиты:** `claude/deps-update`, ответвлена от `23eb3f5`
|
||||||
|
(`chore/agents-workspace`). Изменений кода в рамках этой задачи нет.
|
||||||
|
|
||||||
|
## Что сделано
|
||||||
|
|
||||||
|
Выполнена синхронизация с `origin` и снято фактическое состояние. Файлы
|
||||||
|
репозитория этой задачей не менялись — сводить оказалось нечего.
|
||||||
|
|
||||||
|
Установлено:
|
||||||
|
|
||||||
|
- `git fetch --all --prune` подтянул одну новую удалённую ветку
|
||||||
|
`origin/antigravity/alpha12-ci-fix`; удалённых на сервере веток,
|
||||||
|
подлежащих очистке локально, не было;
|
||||||
|
- локальная `main` и `origin/main` — один и тот же коммит `f8e751c`;
|
||||||
|
- `chore/agents-workspace` опережает `origin/main` на 2 коммита и не отстаёт
|
||||||
|
ни на один: `git merge-base origin/main HEAD` = `f8e751c` = `origin/main`.
|
||||||
|
Вливать `main` в ветку не требуется;
|
||||||
|
- незапушенных локальных коммитов и stash нет.
|
||||||
|
|
||||||
|
Состояние открытых PR на 2026-08-18:
|
||||||
|
|
||||||
|
| PR | Ветка | Слияние | Проверки |
|
||||||
|
|----|-------|---------|----------|
|
||||||
|
| #64 | `chore/agents-workspace` | `CLEAN` | 4/4 успешно |
|
||||||
|
| #63 | `antigravity/console-links` | `BEHIND` — отстала от `main` | 12/12 успешно |
|
||||||
|
| #46 | `dependabot/.../download-artifact-8.0.1` | `CLEAN` | 4/4 успешно |
|
||||||
|
| #45 | `dependabot/.../cosign-installer-4.1.2` | `CLEAN` | 4/4 успешно |
|
||||||
|
| #44 | `dependabot/.../setup-qemu-action-4.2.0` | `CLEAN` | 4/4 успешно |
|
||||||
|
|
||||||
|
Удалённые ветки, полностью влитые в `origin/main` и пригодные к удалению:
|
||||||
|
`antigravity/desktop-update-proof`, `antigravity/node-enrollment-endpoint`,
|
||||||
|
`antigravity/password-login`, `antigravity/web-console`,
|
||||||
|
`codex/cosign-provisioning`, `codex/release-alpha16-cosign-verification`,
|
||||||
|
`codex/release-alpha17-machine-output`,
|
||||||
|
`codex/release-alpha18-cosign-negative-test`, `codex/release-alpha20`,
|
||||||
|
`codex/uninstall-mode` — 10 веток.
|
||||||
|
|
||||||
|
Не влита и при этом не имеет открытого PR: `antigravity/alpha12-ci-fix`.
|
||||||
|
Её назначение не определено.
|
||||||
|
|
||||||
|
## Как проверено
|
||||||
|
|
||||||
|
```
|
||||||
|
$ git fetch --all --prune
|
||||||
|
From https://github.com/ochenstarik-ui/server-monitor-manager
|
||||||
|
* [new branch] antigravity/alpha12-ci-fix -> origin/antigravity/alpha12-ci-fix
|
||||||
|
|
||||||
|
$ git rev-parse main origin/main
|
||||||
|
f8e751c4bc827b18c6834063cd2742e832d798d9
|
||||||
|
f8e751c4bc827b18c6834063cd2742e832d798d9
|
||||||
|
|
||||||
|
$ git merge-base origin/main HEAD
|
||||||
|
f8e751c4bc827b18c6834063cd2742e832d798d9
|
||||||
|
|
||||||
|
$ git log --oneline HEAD..origin/main
|
||||||
|
(пусто)
|
||||||
|
|
||||||
|
$ git log --oneline origin/main..HEAD
|
||||||
|
23eb3f5 chore(agents): разбор рабочих папок с диска на 2026-08-18
|
||||||
|
26c60a3 chore(agents): единая структура заданий и приёмки
|
||||||
|
|
||||||
|
$ git stash list
|
||||||
|
(пусто)
|
||||||
|
|
||||||
|
$ git log --branches --not --remotes --oneline
|
||||||
|
(пусто)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Что не сделано
|
||||||
|
|
||||||
|
- PR не слиты и ветки не запушены: по `AGENTS.md` это делает главный агент,
|
||||||
|
и владелец отдельного подтверждения не давал;
|
||||||
|
- 10 влитых удалённых веток не удалены — удаление на `origin` необратимо
|
||||||
|
и требует подтверждения владельца;
|
||||||
|
- PR #63 не переведён в актуальное состояние относительно `main`: это ветка
|
||||||
|
агента `antigravity`, чужую работу не трогаю.
|
||||||
|
|
||||||
|
## Замечено рядом
|
||||||
|
|
||||||
|
Вне границ задачи; предлагаю отдельными заданиями.
|
||||||
|
|
||||||
|
1. **CHANGELOG отстал на 14 релизов.** `CHANGELOG.md` заканчивается на
|
||||||
|
`v0.1.0-alpha.6` (2026-07-31), теги идут до `v0.1.0-alpha.20`
|
||||||
|
(2026-08-18). Секция `Unreleased` ссылается на давно слитые #10–#12.
|
||||||
|
2. **README называет неверную текущую версию.** `README.md:101` —
|
||||||
|
«`v0.1.0-alpha.14` is an early testing release».
|
||||||
|
3. **`docs/release-policy.md` доведён до alpha.19**, запись про alpha.20
|
||||||
|
отсутствует, хотя документ ведёт построчную историю каждой версии.
|
||||||
|
4. **`docs/roadmap.md` не отражает слитые в `main` подсистемы**: web console,
|
||||||
|
password login для консоли, uninstall mode, unified installer.
|
||||||
|
5. **Ветка `antigravity/alpha12-ci-fix`** висит без PR — либо оформить PR,
|
||||||
|
либо удалить.
|
||||||
|
|
||||||
|
## Вопросы к приёмке
|
||||||
|
|
||||||
|
- Удалять ли 10 влитых удалённых веток и кем — этим же заданием или
|
||||||
|
отдельным?
|
||||||
|
- Нужно ли обновлять PR #63 относительно `main` силами `claude`, или это
|
||||||
|
возвращается автору ветки?
|
||||||
116
agents/claude/done/2026-08-18-review-pr63-console-links.md
Normal file
116
agents/claude/done/2026-08-18-review-pr63-console-links.md
Normal file
|
|
@ -0,0 +1,116 @@
|
||||||
|
# Отчёт: разбор PR #63 «Link management и Event Journal в веб-консоли»
|
||||||
|
|
||||||
|
- **Задание:** роль главного агента, подтверждена владельцем в чате 2026-08-18
|
||||||
|
- **Агент:** `claude` (в роли главного агента)
|
||||||
|
- **Дата:** 2026-08-18
|
||||||
|
- **Разбираемая работа:** PR #63, ветка `antigravity/console-links`,
|
||||||
|
коммит `051d917`; задание —
|
||||||
|
`agents/antigravity/inbox/from-smm-deliverables/smm-antigravity-task-console-links-2026-08-18.md`;
|
||||||
|
отчёт исполнителя — описание PR #63.
|
||||||
|
|
||||||
|
## Что сделано
|
||||||
|
|
||||||
|
Разбор по репозиторию, а не по отчёту: диф снят от базы слияния
|
||||||
|
`7c43977`, а не от `main`.
|
||||||
|
|
||||||
|
## Как проверено
|
||||||
|
|
||||||
|
```
|
||||||
|
$ git merge-base origin/main origin/antigravity/console-links
|
||||||
|
7c43977fd137c2236f7fc100f5d972f4e5f2bcac
|
||||||
|
|
||||||
|
$ git diff --stat 7c43977 origin/antigravity/console-links
|
||||||
|
src/ServerMonitorManager.Control/wwwroot/app.js | 722 +++++++++++++++++----
|
||||||
|
src/ServerMonitorManager.Control/wwwroot/index.html| 179 ++++-
|
||||||
|
src/ServerMonitorManager.Control/wwwroot/style.css | 156 ++++-
|
||||||
|
tests/.../WebConsoleTests.cs | 45 +-
|
||||||
|
4 files changed, 976 insertions(+), 126 deletions(-)
|
||||||
|
```
|
||||||
|
|
||||||
|
Границы задания соблюдены: `deploy/**`, релизные workflow и bootstrap-тесты
|
||||||
|
не затронуты, новых эндпоинтов нет. Заявленный в описании PR состав файлов
|
||||||
|
совпадает с фактическим.
|
||||||
|
|
||||||
|
**Проверено и подтверждается:**
|
||||||
|
|
||||||
|
- **XSS не найден.** `escapeHtml` (app.js:1045) экранирует пять сущностей
|
||||||
|
(`& < > " '`) и применён при каждой интерполяции в `innerHTML`, включая
|
||||||
|
payload событий (app.js:479), `lastError` (338) и `data-*`-атрибуты
|
||||||
|
(347–351). Непроэкранированных вставок пользовательских данных не найдено.
|
||||||
|
- **Разбор NDJSON корректен.** app.js:412–413 — `split('\n')` с
|
||||||
|
возвратом хвоста в буфер через `pop()`; разрыв события на границе чанка
|
||||||
|
не теряется и не портит разбор.
|
||||||
|
- **Переподключение не размножается.** `startEventStream` вызывается ровно
|
||||||
|
из двух мест (app.js:89 при инициализации и 431 по таймеру), в начале
|
||||||
|
функции прежний `AbortController` прерывается. Накопления параллельных
|
||||||
|
таймеров нет.
|
||||||
|
- **Журнал ограничен**: `MAX_EVENTS_IN_JOURNAL = 100`, `unshift` + `pop`
|
||||||
|
(app.js:437–439). Неограниченного роста в долгоживущей вкладке нет.
|
||||||
|
|
||||||
|
## Замечания
|
||||||
|
|
||||||
|
**1. Тесты не проверяют поведение — только строки в статическом HTML.**
|
||||||
|
|
||||||
|
Оба теста (`WebConsoleHtmlContainsRequiredUiElementsAndWarning` и новый
|
||||||
|
`WebConsoleProvidesLinkManagementAndEventsJournal`) состоят из
|
||||||
|
`Assert.Contains("id=\"…\"", html)` по разметке. Они доказывают, что в
|
||||||
|
`index.html` есть элементы с нужными идентификаторами, и ничего больше.
|
||||||
|
|
||||||
|
При этом 976 изменённых строк — почти целиком поведение на JavaScript:
|
||||||
|
создание Link, отключение, идемпотентность, разбор потока событий,
|
||||||
|
расчёт срока действия, разбор Problem Details. Ни одна из этих веток
|
||||||
|
тестом не покрыта.
|
||||||
|
|
||||||
|
В описании PR «158 пройденных тестов» приведено как доказательство работы
|
||||||
|
управления Links. Это не доказательство: пройдёт и разметка с правильными
|
||||||
|
`id` при полностью нерабочем `app.js`. Соглашение 6 из
|
||||||
|
`agents/claude/notes/2026-08-18-передача-состояния.md` — «зелёный CI не
|
||||||
|
означает работающую машину» — здесь применимо буквально.
|
||||||
|
|
||||||
|
**2. Обновление дашборда не троттлится (app.js:444–448).**
|
||||||
|
|
||||||
|
```js
|
||||||
|
const eventType = (ev.type || '').toLowerCase();
|
||||||
|
if (eventType.startsWith('link.') || eventType.startsWith('agent.')) {
|
||||||
|
loadDashboardData(false);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Каждое событие `link.*` или `agent.*` вызывает `loadDashboardData`, а тот
|
||||||
|
делает два запроса — `/api/v1/control/agents` и `/api/v1/control/links`
|
||||||
|
(app.js:230–233). Ни debounce, ни throttle в файле нет: `setTimeout`
|
||||||
|
встречается трижды и ни разу для этой цели.
|
||||||
|
|
||||||
|
Согласование политик Links в Control работает непрерывно (`CHANGELOG.md`,
|
||||||
|
Unreleased, #11). Пачка событий согласования по флоту превращается в
|
||||||
|
двукратно умноженный поток запросов от каждой открытой вкладки консоли.
|
||||||
|
На одном узле незаметно, на флоте — усилитель нагрузки на Control.
|
||||||
|
|
||||||
|
**3. Мелкое: запасной `generateUuid` на `Math.random()` (app.js:167).**
|
||||||
|
|
||||||
|
Для ключа идемпотентности приемлемо — это не секрет. Отмечаю только чтобы
|
||||||
|
запасная ветка не была скопирована туда, где нужна криптостойкость.
|
||||||
|
|
||||||
|
## Что не сделано
|
||||||
|
|
||||||
|
- `dotnet build` и `dotnet test` не запускались: на машине нет .NET SDK
|
||||||
|
(`dotnet: command not found` и в Git Bash, и в PowerShell). Заявленные
|
||||||
|
в описании PR 158 пройденных тестов и зелёные прогоны CI я принимаю по
|
||||||
|
ссылкам на прогоны, а не по собственному запуску;
|
||||||
|
- консоль в браузере не открывалась, поведение вручную не проверялось;
|
||||||
|
- PR не слит: ветка отстала от `main` (`mergeStateStatus = BEHIND`),
|
||||||
|
и решение о слиянии за владельцем.
|
||||||
|
|
||||||
|
## Решение
|
||||||
|
|
||||||
|
Работа соответствует заданию по составу и границам, дефектов безопасности
|
||||||
|
в ней не найдено. К слиянию пригодна после обновления относительно `main`.
|
||||||
|
|
||||||
|
Замечание 1 не блокирует слияние, но должно стать отдельным заданием: без
|
||||||
|
поведенческих тестов следующая правка `app.js` не будет ничем удержана.
|
||||||
|
Замечание 2 — отдельным заданием на исправление.
|
||||||
|
|
||||||
|
## Вопросы к приёмке
|
||||||
|
|
||||||
|
- Обновлять ветку относительно `main` силами `claude` или возвращать автору?
|
||||||
|
- Выпускать ли задания по замечаниям 1 и 2 сразу, или после слияния #63.
|
||||||
45
agents/claude/inbox/2026-08-18-deps-update.md
Normal file
45
agents/claude/inbox/2026-08-18-deps-update.md
Normal file
|
|
@ -0,0 +1,45 @@
|
||||||
|
# Обновление зависимостей: GitHub Actions и NuGet
|
||||||
|
|
||||||
|
- **Кому:** `claude`
|
||||||
|
- **Дата:** 2026-08-18
|
||||||
|
- **От кого:** владелец проекта (задание получено в чате: «актуализируй проект»,
|
||||||
|
уточнено выбором «Обновить зависимости»)
|
||||||
|
- **Ветка:** `claude/deps-update`
|
||||||
|
- **Файл отчёта:** `../done/2026-08-18-deps-update.md`
|
||||||
|
|
||||||
|
## Что нужно сделать
|
||||||
|
|
||||||
|
Закрыть отставание зависимостей:
|
||||||
|
|
||||||
|
1. GitHub Actions — три открытых PR от Dependabot (#44 `docker/setup-qemu-action`
|
||||||
|
3.7.0 → 4.2.0, #45 `sigstore/cosign-installer` 3.5.0 → 4.1.2,
|
||||||
|
#46 `actions/download-artifact` 4.1.8 → 8.0.1).
|
||||||
|
2. NuGet — версии в `Directory.Packages.props` и `Directory.Build.props`
|
||||||
|
против актуальных на nuget.org.
|
||||||
|
|
||||||
|
## Границы
|
||||||
|
|
||||||
|
Не мержить PR Dependabot и не пушить ветку без подтверждения владельца.
|
||||||
|
Не менять способ закрепления действий (tag → SHA) — это отдельная задача,
|
||||||
|
даже если несоответствие очевидно. Не править код проекта, документацию
|
||||||
|
и CHANGELOG.
|
||||||
|
|
||||||
|
## Как проверить результат
|
||||||
|
|
||||||
|
- Обновлённые SHA в `.github/workflows/` совпадают с SHA из соответствующих
|
||||||
|
веток Dependabot: `git diff origin/main...origin/dependabot/...`;
|
||||||
|
- `grep -rn "uses:" .github/workflows/` — в дереве не осталось старых версий;
|
||||||
|
- для NuGet: `dotnet list package --outdated` и восстановление
|
||||||
|
`packages.lock.json` (`RestorePackagesWithLockFile=true`,
|
||||||
|
в CI `-p:RestoreLockedMode=true`).
|
||||||
|
|
||||||
|
## Контекст и ограничения
|
||||||
|
|
||||||
|
Релизная подпись зависит от cosign: `deploy/ochenstarik-server-monitor-manager.sh`
|
||||||
|
закрепляет потребительский `COSIGN_VERSION="v3.1.3"` с проверкой SHA-256,
|
||||||
|
а CI ставит cosign через `sigstore/cosign-installer` без закрепления версии
|
||||||
|
cosign. `docs/release-policy.md` (alpha.17, alpha.18) описывает, что контракт
|
||||||
|
producer/consumer по cosign уже ломался. Смена версии installer — решение
|
||||||
|
владельца, не самостоятельное.
|
||||||
|
|
||||||
|
Наличие .NET SDK на рабочей машине на момент постановки задачи не определено.
|
||||||
34
agents/claude/inbox/2026-08-18-git-sync.md
Normal file
34
agents/claude/inbox/2026-08-18-git-sync.md
Normal file
|
|
@ -0,0 +1,34 @@
|
||||||
|
# Синхронизация git-состояния репозитория
|
||||||
|
|
||||||
|
- **Кому:** `claude`
|
||||||
|
- **Дата:** 2026-08-18
|
||||||
|
- **От кого:** владелец проекта (задание получено в чате: «актуализируй проект»,
|
||||||
|
уточнено выбором «Синхронизировать git»)
|
||||||
|
- **Ветка:** `claude/deps-update`
|
||||||
|
- **Файл отчёта:** `../done/2026-08-18-git-sync.md`
|
||||||
|
|
||||||
|
## Что нужно сделать
|
||||||
|
|
||||||
|
Установить фактическое расхождение локального репозитория и `origin`, свести
|
||||||
|
локальные ветки со свежим `main` и предъявить состояние открытых PR и
|
||||||
|
удалённых веток: что влито, что отстало, что можно удалять.
|
||||||
|
|
||||||
|
## Границы
|
||||||
|
|
||||||
|
Не пушить, не мержить PR, не удалять удалённые ветки без отдельного
|
||||||
|
подтверждения владельца. Не трогать ветки других агентов
|
||||||
|
(`antigravity/*`, `codex/*`, `hermes/*`). Не править документацию —
|
||||||
|
рассинхрон CHANGELOG/README/roadmap с фактическим состоянием релизов
|
||||||
|
вынесен из этой задачи и идёт в отчёт списком.
|
||||||
|
|
||||||
|
## Как проверить результат
|
||||||
|
|
||||||
|
- `git fetch --all --prune` — выполнен;
|
||||||
|
- `git rev-parse main origin/main` — совпадают;
|
||||||
|
- `git log --oneline HEAD..origin/main` — пусто (нечего вливать);
|
||||||
|
- `git branch -r --merged origin/main` — список влитых веток приведён в отчёте.
|
||||||
|
|
||||||
|
## Контекст и ограничения
|
||||||
|
|
||||||
|
`AGENTS.md`: в `main` пушит и принимает работу только главный агент.
|
||||||
|
Ветка ведётся с префиксом `claude/` согласно таблице в `agents/README.md`.
|
||||||
114
agents/claude/notes/2026-08-18-передача-состояния.md
Normal file
114
agents/claude/notes/2026-08-18-передача-состояния.md
Normal file
|
|
@ -0,0 +1,114 @@
|
||||||
|
# Передача состояния: как продолжить работу в новом чате
|
||||||
|
|
||||||
|
Этот файл заменяет переписку. Он написан для того, чтобы новый чат начинался
|
||||||
|
с одного сообщения и не требовал пересказа истории.
|
||||||
|
|
||||||
|
## Первое сообщение в новом чате
|
||||||
|
|
||||||
|
> Репозиторий `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 безопасна — проверено на живой машине;
|
||||||
|
- опубликованный тег неизменяем, ассеты не заменяются: исправление выпускается
|
||||||
|
следующим номером.
|
||||||
Loading…
Reference in a new issue