# Authenticated Staging Pass

## 1. Назначение

Этот документ описывает именно тот кусок staging smoke, который нельзя честно закрыть одними `curl` и unauthenticated route checks.

Он покрывает:

- login/logout;
- UI shell после входа;
- `Secrets -> Auth Profiles -> Wizard -> Test run`;
- protocol smoke через UI и MCP;
- streaming pages после реальных вызовов.

Использовать вместе с:

- [deploy-and-staging-smoke.md](/home/a.tolmachev/code/rust/mcpaas/docs/deploy-and-staging-smoke.md)
- [staging-regression-notes.md](/home/a.tolmachev/code/rust/mcpaas/docs/staging-regression-notes.md)
- [manual-regression-checklist.md](/home/a.tolmachev/code/rust/mcpaas/docs/manual-regression-checklist.md)

## 2. Что нужно заранее

- свежий deploy уже прошел helper smoke:
  - `just staging-smoke https://<domain>`
- automated browser-authenticated smoke при необходимости запускается так:
  - `CRANK_STAGING_ADMIN_EMAIL=... CRANK_STAGING_ADMIN_PASSWORD=... just authenticated-staging-smoke https://<domain>`
- известны bootstrap admin credentials;
- на стенде есть demo data или подготовленный disposable workspace;
- браузер открыт с devtools, чтобы фиксировать network/console findings.

## 3. Канонический проход

Перед ручным проходом можно прогнать automated baseline:

```bash
export CRANK_STAGING_ADMIN_EMAIL=owner@example.com
export CRANK_STAGING_ADMIN_PASSWORD=secret
just authenticated-staging-smoke https://<domain>
```

После завершения прохода готовый блок для
[staging-regression-notes.md](/home/a.tolmachev/code/rust/mcpaas/docs/staging-regression-notes.md)
можно сгенерировать так:

```bash
just staging-note-block <domain> <deploy-sha> "codex + operator"
```

### 3.1. Login and shell

1. Открыть `/login`
2. Проверить:
   - invalid login -> корректная ошибка;
   - valid login -> redirect на `/`;
   - нет redirect loop;
   - password-only note видна;
   - planned actions на login не выглядят рабочими.
3. После входа проверить:
   - current workspace в navbar;
   - user identity;
   - language switch;
   - logout.

### 3.2. Core UI pages

После повторного входа открыть:

- `/`
- `/agents`
- `/api-keys`
- `/secrets`
- `/logs`
- `/usage`
- `/workspace-setup`
- `/settings`
- `/stream-sessions`
- `/async-jobs`
- `/wizard/`

Для каждой страницы зафиксировать:

- `status: passed | partial | failed`
- есть ли console errors;
- есть ли failing XHR/fetch;
- есть ли broken layout.

### 3.3. Secrets and auth profiles

1. Открыть `/secrets`
2. Создать disposable `token` secret
3. При необходимости создать еще:
   - `header`
   - `username_password`
4. Проверить:
   - list/update timestamps;
   - rotate;
   - delete;
   - usage references

### 3.4. Wizard auth flow

1. Открыть `/wizard/`
2. На шаге 2:
   - выбрать `No auth`;
   - выбрать existing auth profile;
   - создать quick secret;
   - создать quick auth profile;
3. Сохранить upstream
4. Дойти до `Test run`
5. Подтвердить, что:
   - нет `${secrets.*}`;
   - upstream сохраняется;
   - test run отрабатывает с `auth_profile_ref`.

### 3.5. Protocol smoke

Использовать:

- [public-smoke-targets.md](/home/a.tolmachev/code/rust/mcpaas/docs/public-smoke-targets.md)

Обязательные кейсы:

- `REST`
- `GraphQL`
- `gRPC`

Для каждого:

1. создать или открыть operation;
2. выполнить `Test run`;
3. publish;
4. привязать к agent;
5. выполнить MCP smoke:
   - `tools/list`
   - `tools/call`

### 3.6. Streaming smoke

Проверить:

- `window` tool;
- `session` tool;
- `async_job` tool;
- `/stream-sessions`;
- `/async-jobs`.

Если WebSocket/SOAP upstream на стенде отсутствуют:

- явно записать `not exercised`, а не оставлять пустым.

## 4. Что нужно занести в staging notes

По итогам authenticated pass в [staging-regression-notes.md](/home/a.tolmachev/code/rust/mcpaas/docs/staging-regression-notes.md) обязательно добавить:

- deploy commit;
- кто проходил smoke;
- что именно проверено;
- что прошло;
- findings с severity;
- infra notes;
- explicit status для:
  - auth;
  - secrets/auth profiles;
  - wizard;
  - REST;
  - GraphQL;
  - gRPC;
  - streaming;
  - WebSocket;
  - SOAP.

## 5. Готовый блок для вставки

Этот же блок можно получить через:

```bash
just staging-note-block <domain> <deploy-sha> "codex + operator"
```

```md
## YYYY-MM-DD HH:MM TZ — rmcp.itexp.me (authenticated pass)

- deploy commit: `<sha>`
- checked by: `<name>`
- smoke status: `passed | partial | failed`
- scope:
  - auth
  - ui shell
  - operations
  - wizard
  - agents
  - api keys
  - secrets
  - logs
  - usage
  - streaming
  - mcp smoke

### Passed

- login/logout completed
- shell pages open after auth
- secrets/auth profile flow status: `<passed|partial|failed>`
- REST smoke: `<passed|partial|failed>`
- GraphQL smoke: `<passed|partial|failed>`
- gRPC smoke: `<passed|partial|failed>`
- streaming pages status: `<passed|partial|failed>`
- WebSocket: `<not exercised|passed|failed>`
- SOAP: `<not exercised|passed|failed>`

### Findings

- none

### Infra notes

- ...

### Follow-up

- ...
```

## 6. Практический статус

На текущий момент этот документ подготовлен как operational template.

Он не заменяет реальный authenticated browser pass и не должен отмечаться как `passed`, пока результаты не занесены в [staging-regression-notes.md](/home/a.tolmachev/code/rust/mcpaas/docs/staging-regression-notes.md).
