# Scripts

## `staging-smoke.sh`

Post-deploy smoke helper для staging/production-like окружений.

```bash
./scripts/staging-smoke.sh https://crank.example.com
```

## `authenticated-staging-smoke.sh`

Browser-authenticated smoke helper.

Обязательные переменные:

- `CRANK_STAGING_ADMIN_EMAIL`
- `CRANK_STAGING_ADMIN_PASSWORD`

```bash
CRANK_STAGING_ADMIN_EMAIL=owner@example.com \
CRANK_STAGING_ADMIN_PASSWORD=secret \
./scripts/authenticated-staging-smoke.sh https://crank.example.com
```

## `authenticated-product-smoke.sh`

Authenticated product smoke helper. Создает временную REST operation на
внутренний `admin-api` health endpoint, публикует агента, выпускает API-ключ и
проверяет MCP `tools/list` / `tools/call`. Внешние публичные API не используются.

Обязательные переменные:

- `CRANK_STAGING_ADMIN_EMAIL`
- `CRANK_STAGING_ADMIN_PASSWORD`

```bash
CRANK_STAGING_ADMIN_EMAIL=owner@example.com \
CRANK_STAGING_ADMIN_PASSWORD=secret \
./scripts/authenticated-product-smoke.sh https://crank.example.com
```

По умолчанию временные сущности удаляются после успешной проверки. Для отладки
можно оставить их в workspace:

```bash
CRANK_PRODUCT_SMOKE_KEEP_ASSETS=1 ./scripts/authenticated-product-smoke.sh https://crank.example.com
```

## `staging-note-block.sh`

Генерирует markdown-блок для `docs/staging-regression-notes.md` после реального
staging pass.

```bash
./scripts/staging-note-block.sh crank.example.com abc1234 "operator" partial
```

## `load-openbao-env.sh`

Логинится в OpenBao через AppRole и выгружает deploy/runtime secrets в локальный
shell env file.

Обязательные переменные:

- `BAO_ADDR`
- `BAO_ROLE_ID`
- `BAO_SECRET_ID`
- `OPENBAO_APP`

Опционально:

- `OPENBAO_ENV_FILE`, default `.openbao-env`

Скрипт читает KV v2 secrets из mount `ci`:

- `shared/registry`
- `shared/deploy-ssh`
- `projects/${OPENBAO_APP}/deploy`
- `projects/${OPENBAO_APP}/runtime`

Также он создает workflow-compatible aliases:

- `REGISTRY_USERNAME -> DEPLOY_REGISTRY_USER`
- `REGISTRY_PASSWORD -> DEPLOY_REGISTRY_TOKEN`

## `check-rust-code-health.sh`

Проверяет базовые правила сопровождаемости Rust-кода:

- новые `.rs` файлы не больше 1000 строк;
- существующие крупные файлы не должны расти сверх текущего baseline;
- крупные inline test modules запрещены вне legacy allowlist.

```bash
./scripts/check-rust-code-health.sh
```

## `check-rust-boundaries.sh`

Проверяет направление зависимостей между Rust workspace crates:

- приложения из `apps/*` могут зависеть от crates, но не от других приложений;
- crates не должны зависеть от приложений;
- `crank-core` не зависит от runtime, registry и adapters;
- `crank-registry` не зависит от runtime и adapters;
- `crank-runtime` не зависит от registry.

```bash
./scripts/check-rust-boundaries.sh
```

## `check-community-scope.sh`

Проверяет, что в community-репозиторий не попали функции и тексты за пределами
REST -> MCP сценария.

```bash
./scripts/check-community-scope.sh
```

Unit-тесты checker-а лежат в `tests/unit`:

```bash
python3 -m unittest discover -s tests/unit
```
