feat: complete Epic 1 production foundation

This commit is contained in:
2026-08-25 01:24:11 +03:00
parent 767428436d
commit 182bde8ac0
298 changed files with 35719 additions and 5299 deletions
+57 -7
View File
@@ -77,7 +77,8 @@ cd apps/ui && npm run e2e
- проверить search;
- проверить protocol/category/agent filters;
- открыть edit существующей operation;
- удалить operation из demo workspace только если это безопасно для текущего стенда;
- убедиться, что delete доступен только never-published Draft, а Published предлагает archive с подтверждением;
- открыть одну Operation в двух вкладках, сохранить обе и проверить, что вторая получает localized stale recovery без потери local edits;
- проверить success/error toasts;
- проверить clean routes без `/html/...`.
@@ -96,7 +97,10 @@ cd apps/ui && npm run e2e
- проверить sample upload;
- проверить YAML export/import;
- проверить `Test run`;
- проверить `Publish`.
- проверить, что Test run показывает безопасные Request ID и Trace ID с copy controls;
- проверить `Publish`, затем edit: Published vN остаётся неизменной, новая правка становится Draft vN+1;
- экспортировать Published vN как YAML v2, выполнить semantic no-op и changed upsert; previous Published Version не должна меняться;
- архивировать Operation и проверить, что существующий published Agent по-прежнему list/call pinned vN, а новая binding отклоняется.
### 5.4. Agents
@@ -111,11 +115,20 @@ cd apps/ui && npm run e2e
### 5.5. API Keys
- открыть `/api-keys`;
- создать key;
- создать MCP client key;
- убедиться, что raw key показывается один раз;
- проверить copy;
- проверить revoke;
- проверить delete;
- закрыть reveal modal и убедиться, что raw key очищен из интерфейса;
- проверить revoke и убедиться, что существующая MCP session теряет доступ без restart;
- проверить delete revoked key: metadata остаётся со статусом `deleted`, raw/hash не отображаются;
- создать approval key с `allowed_origins`;
- проверить, что approval запрос с чужим `Origin` отклоняется.
- создать Operation с human approval, вызвать Tool дважды с одинаковыми
аргументами и разными control-token: должна остаться одна pending заявка;
- убедиться, что pending approval summary показывает Agent/Operation Version,
expiry и безопасные параметры без raw token/secret;
- подтвердить заявку и повторить approve: второй запрос должен вернуть terminal
status без повторного upstream side effect.
- проверить `last_used_at` после реального machine-auth вызова при необходимости.
### 5.6. Secrets
@@ -129,17 +142,23 @@ cd apps/ui && npm run e2e
- `generic`;
- убедиться, что plaintext не возвращается после create/rotate;
- проверить usage references через auth profiles;
- проверить, что удаление Secret, используемого Auth Profile, возвращает `409 secret_referenced_by_auth_profile`;
- проверить, что rotation Secret меняет credential для следующего Wizard Test run без изменения Auth Profile/Operation refs;
- проверить audit/log evidence: нет plaintext, ciphertext, hash или raw key;
- проверить, что wizard quick-create синхронизируется с этой страницей.
### 5.7. Logs и Usage
- открыть `/logs`;
- проверить loading/error/empty states;
- проверить detail expansion;
- проверить фильтры period, explicit UTC window, status, outcome group, level/search и кнопку Load more;
- открыть detail expansion и убедиться, что видны Request ID, Trace ID и точная Operation Version, но нет raw секретов;
- экспортировать CSV из Logs и проверить, что выбранные фильтры применились без page-limit обрезки;
- открыть `/usage`;
- проверить summary cards;
- проверить timeline chart;
- проверить CSV export.
- проверить outcome groups `success`, `upstream`, `client`, `schema`, `crank`;
- проверить server-side CSV export из `/usage/export.csv`, а не client-side snapshot браузера.
### 5.8. Workspace и Settings
@@ -152,6 +171,37 @@ cd apps/ui && npm run e2e
- проверить profile update;
- проверить password change.
### 5.9. Getting Started: протокол usability для пяти участников
Этот протокол является планом сбора ручного evidence, а не заявлением о
пройденном исследовании. Выполнять его на пяти независимых участниках с fresh
self-hosted installation и отдельным новым Admin account для каждого прогона.
Участнику нельзя помогать документацией, исходным кодом, поиском по репозиторию
или подсказками оператора; разрешён только сам продукт и нормальное MCP client
окружение.
Для каждого участника:
- запустить таймер с первого authenticated рендера protected Admin UI;
- использовать Getting Started, создать manual REST Operation, выполнить test,
publish, создать/publish Agent и один MCP client key;
- сохранить key только через one-time reveal <!-- community-scope: allow=one-time-token -->, выполнить публичные
`initialize`, `notifications/initialized`, `tools/list`, `tools/call` по
canonical endpoint;
- остановить таймер после server-authoritative `first_call` с Agent/key/Tool,
Request ID и Trace ID в snapshot/Invocation History;
- проверить, что refresh/resume не раскрывает raw key, а revoke предлагает
deliberate recovery без автоматического создания дубликата;
- зафиксировать завершение, duration, все recovery/error states и факт
eligibility отдельно от completion. Не записывать bearer, payload, URL
частного контура или скриншоты с секретами.
Цель — median времени от первого authenticated render до authoritative first
call не более 15 минут. Незавершивший участник цензурируется на 30-й минуте, но
остаётся в conversion denominator; eligibility denominator и completion
numerator публикуются раздельно. До фактического пятиучастникового запуска
результат этого протокола остаётся `not_run`, а не `pass`.
## 6. Protocol smoke pass
Для smoke-проверки MCP использовать готовый public target из [public-smoke-targets.md](public-smoke-targets.md).