eva-agent v2: версии страниц в wiki_sync (#7) #8

Merged
aep merged 8 commits from feat/7-wiki-history into main 2026-10-28 13:01:52 +03:00
Owner

Closes #7. Контракт — aep/sdlc-hub#140 (openspec/changes/wiki-history/specs/wiki/spec.md, «История правок страниц»); выкатываются парой.

Что сделано

  • wiki_sync после страниц шлёт хабу опубликованные версии страниц дерева (CmfDocumentHistory, фильтр parent_id), которых нет в known_versions; текст читается только у новых; автор {login, name} (поле — строка или null); пачки ≤50 версий / ≤4 МБ (POST /agent/wiki/versions); отчёт done с versions.
  • Без known_versions в параметрах (хаб без истории) шаг пропускается — v2 работает и с прежним хабом.
  • EvaClient.list_all (общий постраничный список с защитой от несоблюдения slice), list_versions, get_version; HubClient.wiki_versions; общие _Batcher/_send_batch.
  • AGENT_VERSION = 2; фейки Eva/хаба, e2e с блоком истории (по history_at хаба), документы.

Спека агента: openspec/changes/wiki-versions/ (design — решения 1–9, P-1…P-6, решения финального ревью).

Проверки

  • /usr/bin/python3 -W error::ResourceWarning -m unittest discover -s tests -t . — 265 OK.
  • bash scripts/e2e-hub.sh (хаб main) — e2e: ok, блок истории пропущен; HUB_SRC=<ветка hub#140> bash scripts/e2e-hub.sh — блок истории выполнен (первая загрузка, догрузка DOCH-14), e2e: ok.
  • Финальное ревью ветки (opus) — «With fixes», исправлено (060a2c6).

Rulings I made

  • R-1 test_folder.py::test_version закреплял AGENT_VERSION = 1 — переведён на 2. Цена ошибки: нет.
  • I-1 версии без автора — строка в лог «N из M версий без автора…»: автор известной версии не перечитывается, потеря необратима. Цена ошибки: нет.
  • M-1 → Important код версии уходит один раз за прогон (повтор при сдвиге slice давал failed у хаба). Цена ошибки: нет.
  • M-3 → Important нет ключа text у версии — failed, а не пустая версия навсегда. Цена ошибки: при закрытом ACL text синхронизация стоит до выдачи прав.
  • P-1…P-6 (автор по полям, страница без id, битый known_versions → failed, пропавшая версия → failed, порядок, e2e по признаку хаба) — в design.md.

Отложено (follow-up)

M-2 (время версии без смещения → 422 хаба и failed на каждом прогоне), M-4 (фейк хаба: предел через MAX_PAGES, Z на 3.9), M-5 (тест 503 не утверждает отправку упавшей пачки).

Выкатка

Из основного checkout после merge: uv run --project ../sdlc-hub sdlc-hub agent publish --module wiki src/agent.py — после выкатки хаба hub#140. Перед подъёмом wiki_min_agent_version до 2 — посмотреть в логе первой синхронизации v2 строку «версий без автора».

🤖 Generated with Claude Code

Closes #7. Контракт — aep/sdlc-hub#140 (`openspec/changes/wiki-history/specs/wiki/spec.md`, «История правок страниц»); выкатываются парой. ## Что сделано - `wiki_sync` после страниц шлёт хабу опубликованные версии страниц дерева (`CmfDocumentHistory`, фильтр `parent_id`), которых нет в `known_versions`; текст читается только у новых; автор `{login, name}` (поле — строка или `null`); пачки ≤50 версий / ≤4 МБ (`POST /agent/wiki/versions`); отчёт `done` с `versions`. - Без `known_versions` в параметрах (хаб без истории) шаг пропускается — v2 работает и с прежним хабом. - `EvaClient.list_all` (общий постраничный список с защитой от несоблюдения `slice`), `list_versions`, `get_version`; `HubClient.wiki_versions`; общие `_Batcher`/`_send_batch`. - `AGENT_VERSION = 2`; фейки Eva/хаба, e2e с блоком истории (по `history_at` хаба), документы. Спека агента: `openspec/changes/wiki-versions/` (design — решения 1–9, P-1…P-6, решения финального ревью). ## Проверки - `/usr/bin/python3 -W error::ResourceWarning -m unittest discover -s tests -t .` — 265 OK. - `bash scripts/e2e-hub.sh` (хаб main) — `e2e: ok`, блок истории пропущен; `HUB_SRC=<ветка hub#140> bash scripts/e2e-hub.sh` — блок истории выполнен (первая загрузка, догрузка DOCH-14), `e2e: ok`. - Финальное ревью ветки (opus) — «With fixes», исправлено (060a2c6). ## Rulings I made - **R-1** `test_folder.py::test_version` закреплял `AGENT_VERSION = 1` — переведён на 2. Цена ошибки: нет. - **I-1** версии без автора — строка в лог «N из M версий без автора…»: автор известной версии не перечитывается, потеря необратима. Цена ошибки: нет. - **M-1 → Important** код версии уходит один раз за прогон (повтор при сдвиге `slice` давал `failed` у хаба). Цена ошибки: нет. - **M-3 → Important** нет ключа `text` у версии — `failed`, а не пустая версия навсегда. Цена ошибки: при закрытом ACL `text` синхронизация стоит до выдачи прав. - P-1…P-6 (автор по полям, страница без id, битый `known_versions` → `failed`, пропавшая версия → `failed`, порядок, e2e по признаку хаба) — в design.md. ## Отложено (follow-up) M-2 (время версии без смещения → 422 хаба и `failed` на каждом прогоне), M-4 (фейк хаба: предел через `MAX_PAGES`, `Z` на 3.9), M-5 (тест 503 не утверждает отправку упавшей пачки). ## Выкатка Из основного checkout после merge: `uv run --project ../sdlc-hub sdlc-hub agent publish --module wiki src/agent.py` — после выкатки хаба hub#140. Перед подъёмом `wiki_min_agent_version` до 2 — посмотреть в логе первой синхронизации v2 строку «версий без автора». 🤖 Generated with [Claude Code](https://claude.com/claude-code)
aep added 8 commits 2026-10-28 12:48:54 +03:00
aep merged commit 60898f7aaf into main 2026-10-28 13:01:52 +03:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: aep/eva-agent#8
No description provided.