QA-дашборд — Космоквест

Сгенерировано: 2026-10-15T17:02:16.637Z · коммит 26ebdb0 · контур: dev / prod / atlas

Сводка

125/125
всех проверок пройдено
57/57
unit (vitest)
44/44
e2e (playwright ×3 проекта)
14/14
контент + APK
6/6
живые URL (HTTP)
Перезапуск всего контура: cd .04-Src/01-Frontend && npm run qa — прогоняет gate, tsc, 57 unit, 41 e2e (chromium + Android-app-режим + атлас), статические проверки контента/APK, HTTP-проверки живых сред; затем собирает эту страницу. Функциональный чеклист ниже связывает каждый элемент UI с автотестом или помечает «ручн.».

Функциональный чеклист — «прокликать всё»

Каждый элемент интерфейса → что проверить → чем покрыто → живая ссылка для ручного тыка. Статус PASS = покрывающий автотест зелёный.
ГруппаЭлемент / проверкаПокрытиеСтатусПроверить вживую
Меню«Начать новую игру» — старт сцены 0TC-02bPASSоткрыть
Меню«Продолжить» при сейве — главная кнопка, ведёт на сохранённую сценуUX-01PASSоткрыть
Меню«Начать» при сейве → диалог перезаписи (Да/Нет)UX-02PASSоткрыть
Меню«Карта пройденного» появляется после финала, прыжок на сценуUX-08PASSоткрыть
Меню«Словарь» — экран терминовUX-06PASSоткрыть
Меню«Настройки» / «О проекте» — экраны адресуемы историейNAV-06PASSоткрыть
МенюHero-арт меню (фон сцены 0, blur)TC-06PASSоткрыть
Первый запускЭкран выбора языка показывается один разUX-07PASSоткрыть
СценаТекст сцены рендерится без запрещённой разметкиTC-03PASSоткрыть
СценаАрт сцены загружается (webp)TC-17PASSоткрыть
СценаКнопки выборов ≥ tap-target, не вылезают за панельTC-16bPASSоткрыть
СценаПереход по выбору; browser back возвращает prev-сценуNAV-03PASSоткрыть
СценаЧип «Глава N» на сцене; нет на прологеUX-04PASSоткрыть
СценаТермин-ссылка → модалка глоссарияUX-06PASSоткрыть
Сцена🔊-тумблер + миг-подсказка до первого включенияUX-05PASSоткрыть
СценаНет горизонтального overflow (mobile/desktop)TC-16PASSоткрыть
ГибельПервая гибель → поддерживающий хинт; вторая — безDTH-01PASSоткрыть
Гибель«Попробуй ещё раз» ведёт к главеDTH-02PASSоткрыть
ГибельХинт персистентен после reloadDTH-03PASSоткрыть
НастройкиТемы ×4 (system/dark/light/cosmos) — кнопки переключаютTC-21PASSоткрыть
НастройкиСлайдер размера шрифта — persist после reloadUX-03PASSоткрыть
НастройкиСлайдер громкости + выбор мелодииmanualРУЧН.открыть
НастройкиСелект языка: смена ru→en без потери позицииTC-07PASSоткрыть
ФиналСцена 27.3 + кнопка оценки → Google Play (web: https)Б5.4РУЧН.открыть
О проектеСсылки web/privacy открываются; privacy.html = 200Б5PASSоткрыть
НавигацияRefresh на ?scene=N восстанавливает сценуNAV-05PASSоткрыть
Навигация?atlas редиректит на kq-atlas.pages.devNAV-07PASSоткрыть
Атласtree→scene: back/forward истории; grid⇄treeATL-01PASSоткрыть
Языки ×10Обход 111 сцен без ошибок на каждом языкеTC-06PASSоткрыть
Языки ×10CJK-глифы не tofu (zh/ja)TC-17PASSоткрыть
a11yaxe: 0 critical/serious (dark/light/choices/экраны)TC-21PASSоткрыть
ОффлайнWeb: бандл self-contained; APK: все ассеты внутриA-02PASSоткрыть
APKplatform=app: store_url=market://, обход 111 сценВ4PASSоткрыть

