docs: re-verify production identity and domain cutover status

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Даня Архипов
2026-07-16 08:43:37 +00:00
parent 982f85dae1
commit 060971da75
11 changed files with 38 additions and 33 deletions

View File

@@ -89,12 +89,13 @@ Never commit:
* API tokens
* tunnel tokens in systemd unit Environment=
## Status
## Status (2026-07-16)
```text
Named Tunnel created: NO (auth missing)
Named Tunnel created: NO (auth missing — no cert.pem / CLOUDFLARE_API_TOKEN)
Ingress prepared as docs: YES
Connector healthy: N/A
DNS route: N/A
NS cutover: WAITING_USER
NS cutover: WAITING_USER — Cloudflare nameservers not assigned yet
Quick Tunnel: KEEP RUNNING until permanent HTTPS PASS
```

View File

@@ -1,10 +1,10 @@
# Demo Runbook — OZON Tech Sorter Simulation
**Назначение:** провести живую демонстрацию жюри/заказчику без сюрпризов.
**Дата актуализации:** 2026-07-15
**Рабочий публичный URL (временный):** Quick Tunnel — см. `PRODUCTION_DEPLOYMENT_REPORT.md`
**Дата актуализации:** 2026-07-16
**Рабочий публичный URL (временный):** `https://invitations-based-characters-accent.trycloudflare.com/`
**Ожидаемый постоянный домен:** https://arhipovdan.ru/ — **BLOCKED_EXTERNAL** (`PUBLIC_DOMAIN_DIAGNOSTIC.md`)
**Локальный production:** http://127.0.0.1:3100/
**Локальный production:** http://127.0.0.1:3100/ — commit `4fcce5b`
**Проверка версии:** `curl -s http://127.0.0.1:3100/version.json`
**Репозиторий:** `/home/coder/arhipovdan/app`

View File

@@ -1,6 +1,6 @@
# DNS_MIGRATION_INVENTORY
Дата: 2026-07-15
Дата: 2026-07-16 (re-verified)
Домен: `arhipovdan.ru`
Источник: публичные `dig` запросы с OwlPrime/coder.

View File

@@ -1,6 +1,6 @@
# FINAL_DEMO_READINESS
Дата: 2026-07-15
Дата: 2026-07-16 (re-verified)
## Status board
@@ -10,13 +10,13 @@
| Production container | PASS | `20260715-2221` / `index-AagIOJbd.js` / `version.json` → `4fcce5b` |
| Permanent domain | BLOCKED_EXTERNAL | REG.RU → openresty; CF Named Tunnel not auth'd |
| TLS (permanent) | BLOCKED_EXTERNAL | SNI fail on 185.160.137.162 |
| Quick Tunnel | PASS | Temporary public URL OK |
| Quick Tunnel | PASS | Temporary public URL OK; smoke PASS |
| Main / details | PASS | Local + tunnel |
| Unit / E2E / visual | PASS | 166 / 15 / 10 |
| Unit / E2E / visual | PASS | 166 / 15 / 10 (2026-07-16) |
| GPU hardware (server) | BLOCKED_BY_DISPLAY_ENVIRONMENT | SwiftShader only |
| Portable benchmark | PASS tooling | `npm run perf:browser` on laptop |
| Replay stability | STABLE | See `REPLAY_RESOURCE_STABILITY.md` |
| Rollback | PASS | docker rename backup |
| Rollback | PASS | `owl-web-1-backup-20260715-2221` |
| Agent / secrets | PASS | no credentials in git |
## Application readiness

View File

