diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4742b47..584dbfa 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -65,11 +65,20 @@ jobs: - name: Checkout uses: actions/checkout@v5 - - name: Validate static UI files - run: | - test -f apps/ui/Dockerfile - test -f apps/ui/index.html - test -f apps/ui/nginx.conf + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 22 + cache: npm + cache-dependency-path: apps/ui/package-lock.json + + - name: Install UI dependencies + working-directory: apps/ui + run: npm ci + + - name: Build UI bundle + working-directory: apps/ui + run: npm run build - name: Build UI image run: docker build -f apps/ui/Dockerfile . diff --git a/TASKS.md b/TASKS.md index 9730db0..76c86c6 100644 --- a/TASKS.md +++ b/TASKS.md @@ -69,7 +69,7 @@ Progress: ### `feat/community-release-hardening` -Status: in_progress +Status: done Goal: - закрепить воспроизводимый Community release path и release checklist без скрытых переходных допущений. @@ -80,6 +80,12 @@ Main code areas: - `deploy/community/*` - `docs/community-release-checklist.md` - `docs/deploy-and-staging-smoke.md` +- `docs/authenticated-staging-pass.md` +- `docs/public-smoke-targets.md` +- `docs/staging-regression-notes.md` +- `scripts/staging-smoke.sh` +- `scripts/authenticated-staging-smoke.sh` +- `scripts/staging-note-block.sh` Implementation slices: 1. проверить соответствие CI Community manifests; @@ -91,6 +97,22 @@ DoD: - checklist соответствует реальному Community deploy surface; - пост-деплойная проверка повторяема. +Verification: +- `python3` YAML parse for `.github/workflows/ci.yml` +- `docker compose -f deploy/community/docker-compose.yml --env-file deploy/community/.env.example config -q` +- `docker compose -f deploy/community/docker-compose.yml --env-file deploy/community/.env.example --profile cache config -q` +- `just check` +- `apps/ui` build +- Community-targeted Playwright smoke including `staging-authenticated.spec.js` + +Progress: +- done: + - `UI Checks` in `CI` now run real `npm ci` and `npm run build` before the container image build + - Community release docs and helper scripts now describe only the real `REST-only` deploy smoke baseline + - staging templates and regression notes no longer require `GraphQL`, `gRPC`, `WebSocket`, `SOAP`, or streaming scenarios in Community + - Community public smoke targets are reduced to the canonical `REST -> Open-Meteo` path + - obsolete split-helper artifact `scripts/export-community.sh` and stale premium smoke payloads have been removed from the public repo + ### `feat/common-public-improvements` Status: ready diff --git a/docs/authenticated-staging-pass.md b/docs/authenticated-staging-pass.md index dac3fdd..7a288d5 100644 --- a/docs/authenticated-staging-pass.md +++ b/docs/authenticated-staging-pass.md @@ -2,21 +2,20 @@ ## 1. Назначение -Этот документ описывает именно тот кусок staging smoke, который нельзя честно закрыть одними `curl` и unauthenticated route checks. +Этот документ описывает тот кусок Community staging smoke, который нельзя честно закрыть одними `curl` и unauthenticated route checks. Он покрывает: - login/logout; - UI shell после входа; - `Secrets -> Auth Profiles -> Wizard -> Test run`; -- protocol smoke через UI и MCP; -- streaming pages после реальных вызовов. +- `REST` smoke через UI и MCP. Использовать вместе с: -- [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) +- [deploy-and-staging-smoke.md](deploy-and-staging-smoke.md) +- [staging-regression-notes.md](staging-regression-notes.md) +- [manual-regression-checklist.md](manual-regression-checklist.md) ## 2. Что нужно заранее @@ -27,7 +26,7 @@ - `CRANK_STAGING_ADMIN_EMAIL=... CRANK_STAGING_ADMIN_PASSWORD=... just authenticated-staging-smoke https://` - известны bootstrap admin credentials; - на стенде есть demo data или подготовленный disposable workspace; -- браузер открыт с devtools, чтобы фиксировать network/console findings. +- браузер открыт с devtools, чтобы фиксировать network и console findings. ## 3. Канонический проход @@ -39,9 +38,7 @@ export CRANK_STAGING_ADMIN_PASSWORD=secret just authenticated-staging-smoke https:// ``` -После завершения прохода готовый блок для -[staging-regression-notes.md](/home/a.tolmachev/code/rust/mcpaas/docs/staging-regression-notes.md) -можно сгенерировать так: +После завершения прохода готовый блок для [staging-regression-notes.md](staging-regression-notes.md) можно сгенерировать так: ```bash just staging-note-block "codex + operator" @@ -55,7 +52,6 @@ just staging-note-block "codex + operator" - valid login -> redirect на `/`; - нет redirect loop; - password-only note видна; - - planned actions на login не выглядят рабочими. 3. После входа проверить: - current workspace в navbar; - user identity; @@ -80,7 +76,7 @@ just staging-note-block "codex + operator" - `status: passed | partial | failed` - есть ли console errors; -- есть ли failing XHR/fetch; +- есть ли failing XHR или fetch; - есть ли broken layout. ### 3.3. Secrets and auth profiles @@ -111,19 +107,17 @@ just staging-note-block "codex + operator" - upstream сохраняется; - test run отрабатывает с `auth_profile_ref`. -### 3.5. Protocol smoke +### 3.5. REST protocol smoke Использовать: -- [public-smoke-targets.md](/home/a.tolmachev/code/rust/mcpaas/docs/public-smoke-targets.md) +- [public-smoke-targets.md](public-smoke-targets.md) -Обязательные кейсы: +Обязательный кейс: - `REST` -- `GraphQL` -- `gRPC` -Для каждого: +Порядок: 1. создать или открыть operation; 2. выполнить `Test run`; @@ -133,21 +127,9 @@ just staging-note-block "codex + operator" - `tools/list` - `tools/call` -### 3.6. Streaming smoke - -Проверить: - -- `window` tool; -- `session` tool; -- `async_job` tool; - -Если 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) обязательно добавить: +По итогам authenticated pass в [staging-regression-notes.md](staging-regression-notes.md) обязательно добавить: - deploy commit; - кто проходил smoke; @@ -160,11 +142,7 @@ just staging-note-block "codex + operator" - secrets/auth profiles; - wizard; - REST; - - GraphQL; - - gRPC; - - streaming; - - WebSocket; - - SOAP. + - MCP smoke. ## 5. Готовый блок для вставки @@ -190,7 +168,7 @@ just staging-note-block "codex + operator" - secrets - logs - usage - - streaming + - rest smoke - mcp smoke ### Passed @@ -199,11 +177,7 @@ just staging-note-block "codex + operator" - shell pages open after auth - secrets/auth profile flow status: `` - REST smoke: `` -- GraphQL smoke: `` -- gRPC smoke: `` -- streaming pages status: `` -- WebSocket: `` -- SOAP: `` +- MCP smoke: `` ### Findings @@ -218,8 +192,11 @@ just staging-note-block "codex + operator" - ... ``` -## 6. Практический статус +## 6. Почему automated smoke недостаточно -На текущий момент этот документ подготовлен как operational template. +Скрипт [scripts/authenticated-staging-smoke.sh](../scripts/authenticated-staging-smoke.sh) полезен как быстрый sanity check, но он: -Он не заменяет реальный authenticated browser pass и не должен отмечаться как `passed`, пока результаты не занесены в [staging-regression-notes.md](/home/a.tolmachev/code/rust/mcpaas/docs/staging-regression-notes.md). +- проверяет только минимальный browser flow; +- не создает реальный disposable operation; +- не заменяет ручной `REST -> publish -> MCP call` проход; +- не должен отмечаться как `passed`, пока результаты не занесены в [staging-regression-notes.md](staging-regression-notes.md). diff --git a/docs/community-release-checklist.md b/docs/community-release-checklist.md index 25d9094..cb6cf5f 100644 --- a/docs/community-release-checklist.md +++ b/docs/community-release-checklist.md @@ -21,6 +21,8 @@ - `docs/deployment.md` - `docs/deploy-and-staging-smoke.md` - `docs/authenticated-staging-pass.md` +- `docs/public-smoke-targets.md` +- `docs/staging-regression-notes.md` Root-файлы: @@ -70,6 +72,7 @@ Community release должен поставлять: 5. Post-deploy smoke выполнен по: - `docs/deploy-and-staging-smoke.md` - `docs/authenticated-staging-pass.md` + - `docs/public-smoke-targets.md` ## 6. Правило для будущих коммерческих редакций @@ -118,4 +121,6 @@ Community release должен поставлять: - `docs/deployment.md` - `docs/deploy-and-staging-smoke.md` - `docs/authenticated-staging-pass.md` +- `docs/public-smoke-targets.md` +- `docs/staging-regression-notes.md` - `docs/implementation-plan.md` diff --git a/docs/deploy-and-staging-smoke.md b/docs/deploy-and-staging-smoke.md index 3e87535..7380704 100644 --- a/docs/deploy-and-staging-smoke.md +++ b/docs/deploy-and-staging-smoke.md @@ -2,35 +2,35 @@ ## 1. Назначение -Этот документ фиксирует обязательный post-deploy smoke pass для staging/production-like окружения. +Этот документ фиксирует обязательный post-deploy smoke pass для `Community` staging или production-like окружения. Он нужен для двух задач: -- быстро проверить, что свежий deploy реально жив, а не просто "docker compose up -d завершился"; -- дать следующему агенту и оператору один канонический сценарий проверки после релиза. +- быстро проверить, что свежий deploy реально жив, а не просто `docker compose up -d` завершился без ошибок; +- дать оператору и следующему агенту один канонический сценарий проверки после релиза. Для Community-поставки source of truth для runtime manifests: - `deploy/community/docker-compose.yml` - `deploy/community/.env.example` -Результаты прохождения этого checklist нужно заносить в [staging-regression-notes.md](/home/a.tolmachev/code/rust/mcpaas/docs/staging-regression-notes.md). +Результаты прохождения этого checklist нужно заносить в [staging-regression-notes.md](staging-regression-notes.md). Для полного browser-authenticated прохода использовать отдельный документ: -- [authenticated-staging-pass.md](/home/a.tolmachev/code/rust/mcpaas/docs/authenticated-staging-pass.md) +- [authenticated-staging-pass.md](authenticated-staging-pass.md) ## 2. Когда использовать Запускать после: - merge в `main` и успешного `Deploy`; -- изменения `nginx`/routing; -- изменения auth/session; -- изменения `mcp-server`; -- изменения streaming/tool execution; -- изменения secrets/auth profiles; -- изменения UI routing и login flow. +- изменений `nginx` или routing; +- изменений auth/session; +- изменений `mcp-server`; +- изменений secrets/auth profiles; +- изменений UI routing и login flow; +- изменений `deploy/community/*`. ## 3. Предусловия @@ -39,8 +39,8 @@ - задеплоенный стек `ui`, `admin-api`, `mcp-server`, `postgres`; - корректный `.env` на сервере; - валидный deploy через `.github/workflows/deploy.yml`; -- server deployment path собран из public Community manifest, а не из ad-hoc compose файла; -- включенный `CRANK_DEMO_SEED=true`, если нужен предзаполненный smoke state; +- server deployment path, собранный из `deploy/community/docker-compose.yml`; +- `CRANK_DEMO_SEED=true`, если нужен предзаполненный smoke state; - bootstrap admin credentials для входа в UI. ## 3.1. Быстрый automated smoke @@ -64,7 +64,7 @@ bash scripts/staging-smoke.sh https:// - `/mcp/health`; - legacy `/html/...` redirects. -Это не заменяет ручной smoke pass ниже, а только быстро отсеивает грубые deploy/routing поломки. +Это не заменяет ручной smoke pass ниже, а только быстро отсеивает грубые deploy или routing поломки. ## 4. Server-side smoke @@ -79,10 +79,10 @@ docker compose logs --tail=100 mcp-server Ожидаемо: -- `admin-api` в `Up` / `healthy`; -- `mcp-server` в `Up` / `healthy`; +- `admin-api` в `Up` или `healthy`; +- `mcp-server` в `Up` или `healthy`; - нет циклических restart-ов; -- нет `NotPresent`, `password authentication failed`, `panic`, `invalid transition` и аналогичных fatal ошибок. +- нет `password authentication failed`, `panic`, `invalid transition` и аналогичных fatal ошибок. Проверка health endpoints: @@ -133,7 +133,6 @@ curl -I https:///html/wizard/ - нет redirect loop; - invalid login показывает ошибку; - страница честно помечает password-only flow; - - `Forgot password`, `Google SSO`, `Request access` визуально disabled/planned. 3. Выполнить login. 4. Проверить navbar: - workspace switch; @@ -181,17 +180,15 @@ Smoke считается успешным, если: - wizard не требует `${secrets.*}`; - `auth_profile_ref` реально доезжает до execution path; -- plaintext не возвращается после create/rotate. +- plaintext не возвращается после create или rotate. -## 9. MCP and protocol smoke +## 9. MCP and REST smoke -Использовать примеры из [public-smoke-targets.md](/home/a.tolmachev/code/rust/mcpaas/docs/public-smoke-targets.md). +Использовать пример из [public-smoke-targets.md](public-smoke-targets.md). -Обязательные ручные кейсы: +Обязательный ручной кейс: - `REST` -> `Open-Meteo` -- `GraphQL` -> `Countries` -- `gRPC` -> `grpcb.in` Порядок: @@ -202,33 +199,19 @@ Smoke считается успешным, если: 5. проверить MCP path; 6. выполнить `tools/list` и `tools/call`. -## 10. Streaming smoke +## 10. Acceptance criteria -На deployed стенде проверить: - -- `window` tool выполняется и не возвращает бесконечный поток; - -Если есть real upstream: - -- `WebSocket window/session` -- `SOAP import + inspect + test run` - -Если real upstream нет, это остается на локальном e2e/fixture stack. - -## 11. Acceptance criteria - -Deploy/staging smoke считается успешным, если: +Deploy или staging smoke считается успешным, если: - server health зеленый; - reverse proxy отдает правильные routes; - login/session живы; -- all core pages открываются; -- secrets/auth/wizard связка работает; -- минимум `REST`, `GraphQL`, `gRPC` проходят `create -> test-run -> publish -> MCP call`; -- streaming pages отображают реальные session/job artifacts; +- все core pages открываются; +- связка `Secrets -> Auth Profiles -> Wizard -> Test run` работает; +- минимум один `REST` operation проходит `create -> test-run -> publish -> MCP call`; - нет критичных JS ошибок в браузере. -## 12. Если что-то падает +## 11. Если что-то падает Порядок разбора: diff --git a/docs/deployment.md b/docs/deployment.md index 4bd6041..8a7111f 100644 --- a/docs/deployment.md +++ b/docs/deployment.md @@ -13,10 +13,10 @@ Документ не привязан к конкретному hypervisor, cloud provider, типу VM или домашней инфраструктуре. -Практический post-deploy smoke checklist вынесен отдельно в [deploy-and-staging-smoke.md](/home/github-ops/crank/docs/deploy-and-staging-smoke.md). +Практический post-deploy smoke checklist вынесен отдельно в [deploy-and-staging-smoke.md](deploy-and-staging-smoke.md). Отдельный release checklist именно для открытой редакции вынесен в -[community-release-checklist.md](/home/github-ops/crank/docs/community-release-checklist.md). +[community-release-checklist.md](community-release-checklist.md). ## 2. Базовая модель деплоя diff --git a/docs/manual-regression-checklist.md b/docs/manual-regression-checklist.md index ca2e509..e175fb6 100644 --- a/docs/manual-regression-checklist.md +++ b/docs/manual-regression-checklist.md @@ -2,7 +2,7 @@ ## 1. Назначение -Этот документ фиксирует post-integration baseline для UI, auth, secrets и streaming slices. +Этот документ фиксирует post-integration baseline для Community UI, auth, secrets и REST/MCP slices. Цель: @@ -20,7 +20,6 @@ - `postgres`; - `admin-api`; - `mcp-server`; - - fixture servers для streaming; - локальный UI proxy. Покрытые автоматикой сценарии: @@ -33,9 +32,7 @@ - usage; - workspace/settings; - wizard; -- REST window tool; -- gRPC session tools; -- async job tools. +- REST draft/test/publish flow. ## 3. Когда запускать этот pass @@ -46,9 +43,7 @@ - operations/wizard; - agents; - secrets/auth profiles; -- streaming configuration; - MCP transport; -- REST SSE, gRPC streaming, WebSocket, SOAP adapters; - deploy routing/UI routes. ## 4. Обязательные команды перед ручным проходом @@ -89,12 +84,7 @@ cd apps/ui && npm run e2e ### 5.3. Wizard - открыть `/wizard/`; -- переключить protocol cards: - - `REST` - - `GraphQL` - - `gRPC` - - `WebSocket` - - `SOAP` +- убедиться, что доступна только `REST` protocol card; - для нового upstream проверить режимы auth: - `No auth` - `Use existing auth profile` @@ -166,24 +156,11 @@ cd apps/ui && npm run e2e ## 6. Protocol smoke pass -Для smoke-проверки MCP использовать готовые public targets из [public-smoke-targets.md](/home/a.tolmachev/code/rust/mcpaas/docs/public-smoke-targets.md). +Для smoke-проверки MCP использовать готовый public target из [public-smoke-targets.md](public-smoke-targets.md). -Обязательные кейсы: +Обязательный кейс: -- REST: [rest-open-meteo.operation.json](/home/a.tolmachev/code/rust/mcpaas/examples/mcp-smoke/rest-open-meteo.operation.json) -- GraphQL: [graphql-countries.operation.json](/home/a.tolmachev/code/rust/mcpaas/examples/mcp-smoke/graphql-countries.operation.json) -- gRPC: [grpc-grpcb-add.operation.json](/home/a.tolmachev/code/rust/mcpaas/examples/mcp-smoke/grpc-grpcb-add.operation.json) - -Streaming regression на локальном e2e стеке: - -- REST SSE window tool; -- gRPC session tools; -- async job tools. - -Ручной post-deploy pass должен дополнительно проверить: - -- WebSocket window/session flow после появления real upstream; -- SOAP import/inspection/test run на disposable WSDL fixture. +- REST: [rest-open-meteo.operation.json](../examples/mcp-smoke/rest-open-meteo.operation.json) ## 7. Acceptance criteria @@ -193,8 +170,7 @@ Regression pass считается завершенным, если одновр - Playwright suite passed; - login/shell/manual navigation не ломаются; - `Secrets -> Auth Profiles -> Wizard -> Test run` связка работает; -- public smoke targets проходят для `REST`, `GraphQL`, `gRPC`; -- streaming demo scenarios проходят на локальном e2e стеке; +- public REST smoke target проходит; - нет критичных UI regressions на clean routes, i18n и auth redirects. ## 8. Если что-то падает diff --git a/docs/public-smoke-targets.md b/docs/public-smoke-targets.md index 1a4508c..f3a83a4 100644 --- a/docs/public-smoke-targets.md +++ b/docs/public-smoke-targets.md @@ -1,40 +1,32 @@ # Public Smoke Targets -Этот документ фиксирует три публичных upstream-сервиса, которые можно использовать для ручной проверки `REST`, `GraphQL` и `gRPC` operation в Crank без поднятия своих тестовых backend-ов. +Этот документ фиксирует публичный upstream-сервис, который можно использовать для ручной проверки `REST` operation в `crank-community` без поднятия своего тестового backend-а. -Все примеры ниже уже сверены с реальными публичными endpoint-ами и дублируются готовыми payload-файлами в [examples/mcp-smoke](/home/a.tolmachev/code/rust/mcpaas/examples/mcp-smoke). +Для Community канонический smoke target только один: -## 1. Источники +- `REST` -- REST: Open-Meteo Weather Forecast API +Коммерческие протоколы и их smoke targets живут в private репозиториях и не входят в Community release baseline. + +Все примеры ниже дублируются готовыми payload-файлами в [examples/mcp-smoke](../examples/mcp-smoke). + +## 1. Источник + +- REST: Open-Meteo Weather Forecast API `https://open-meteo.com/en/docs` -- GraphQL: Countries GraphQL API - `https://github.com/trevorblades/countries/blob/main/README.md` - Playground / endpoint: `https://countries.trevorblades.com/` -- gRPC: grpcb.in - `https://grpcb.in/` - Public proto: `https://raw.githubusercontent.com/moul/pb/master/addsvc/addsvc.proto` ## 2. Готовые operation payload-ы -- REST: [rest-open-meteo.operation.json](/home/a.tolmachev/code/rust/mcpaas/examples/mcp-smoke/rest-open-meteo.operation.json) -- REST test input: [rest-open-meteo.test-input.json](/home/a.tolmachev/code/rust/mcpaas/examples/mcp-smoke/rest-open-meteo.test-input.json) -- GraphQL: [graphql-countries.operation.json](/home/a.tolmachev/code/rust/mcpaas/examples/mcp-smoke/graphql-countries.operation.json) -- GraphQL test input: [graphql-countries.test-input.json](/home/a.tolmachev/code/rust/mcpaas/examples/mcp-smoke/graphql-countries.test-input.json) -- gRPC: [grpc-grpcb-add.operation.json](/home/a.tolmachev/code/rust/mcpaas/examples/mcp-smoke/grpc-grpcb-add.operation.json) -- gRPC test input: [grpc-grpcb-add.test-input.json](/home/a.tolmachev/code/rust/mcpaas/examples/mcp-smoke/grpc-grpcb-add.test-input.json) -- gRPC proto reference: [grpc-grpcb-addsvc.proto](/home/a.tolmachev/code/rust/mcpaas/examples/mcp-smoke/grpc-grpcb-addsvc.proto) +- REST: [rest-open-meteo.operation.json](../examples/mcp-smoke/rest-open-meteo.operation.json) +- REST test input: [rest-open-meteo.test-input.json](../examples/mcp-smoke/rest-open-meteo.test-input.json) ## 3. Как использовать ### 3.1. Через UI -1. Создай operation вручную в `Wizard`. -2. Подставь значения из соответствующего `*.operation.json`. -3. Для `gRPC` можно либо: - - просто использовать готовый `descriptor_set_b64` из JSON payload; - - либо отдельно загрузить `.proto` из [grpc-grpcb-addsvc.proto](/home/a.tolmachev/code/rust/mcpaas/examples/mcp-smoke/grpc-grpcb-addsvc.proto). -4. На шаге теста используй `*.test-input.json`. +1. Создать operation вручную в `Wizard`. +2. Подставить значения из `rest-open-meteo.operation.json`. +3. На шаге теста использовать `rest-open-meteo.test-input.json`. ### 3.2. Через admin-api @@ -70,7 +62,7 @@ curl -sS -c cookie.txt \ --data '{"email":"","password":""}' ``` -## 4. Что именно проверяют примеры +## 4. Что именно проверяет пример ### 4.1. REST: Open-Meteo @@ -94,71 +86,11 @@ curl -sS -c cookie.txt \ } ``` -### 4.2. GraphQL: Countries - -- Protocol: `GraphQL` -- Endpoint: `https://countries.trevorblades.com/` -- Проверка: - - fixed GraphQL query - - variable mapping - - `response_path` - - nested array extraction - -Ожидаемый upstream query: - -```graphql -query GetCountry($code: ID!) { - country(code: $code) { - code - name - capital - emoji - currency - languages { - code - name - } - } -} -``` - -### 4.3. gRPC: grpcb.in / addsvc.Add.Sum - -- Protocol: `gRPC` -- Endpoint: `http://grpcb.in:9000` -- Service: `addsvc.Add` -- Method: `Sum` -- Проверка: - - descriptor-backed unary gRPC call - - `request.grpc.*` mapping - - protobuf JSON response normalization - - `to_number` transform from protobuf `int64` string - -Проверенный реальный вызов: - -```bash -docker run --rm fullstorydev/grpcurl:latest \ - -plaintext \ - -d '{"a":7,"b":5}' \ - grpcb.in:9000 \ - addsvc.Add/Sum -``` - -Ожидаемый ответ: - -```json -{ - "v": "12" -} -``` - ## 5. Практическая рекомендация -Для первого smoke pass используй именно эти три operation: +Для первого smoke pass использовать operation: - `weather_current_open_meteo` -- `country_lookup_countries` -- `grpcb_add_sum` Этого достаточно, чтобы проверить весь путь: diff --git a/docs/staging-regression-notes.md b/docs/staging-regression-notes.md index 4b2d8e0..8bd7b19 100644 --- a/docs/staging-regression-notes.md +++ b/docs/staging-regression-notes.md @@ -35,18 +35,17 @@ ### Infra notes -- this pass covered only unauthenticated public/staging smoke; -- authenticated UI flows, MCP tool calls, secrets/auth-profile flows and protocol smoke were not exercised in this entry. +- this pass covered only unauthenticated public or staging smoke; +- authenticated UI flows, MCP tool calls, secrets/auth-profile flows and REST smoke were not exercised in this entry. ### Follow-up - run a full authenticated browser smoke after the next deploy; -- record `REST`, `GraphQL`, `gRPC` protocol smoke results in the next entry; -- add WebSocket/SOAP status as `not exercised` or `passed/failed` explicitly. +- record REST and MCP smoke results in the next entry. ## 1. Назначение -Этот документ фиксирует результаты ручных проверок на staging/production-like окружении после deploy. +Этот документ фиксирует результаты ручных проверок на staging или production-like окружении после deploy. Он нужен для трех задач: @@ -56,11 +55,11 @@ Использовать вместе с: -- [deploy-and-staging-smoke.md](/home/a.tolmachev/code/rust/mcpaas/docs/deploy-and-staging-smoke.md) -- [manual-regression-checklist.md](/home/a.tolmachev/code/rust/mcpaas/docs/manual-regression-checklist.md) -- [authenticated-staging-pass.md](/home/a.tolmachev/code/rust/mcpaas/docs/authenticated-staging-pass.md) +- [deploy-and-staging-smoke.md](deploy-and-staging-smoke.md) +- [manual-regression-checklist.md](manual-regression-checklist.md) +- [authenticated-staging-pass.md](authenticated-staging-pass.md) -Шаблон нового блока можно быстро сгенерировать через: +Если нужно сгенерировать заготовку новой записи: ```bash just staging-note-block "codex + operator" @@ -68,17 +67,14 @@ just staging-note-block "codex + operator" ## 2. Как вести записи -Каждый deploy или ручной regression pass должен добавляться новым блоком в начало документа. +Добавлять новую запись сверху документа. -На один блок фиксировать: +В каждой записи обязательно фиксировать: -- дата и время; -- окружение; -- commit/tag/image; -- кто запускал pass; -- какие smoke steps прошли; -- какие дефекты подтверждены; -- какие наблюдения являются только инфраструктурными; +- какой deploy проверялся; +- кто проводил проверку; +- какой scope реально покрыт; +- какие findings найдены; - какие follow-up fixes нужны. Если замечание исправлено, не удалять его из истории, а отметить: @@ -106,7 +102,7 @@ just staging-note-block "codex + operator" - secrets - logs - usage - - streaming + - rest smoke - mcp smoke ### Passed @@ -142,7 +138,7 @@ just staging-note-block "codex + operator" - `high` primary flow broken, но система частично работает - `medium` - заметный UX/runtime дефект с обходным путем + заметный UX или runtime дефект с обходным путем - `low` косметика, wording, layout, docs mismatch @@ -156,14 +152,13 @@ just staging-note-block "codex + operator" - page-level JS exception; - incorrect MCP result; - secret/auth profile flow mismatch; -- deploy route returning HTML instead of JSON; -- streaming session/job inconsistency. +- deploy route returning HTML instead of JSON. ### Не считать product finding - разовый сетевой timeout; - локальный browser glitch без воспроизведения; -- внешний upstream outage из публичного smoke target; +- внешний upstream outage из public REST smoke target; - предупреждения, не влияющие на flow; - заранее известные `planned` capability blocks. @@ -176,11 +171,8 @@ just staging-note-block "codex + operator" - auth/login status; - clean routes status; - `Secrets -> Auth Profiles -> Wizard -> Test run` статус; -- `REST`, `GraphQL`, `gRPC` smoke results; -- streaming pages status; -- WebSocket/SOAP note: - - `not exercised` - - или `failed/passed` с причиной. +- REST smoke results; +- MCP smoke result. ## 7. Последняя актуальная запись diff --git a/examples/mcp-smoke/graphql-countries.test-input.json b/examples/mcp-smoke/graphql-countries.test-input.json deleted file mode 100644 index 4825ea8..0000000 --- a/examples/mcp-smoke/graphql-countries.test-input.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "code": "BR" -} diff --git a/examples/mcp-smoke/grpc-grpcb-add.test-input.json b/examples/mcp-smoke/grpc-grpcb-add.test-input.json deleted file mode 100644 index e3c3aaf..0000000 --- a/examples/mcp-smoke/grpc-grpcb-add.test-input.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "a": 7, - "b": 5 -} diff --git a/scripts/README.md b/scripts/README.md index a0ef13e..54e596a 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -37,18 +37,3 @@ Usage: ```bash ./scripts/staging-note-block.sh rmcp.itexp.me abc1234 "codex + operator" partial ``` - -## export-community.sh - -Helper that replaces the working tree of the extracted `crank-community` -repository with the tracked monorepo baseline for private split rehearsal. - -It is not the final public export mechanism. -Final `crank-community` import must follow -`docs/community-source-whitelist.md`. - -Usage: - -```bash -./scripts/export-community.sh /path/to/crank-community-working-tree -``` diff --git a/scripts/export-community.sh b/scripts/export-community.sh deleted file mode 100755 index 983e099..0000000 --- a/scripts/export-community.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env bash - -set -euo pipefail - -usage() { - cat <<'EOF' -Usage: - ./scripts/export-community.sh /path/to/crank-community-working-tree - -The target directory must already be a git working tree for crank-community. -EOF -} - -if [[ "${1:-}" == "-h" || "${1:-}" == "--help" ]]; then - usage - exit 0 -fi - -if [[ $# -ne 1 ]]; then - usage >&2 - exit 1 -fi - -repo_root="$(git rev-parse --show-toplevel)" -target_dir="$(cd "$1" && pwd)" - -if [[ ! -d "$target_dir/.git" ]]; then - echo "target is not a git working tree: $target_dir" >&2 - exit 1 -fi - -find "$target_dir" -mindepth 1 -maxdepth 1 ! -name .git -exec rm -rf {} + - -git -C "$repo_root" ls-files -z -- . ':(exclude)templates/repositories/**' \ - | rsync -a --delete --from0 --files-from=- "$repo_root/" "$target_dir/" diff --git a/scripts/staging-note-block.sh b/scripts/staging-note-block.sh index cc0332e..847b632 100644 --- a/scripts/staging-note-block.sh +++ b/scripts/staging-note-block.sh @@ -30,7 +30,7 @@ cat <\` - REST smoke: \`\` -- GraphQL smoke: \`\` -- gRPC smoke: \`\` -- streaming pages status: \`\` -- WebSocket: \`\` -- SOAP: \`\` +- MCP smoke: \`\` ### Findings