ci: harden community release baseline

This commit is contained in:
github-ops
2026-05-14 16:49:25 +00:00
parent 23962f98e3
commit fd11d9ceca
14 changed files with 139 additions and 304 deletions
+14 -5
View File
@@ -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 .
+23 -1
View File
@@ -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
+22 -45
View File
@@ -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://<domain>`
- известны 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://<domain>
```
После завершения прохода готовый блок для
[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 <domain> <deploy-sha> "codex + operator"
@@ -55,7 +52,6 @@ just staging-note-block <domain> <deploy-sha> "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 <domain> <deploy-sha> "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 <domain> <deploy-sha> "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 <domain> <deploy-sha> "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 <domain> <deploy-sha> "codex + operator"
- secrets/auth profiles;
- wizard;
- REST;
- GraphQL;
- gRPC;
- streaming;
- WebSocket;
- SOAP.
- MCP smoke.
## 5. Готовый блок для вставки
@@ -190,7 +168,7 @@ just staging-note-block <domain> <deploy-sha> "codex + operator"
- secrets
- logs
- usage
- streaming
- rest smoke
- mcp smoke
### Passed
@@ -199,11 +177,7 @@ just staging-note-block <domain> <deploy-sha> "codex + operator"
- 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>`
- MCP smoke: `<passed|partial|failed>`
### Findings
@@ -218,8 +192,11 @@ just staging-note-block <domain> <deploy-sha> "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).
+5
View File
@@ -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`
+27 -44
View File
@@ -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://<domain>
- `/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://<domain>/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. Если что-то падает
Порядок разбора:
+2 -2
View File
@@ -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. Базовая модель деплоя
+7 -31
View File
@@ -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. Если что-то падает
+17 -85
View File
@@ -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":"<your-email>","password":"<your-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`
Этого достаточно, чтобы проверить весь путь:
+20 -28
View File
@@ -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 <domain> <deploy-sha> "codex + operator"
@@ -68,17 +67,14 @@ just staging-note-block <domain> <deploy-sha> "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 <domain> <deploy-sha> "codex + operator"
- secrets
- logs
- usage
- streaming
- rest smoke
- mcp smoke
### Passed
@@ -142,7 +138,7 @@ just staging-note-block <domain> <deploy-sha> "codex + operator"
- `high`
primary flow broken, но система частично работает
- `medium`
заметный UX/runtime дефект с обходным путем
заметный UX или runtime дефект с обходным путем
- `low`
косметика, wording, layout, docs mismatch
@@ -156,14 +152,13 @@ just staging-note-block <domain> <deploy-sha> "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 <domain> <deploy-sha> "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. Последняя актуальная запись
@@ -1,3 +0,0 @@
{
"code": "BR"
}
@@ -1,4 +0,0 @@
{
"a": 7,
"b": 5
}
-15
View File
@@ -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
```
-35
View File
@@ -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/"
+2 -6
View File
@@ -30,7 +30,7 @@ cat <<EOF
- secrets
- logs
- usage
- streaming
- rest smoke
- mcp smoke
### Passed
@@ -39,11 +39,7 @@ cat <<EOF
- 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>\`
- MCP smoke: \`<passed|partial|failed>\`
### Findings