@@ -7,9 +7,12 @@ Display: headed (:99)
Software renderer detected: **YES**
Verdict: **NOT A GPU BASELINE — software renderer (SwiftShader/llvmpipe/etc.)**
## Server hardware WebGL re-check (2026-07-15)
## Server hardware WebGL re-check (2026-07-15 / 2026-07-16)
Tried Chromium flags independently (`--use-gl=egl`, `--use-angle=gl-egl`, `--use-angle=gl`, Vulkan ANGLE) with NVIDIA EGL vendor file present. All resolved to **SwiftShader**.
- `nvidia-smi`: GTX 1080 ×2 present; `/dev/nvidia*`, `/dev/dri` exist.
- Current user/groups: root; `video` group exists but no display server (`DISPLAY` empty, no `/tmp/.X11-unix`).
- Chromium probes (`--use-gl=egl`, `--use-angle=gl-egl`, `--use-angle=gl`, Vulkan ANGLE, `--ignore-gpu-blocklist`) all resolve to **SwiftShader**.
- No driver/display-server changes applied.
```text
BLOCKED_BY_DISPLAY_ENVIRONMENT

View File

@@ -6,7 +6,7 @@
| ----- | ----- |
| Release | `20260715-2215` |
| Bundle | `index-AagIOJbd.js` |
| Commit | `16e7930` (via `/version.json`) |
| Commit | `4fcce5b` (via `/version.json`) |
## software/headless WebGL diagnostic baseline

View File

@@ -56,7 +56,8 @@ HUD snapshots preferred over full WebGL pixel-perfect. Golden files are not auto
```text
15 passed (e2e, excl. production)
Production smoke @ :3100 — PASS (index-ncgt6PBL.js)
Production smoke @ Quick Tunnel — PASS
Production smoke @ arhipovdan.ru — FAIL (TLS/DNS blocker)
Unit: 166 passed
Production smoke @ :3100 — PASS (version.json → 4fcce5b, index-AagIOJbd.js)
Production smoke @ Quick Tunnel — PASS (same commit)
Production smoke @ arhipovdan.ru — BLOCKED_EXTERNAL (TLS/DNS)
```

View File

@@ -1,6 +1,6 @@
# PRODUCTION_DEPLOYMENT_REPORT
Дата: 2026-07-15
Дата: 2026-07-16 (re-verified)
Ветка: `feature/maximum-demo-realism`
## Current production
@@ -28,7 +28,7 @@
| URL | Status |
| --- | ------ |
| `http://127.0.0.1:3100/` | PASS — commit `16e7930` |
| `http://127.0.0.1:3100/` | PASS — commit `4fcce5b` |
| Quick Tunnel | PASS — same commit (kept running) |
| `https://arhipovdan.ru/` | BLOCKED_EXTERNAL — openresty / TLS SNI |
@@ -46,7 +46,7 @@ Build args inject `BUILD_COMMIT` / `BUILD_BRANCH` / `BUILD_RELEASE` because `.gi
```bash
export DOCKER_HOST=tcp://127.0.0.1:2375
docker stop owl-web-1 && docker rm owl-web-1
docker rename owl-web-1-backup-20260715-2215 owl-web-1
docker rename owl-web-1-backup-20260715-2221 owl-web-1
docker start owl-web-1
```
@@ -54,8 +54,8 @@ docker start owl-web-1
```bash
curl -s http://127.0.0.1:3100/version.json
PLAYWRIGHT_BASE_URL=http://127.0.0.1:3100 EXPECTED_COMMIT=16e7930 npm run test:e2e:production
PLAYWRIGHT_BASE_URL=https://invitations-based-characters-accent.trycloudflare.com EXPECTED_COMMIT=16e7930 npm run test:e2e:production
PLAYWRIGHT_BASE_URL=http://127.0.0.1:3100 EXPECTED_COMMIT=4fcce5b npm run test:e2e:production
PLAYWRIGHT_BASE_URL=https://invitations-based-characters-accent.trycloudflare.com EXPECTED_COMMIT=4fcce5b npm run test:e2e:production
```
Both local and Quick Tunnel: **PASS**.

View File

@@ -10,7 +10,7 @@ BLOCKED_EXTERNAL
```
Постоянный домен `https://arhipovdan.ru/` **не** обслуживает `owl-web-1`.
Production на `:3100` и Quick Tunnel обновлены до commit `16e7930` (`/version.json`).
Production на `:3100` и Quick Tunnel обновлены до commit `4fcce5b` (`/version.json` → release `20260715-2221`, bundle `index-AagIOJbd.js`).
Named Tunnel: **не создан** из этого окружения — нет Cloudflare origin cert / API token.
См. `CLOUDFLARE_NAMED_TUNNEL_SETUP.md` и `DNS_MIGRATION_INVENTORY.md`.
@@ -40,7 +40,7 @@ dig NS arhipovdan.ru +short # ns1.reg.ru. ns2.reg.ru.
| Egress IP хоста (ipify) | `185.160.137.162` (совпадает с A) |
| `127.0.0.1:80` / `:443` на хосте | **closed** |
| `185.160.137.162:80` / `:443` | **open**, отвечает **openresty** |
| `127.0.0.1:3100` | **open**, `owl-web-1` nginx → `index-ncgt6PBL.js` |
| `127.0.0.1:3100` | **open**, `owl-web-1` nginx → `index-AagIOJbd.js` / `version.json` → `4fcce5b` |
Вывод: порт-форвард / другой хост за тем же публичным IP принимает 80/443. Это **не** namespace текущего Docker host listener set (на host net видны лишь `:3100` и `:8082`).
@@ -62,7 +62,7 @@ dig NS arhipovdan.ru +short # ns1.reg.ru. ns2.reg.ru.
| Process | `/usr/local/bin/cloudflared tunnel --url http://127.0.0.1:3100` (pid в coder) |
| Named Tunnel | **не найден** (нет systemd unit, нет config.yml credentials) |
| Permanent ingress for arhipovdan.ru | **отсутствует** |
| Working public URL | `https://invitations-based-characters-accent.trycloudflare.com/` → bundle `index-ncgt6PBL.js` |
| Working public URL | `https://invitations-based-characters-accent.trycloudflare.com/` → `version.json` → `4fcce5b` |
Quick Tunnel **не** является завершённым production DNS-решением.
@@ -75,8 +75,8 @@ Quick Tunnel **не** является завершённым production DNS-р
## Что было исправлено в коде/инфре приложения
- Production container уже отдаёт `index-ncgt6PBL.js` на `:3100`.
- Добавлены диагностика, production smoke script, документация (этот файл).
- Production container отдаёт `index-AagIOJbd.js` + `/version.json` на `:3100` (commit `4fcce5b`).
- Добавлены диагностика, Named Tunnel prep docs, production smoke с `EXPECTED_COMMIT`, DNS inventory.
- DNS/openresty **не** изменялись из этого окружения (нет доступа к REG.RU и к openresty vhost).
## Действия пользователя (точные)
@@ -94,8 +94,8 @@ Quick Tunnel **не** является завершённым production DNS-р
```bash
dig A arhipovdan.ru +short
curl -I https://arhipovdan.ru/
curl -s https://arhipovdan.ru/ | grep -Eo 'index-[A-Za-z0-9_-]+\.js'
# ожидается: index-ncgt6PBL.js
curl -s https://arhipovdan.ru/version.json
# ожидается: "commit": "4fcce5b" (или актуальный production SHA)
```
### Вариант 2 — починить openresty на том, кто слушает 185.160.137.162:80/443
@@ -120,7 +120,7 @@ Proxy status: DNS only (если не Cloudflare) или Proxied (если Cloud
```bash
curl -I https://arhipovdan.ru/
curl -I https://arhipovdan.ru/details
curl -I https://arhipovdan.ru/assets/index-ncgt6PBL.js
curl -s https://arhipovdan.ru/version.json
curl -s https://arhipovdan.ru/ | grep -Eo 'index-[A-Za-z0-9_-]+\.js'
PLAYWRIGHT_BASE_URL=https://arhipovdan.ru/ npm run test:e2e:production
PLAYWRIGHT_BASE_URL=https://arhipovdan.ru EXPECTED_COMMIT=4fcce5b npm run test:e2e:production
```

View File

@@ -13,7 +13,7 @@
| ID | Риск | Вероятность | Влияние | Статус | Митигация |
| -- | ---- | ----------- | ------- | ------ | --------- |
| R01 | Production :3100 / arhipovdan.ru | Medium | Critical | Partially mitigated | Local+tunnel on `16e7930`+version.json; domain still BLOCKED_EXTERNAL |
| R01 | Production :3100 / arhipovdan.ru | Medium | Critical | Partially mitigated | Local+tunnel on `4fcce5b`+version.json; domain still BLOCKED_EXTERNAL |
| R18 | Tunnel/cloudflared outage / permanent DNS | High | Critical | Open | Quick Tunnel kept; Named Tunnel needs CF login — `CLOUDFLARE_NAMED_TUNNEL_SETUP.md` |
| R21 | Hardware GPU baseline недоступен в coder | High | Medium | Accepted | `BLOCKED_BY_DISPLAY_ENVIRONMENT`; portable `perf:browser` |
| R22 | DNS NS cutover теряет MX/TXT | Medium | High | Open | `DNS_MIGRATION_INVENTORY.md` — check REG.RU panel before NS change |

View File

@@ -2,7 +2,7 @@ import { test, expect } from '@playwright/test';
/**
* Production smoke — manual only:
* PLAYWRIGHT_BASE_URL=http://127.0.0.1:3100 EXPECTED_COMMIT=16e7930 npm run test:e2e:production
* PLAYWRIGHT_BASE_URL=http://127.0.0.1:3100 EXPECTED_COMMIT=4fcce5b npm run test:e2e:production
*/
test.describe('production smoke @production', () => {
test('version, routes, controls, safety, webgl', async ({ page }) => {