feat: complete Epic 1 production foundation
This commit is contained in:
@@ -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).
|
||||
|
||||
Reference in New Issue
Block a user