Files
crank/scripts/README.md
T

207 lines
7.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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
```
Smoke выполняет Admin test-run до publish и фиксирует точные Operation version
и Agent revision. Для split-port local stack можно передать `--mcp-base-url` и
пустой `--mcp-path-prefix`; `--summary-output` пишет bounded safe summary без
ключей, cookies и payloads.
## `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
```
## Typed runtime configuration contract
Единый Rust registry генерирует machine contract, sections `.env.example` и
таблицу параметров. Проверка drift не изменяет файлы:
```bash
cargo run -p crank-config --bin crank-config-contract -- --check
python3 scripts/check-runtime-config.py --root .
python3 scripts/check-config-boundaries.py --root .
```
После намеренного изменения registry artifacts обновляются через
`crank-config-contract --write`, просматриваются в diff и проверяются командой
`just config-contract-check`. Explicit `--files` у boundary checker-а
позволяет проверять новые/untracked Rust-файлы.
## Versioned migration contract
`just migration-contract-check` сравнивает canonical Rust migration sequence с
committed machine contract. PostgreSQL DDL вне `crank-registry::migrations`
блокируется Rust module boundary check.
Операторские auth-команды живут в том же `crank-migrate` binary и используют
database-only config projection:
```bash
crank-migrate admin-auth bootstrap-create --email owner@example.local
crank-migrate admin-auth recover \
--email owner@example.local \
--password-file /secure/new-admin-password.txt \
--password-pepper-file /secure/password-pepper.txt \
--master-key-file /secure/current-master.key
```
Команда создаёт одноразовый local bootstrap contract и выводит token для UI
`/login`; static startup password не является production bootstrap authority.
Recovery проверяет active master-key identity, заменяет verifier существующего
Admin account, отзывает browser sessions и не выводит password, pepper,
master key или Secret material.
## Typed metrics contract
`just metrics-contract-check` сверяет Rust registry с versioned JSON snapshot и
проверяет, что production-код объявляет метрики только через `crank-metrics`.
Checker распознаёт прямые macro calls, imports, aliases и re-exports; новые
Rust-файлы можно передать явно через `--files`.
## Unified execution boundary
`check-execution-boundaries.py` запрещает Admin/MCP route и service слоям
обходить typed `RuntimeExecutionRequest`: напрямую импортировать REST adapter,
Reqwest, legacy `execute_with_*` helpers или запускать execution через
persistence. Проверка видит tracked и untracked файлы, а explicit mode
fail-closed отклоняет missing, symlink и path escape:
```bash
python3 scripts/check-execution-boundaries.py --root .
python3 scripts/check-execution-boundaries.py --root . --files <paths...>
```
Canonical composition roots создают adapters, но продуктовые Admin Draft Test
и MCP snapshot calls проходят только через единый runtime outcome contract.
## `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
```
Новые или ещё не tracked файлы по умолчанию не видны wrapper-у. Перед handoff
передайте только файлы текущего изменения явно:
```bash
python3 scripts/check-community-scope.py --root . --files <paths...>
```
## `validate-capability-inventory.py`
Проверяет canonical `docs/capability-inventory.json` по versioned schema,
обязательным FR, Community boundary и существующим evidence-ссылкам:
```bash
python3 scripts/validate-capability-inventory.py \
--root . \
--inventory docs/capability-inventory.json \
--schema docs/schemas/capability-inventory.schema.json \
$(for n in $(seq 1 54); do printf -- '--required-fr FR-%s ' "$n"; done)
```
Статусы `planned`, `gap` и `blocked` валидны, но не считаются pass.
## Capability baseline tools
`collect-capability-baseline.py` принимает только allowlisted command reports
или bounded Playwright JSON, вычисляет verdict и удаляет raw output, paths и
attachments. Retry-pass становится `flaky`, а skipped/missing/non-zero result
не становится pass.
```bash
python3 scripts/collect-capability-baseline.py playwright \
--report <temporary-report.json> \
--output <candidate.json> \
--source-revision <git-sha> \
--environment-class community-test \
--flow-id ui-operation-lifecycle
```
После review candidate и обновления canonical artifacts пересчитайте exact-byte
SHA-256 в manifest и запустите:
```bash
python3 scripts/validate-capability-baseline.py \
--root . \
--manifest docs/capability-baseline/manifest.json \
--schema docs/schemas/capability-baseline.schema.json
```