E2E-автотесты (Playwright) — 44/44

Проекты: chromium (прод-бандл 4173) · app (Android-режим 4174) · atlas (4175). Файлы: tests/e2e/*.spec.ts
IDТестСпек [проект]СтатусВремя
TC-21TC-21 a11y axe dark-тема: 0 critical/seriousa11y.spec.ts [chromium]PASS16.9с
TC-21TC-21 a11y axe light-тема: 0 critical/seriousa11y.spec.ts [chromium]PASS7.1с
TC-21TC-21 a11y axe сцена сChoices + image (игровой экран): 0 critical/seriousa11y.spec.ts [chromium]PASS5.1с
TC-21TC-21 a11y axe экран settings: 0 critical/seriousa11y.spec.ts [chromium]PASS2.9с
TC-21TC-21 a11y axe экран about: 0 critical/seriousa11y.spec.ts [chromium]PASS2.9с
TC-21TC-21 a11y axe экран death: 0 critical/seriousa11y.spec.ts [chromium]PASS2.5с
TC-21TC-21 a11y axe экран final: 0 critical/seriousa11y.spec.ts [chromium]PASS2.4с
FIX-1FIX-1 превью настроек меняется при смене схемыbugcheck.spec.ts [chromium]PASS13.4с
FIX-2FIX-2 трёхуровневый SFX: пульсар верный / warp петля / whoosh гибельbugcheck.spec.ts [chromium]PASS8.6с
FIX-3FIX-3 Чередовать: по ended играет music-2, потом обратно music-1bugcheck.spec.ts [chromium]PASS3.3с
DTH-01DTH-01 death-hint: первая гибель — подсказка, вторая — без неёdeath.spec.ts [chromium]PASS17.4с
DTH-02DTH-02 death-retry: «Попробуй ещё раз» ведёт к главе главыdeath.spec.ts [chromium]PASS3.3с
DTH-03DTH-03 death-hint персистент: после reload хинта уже нетdeath.spec.ts [chromium]PASS4.5с
TC-05TC-05 autoplay обходит все 111 сцен без ошибокgate.spec.ts [chromium]PASS13.8с
TC-03TC-03 текст движка = text/ru.json (плейсхолдеры → URL)gate.spec.ts [chromium]PASS9.5с
TC-06TC-06 render-smoke: граф идентичен, экраны не в ошибкеgate.spec.ts [chromium]PASS1.9с
TC-02bTC-02b меню: старт-сцена рисуется, Продолжить скрыт без сейваgate.spec.ts [chromium]PASS2.6с
TC-06TC-06 render-smoke ×языки: каждый собранный язык обходит 111 сцен без ошибокi18n.spec.ts [chromium]PASS24.7с
TC-07TC-07 смена языка ru→en без потери позиции и сейваi18n.spec.ts [chromium]PASS3.1с
TC-16TC-16 DOM-layout: scene-text рендерится, нет горизонтального overflowlayout.spec.ts [chromium]PASS15.2с
TC-16bTC-16b choices: кнопки не сжаты ниже tap-target и не вылезают за панельlayout.spec.ts [chromium]PASS6.3с
TC-17TC-17 PNG-сцен ≥20: рендер и запись без ошибокlayout.spec.ts [chromium]PASS9.1с
TC-17TC-17 tofu zh/ja: глифы CJK отличается от replacement-char (иначе env-limited)layout.spec.ts [chromium]PASS0.9с
NAV-03NAV-03 scene→choice→back: prev-сцена через браузерный backnav.spec.ts [chromium]PASS14.9с
NAV-05NAV-05 refresh на ?scene=13 восстанавливает ту же сценуnav.spec.ts [chromium]PASS5.1с
NAV-06NAV-06 меню→настройки→back: экраны адресуемы историейnav.spec.ts [chromium]PASS4.9с
NAV-07NAV-07 ?atlas редиректит на kq-atlas.pages.devnav.spec.ts [chromium]PASS1.8с
UX-01UX-01 continue: Продолжить ведёт на сохранённую сценуux.spec.ts [chromium]PASS17.3с
UX-02UX-02 overwrite: Начать при сейве спрашивает диалогомux.spec.ts [chromium]PASS6.8с
UX-03UX-03 persist: размер шрифта сохраняется после reloadux.spec.ts [chromium]PASS3.8с
UX-04UX-04 chapter-chip: глава на сцене, нет на прологеux.spec.ts [chromium]PASS2.0с
UX-05UX-05 sound-hint: 🔇 пульсирует до включенияux.spec.ts [chromium]PASS1.6с
UX-06UX-06 glossary: термин в сцене → модалка; экран словаряux.spec.ts [chromium]PASS1.7с
UX-07UX-07 langpick: первый запуск показывает выбор языкаux.spec.ts [chromium]PASS1.6с
UX-08UX-08 map: после финала в меню есть карта, прыжок на сценуux.spec.ts [chromium]PASS2.1с
Б5Б5 preview: /=200, /privacy.html=200, /_headers-статика, __test естьweb.spec.ts [chromium]PASS2.5с
Б5.4Б5.4 web-режим: platform=web, store_url резолвится в https Playweb.spec.ts [chromium]PASS1.8с
В4В4 app-smoke: __test.platform()==="app"app-smoke.spec.ts [app]PASS0.8с
В4В4 app-smoke: платформенный store_url = market:// (app-ветка)app-smoke.spec.ts [app]PASS0.7с
В4В4 app-smoke: обход 111 сцен без ошибок в app-режимеapp-smoke.spec.ts [app]PASS1.3с
ATL-01ATL-01 tree→scene: back возвращает дерево, forward — сцену (кросс-домен)atlas.spec.ts [atlas]PASS2.2с
ATL-02ATL-02 все элементы атласа — реальные ссылки с hrefatlas.spec.ts [atlas]PASS1.0с
ATL-03ATL-03 ctrl+click открывает сцену в новой вкладкеatlas.spec.ts [atlas]PASS1.3с
ATL-04ATL-04 grid⇄tree: view-параметр адресуем историейatlas.spec.ts [atlas]PASS1.2с

Unit-тесты (Vitest) — 57/57

Файлы: tests/unit/*.test.ts — граф сцен, i18n-паритет ×10, контент-разметка
раскрыть все 57 unit-тестов
ТестФайлСтатусВремя
app.store_url = market:// (Android-обёртка)content.test.tsPASS3.0682999999999083мс
app.store_url_web = https Play (веб/CF Pages)content.test.tsPASS0.5223000000000866мс
privacy/web/compare — https, ads_enabled=falsecontent.test.tsPASS0.5337000000001808мс
одинаковое число вершин (111)graph.test.tsPASS2.761299999999892мс
одинаковый набор idgraph.test.tsPASS2.1304000000000087мс
одинаковый набор рёбер (171)graph.test.tsPASS2.374200000000201мс
один и тот же стартgraph.test.tsPASS1.2079000000001088мс
терминалы совпадают (final/без выбора)graph.test.tsPASS1.2144000000000688мс
нет висячих ссылокgraph.test.tsPASS9.18119999999999мс
все 171 рёбра покрываются, все 111 достижимы из стартаgraph.test.tsPASS11.139599999999973мс
точное совпадениеi18n.test.tsPASS2.5120999999999185мс
базовый префикс (en-US → en)i18n.test.tsPASS0.5961999999999534мс
диалект uk → rui18n.test.tsPASS0.5774999999998727мс
pt → pt-BR если доступноi18n.test.tsPASS0.3293999999998505мс
pt → pt-BR нет → fallback eni18n.test.tsPASS0.34580000000005384мс
неизвестный → fallback eni18n.test.tsPASS0.48500000000012733мс
autonymKey нормализует дефисi18n.test.tsPASS0.686200000000099мс
есть как минимум ru + eni18n.test.tsPASS2.772999999999911мс
de: текст всех 111 сцен без запрещённой разметкиi18n.test.tsPASS92.97879999999986мс
de: набор id = scenes (111) и cid-паритетi18n.test.tsPASS4.3310999999998785мс
de: паритет {…}-плейсхолдеров vs ru (body + choices)i18n.test.tsPASS12.53710000000001мс
de: ui-ключи = ru, автонимы канон (не переведены)i18n.test.tsPASS1.892699999999877мс
en: текст всех 111 сцен без запрещённой разметкиi18n.test.tsPASS74.68489999999997мс
en: набор id = scenes (111) и cid-паритетi18n.test.tsPASS4.623900000000049мс
en: паритет {…}-плейсхолдеров vs ru (body + choices)i18n.test.tsPASS8.380200000000059мс
en: ui-ключи = ru, автонимы канон (не переведены)i18n.test.tsPASS1.6971000000000913мс
es: текст всех 111 сцен без запрещённой разметкиi18n.test.tsPASS102.20979999999986мс
es: набор id = scenes (111) и cid-паритетi18n.test.tsPASS5.585199999999986мс
es: паритет {…}-плейсхолдеров vs ru (body + choices)i18n.test.tsPASS15.605999999999995мс
es: ui-ключи = ru, автонимы канон (не переведены)i18n.test.tsPASS0.9058999999999742мс
fr: текст всех 111 сцен без запрещённой разметкиi18n.test.tsPASS75.00340000000006мс
fr: набор id = scenes (111) и cid-паритетi18n.test.tsPASS3.460499999999911мс
fr: паритет {…}-плейсхолдеров vs ru (body + choices)i18n.test.tsPASS11.542100000000119мс
fr: ui-ключи = ru, автонимы канон (не переведены)i18n.test.tsPASS1.2413000000001375мс
id: текст всех 111 сцен без запрещённой разметкиi18n.test.tsPASS79.58249999999998мс
id: набор id = scenes (111) и cid-паритетi18n.test.tsPASS3.643000000000029мс
id: паритет {…}-плейсхолдеров vs ru (body + choices)i18n.test.tsPASS7.630100000000084мс
id: ui-ключи = ru, автонимы канон (не переведены)i18n.test.tsPASS1.2714000000000851мс
ja: текст всех 111 сцен без запрещённой разметкиi18n.test.tsPASS83.55169999999998мс
ja: набор id = scenes (111) и cid-паритетi18n.test.tsPASS3.8922999999999774мс
ja: паритет {…}-плейсхолдеров vs ru (body + choices)i18n.test.tsPASS20.967300000000023мс
ja: ui-ключи = ru, автонимы канон (не переведены)i18n.test.tsPASS10.260299999999916мс
pt-BR: текст всех 111 сцен без запрещённой разметкиi18n.test.tsPASS59.33400000000006мс
pt-BR: набор id = scenes (111) и cid-паритетi18n.test.tsPASS4.030500000000302мс
pt-BR: паритет {…}-плейсхолдеров vs ru (body + choices)i18n.test.tsPASS6.537500000000364мс
pt-BR: ui-ключи = ru, автонимы канон (не переведены)i18n.test.tsPASS1.0648000000001048мс
ru: текст всех 111 сцен без запрещённой разметкиi18n.test.tsPASS66.47859999999991мс
ru: набор id = scenes (111) и cid-паритетi18n.test.tsPASS22.940100000000257мс
tr: текст всех 111 сцен без запрещённой разметкиi18n.test.tsPASS48.865999999999985мс
tr: набор id = scenes (111) и cid-паритетi18n.test.tsPASS2.8571999999999207мс
tr: паритет {…}-плейсхолдеров vs ru (body + choices)i18n.test.tsPASS6.2283000000002176мс
tr: ui-ключи = ru, автонимы канон (не переведены)i18n.test.tsPASS0.9850000000001273мс
zh-CN: текст всех 111 сцен без запрещённой разметкиi18n.test.tsPASS55.537300000000414мс
zh-CN: набор id = scenes (111) и cid-паритетi18n.test.tsPASS3.4985999999998967мс
zh-CN: паритет {…}-плейсхолдеров vs ru (body + choices)i18n.test.tsPASS7.229099999999562мс
zh-CN: ui-ключи = ru, автонимы канон (не переведены)i18n.test.tsPASS1.0707000000002154мс
app.langs ⊇ собранные (остальные pending — допустимо)i18n.test.tsPASS0.998700000000099мс

Контент и APK — 14/14

IDПроверкаСтатусДетали
C-01Сцены: ровно 111 узловPASS111 узлов
C-02Рёбра графа: 171 переходPASS171 рёбер
C-03Локали: 10 файлов text/<lang>.jsonPASSde, en, es, fr, id, ja, pt-BR, ru, tr, zh-CN
C-04app.json: langs ⊇ собранныеPASSapp.langs=[en,es,pt-BR,fr,de,ru,zh-CN,ja,tr,id]
C-05Ключи сцен: паритет всех локалей к ru (111)PASS111 ключей × все языки
C-06UI-строки: паритет всех ui/<lang>.json к ruPASS62 ключей × все языки
C-07Разметка: нет запрещённых тегов в телах сцен (все языки)PASSчисто
C-08Арт: все уникальные webp собраны в dist/web/assetsPASS129 собрано / 100 уникальных (96 имён — арт переиспользуется между сценами)
C-09Звуки: ≥10 sfx в dist/web/sfxPASS20 файлов
C-10Глоссарий: файл терминов существует и непустойPASS1 терминов в glossary.ts
A-01APK: файл существует и > 1 МБPASSkosmoquest-debug-2.0.0-20261015b.apk, 16.8 МБ, 2026-10-15
A-02APK: весь арт внутри (webp = уникальным исходникам)PASS129 webp в assets/public
A-03APK: звуки внутри (≥11 m4a: sfx+музыка)PASS25 m4a
A-04APK: index.html бандла внутриPASSassets/public/index.html есть
APK: kosmoquest-debug-2.0.0-20261015b.apk · 16.8 МБ · 2026-10-15 · арт: 129 webp · звуки: 25 · установка/смоук на живом устройстве — ручной шаг (см. чеклист «APK»)

Живые окружения — 6/6

ПроверкаURLHTTPСтатусВремя
prod /https://kosmoquest.pages.dev/200PASS1214мс
prod /humor-tree → редиректhttps://kosmoquest.pages.dev/humor-tree200PASS1371мс
dev / (хаб)https://kq-dev.pages.dev/200PASS1674мс
dev /play (игра)https://kq-dev.pages.dev/play200PASS880мс
dev /humor-treehttps://kq-dev.pages.dev/humor-tree200PASS769мс
atlas /https://kq-atlas.pages.dev/200PASS761мс

Сьюты команд

IDКомандаСтатусВремяДетали
gateГейт: convert + validate + reconcilePASS2.4с
typecheckTypeScript --noEmitPASS8.2с
unitVitest unitPASS10.1с
e2ePlaywright e2e (chromium + app + atlas)PASS109.7с
Что НЕ покрыто автоматом (честно): установка и прокликивание APK на живом Android-устройстве, звук на слух, визуальная красота на глаз — это ручные шаги. Полный визуальный просмотр всех 111 экранов: дерево экранов.