Публикация сайта документации
Документация движка. Эта страница определяет, как Markdown-корпус FOnline предварительно просматривается, проверяется и публикуется через существующий маршрут GitHub Pages.
Шаблон включает корневой VERSION стандартным тегом Jekyll include; includes_dir: . делает этот единственный источник доступным и локальной сборке, и обычной сборке GitHub Pages. Копия версии и подготовительный шаг не нужны. Публикуйте /VERSION побайтно вместе с /docs-manifest.json; отчёты маршрутов и переводов хранятся в разделах этого общего индекса.
Аннотации результатов поиска ограничены 224 символами вместе с многоточием и сокращаются по границе слова. Поисковые слова и оценки полного документа сохраняются; лимит байтов индекса прежний.
Назначение
Используйте эту страницу при изменении Docs/Site/_config.yml, слоя рендеринга документации, custom domain или documentation jobs в GitHub Actions. Она не разрешает создавать отдельное приложение документации или второе дерево контента: canonical source остаётся Markdown в репозитории.
Проверенные исходные пути
Docs/Site/_config.ymlBuildTools/docs_prepare.pyBuildTools/docs_site_build.pyBuildTools/documentation_metadata.pyBuildTools/tests/test_docs_site_build.py.gitignore.github/workflows/validate.ymlDocs/documentation-manifest.jsonBuildTools/docs_ai_delivery.pyBuildTools/tests/test_docs_ai_delivery.pyBuildTools/docs_ai_eval.pyBuildTools/tests/test_docs_ai_eval.pyBuildTools/SnippetPolicy.jsonBuildTools/docs_snippets.pyBuildTools/tests/test_docs_snippets.pyBuildTools/DocumentationDiagrams.jsonBuildTools/docs_diagrams.pyBuildTools/tests/test_docs_diagrams.pyBuildTools/DocumentationScreenshots.jsonBuildTools/docs_screenshots.pyBuildTools/tests/test_docs_screenshots.pyBuildTools/docs_site.pyBuildTools/tests/test_docs_site.pyBuildTools/tests/test_docs_site_layout.pyBuildTools/docs_site_artifact.pyBuildTools/tests/test_docs_site_artifact.pyDocs/Site/Layouts/default.htmlDocs/Site/Assets/css/docs.cssDocs/Site/Assets/js/docs.jsDocs/Site/Assets/images/fonline-mark.svgDocs/Site/Data/docs-site.jsonDocs/Site/Assets/docs-search.jsonDocs/Site/Assets/docs-search.ru.jsondocs-manifest.json#/routingDocs/ai-evaluation.jsonDocs/generated/ai-evaluation-report.jsonDocs/generated/snippets.jsonDocs/generated/diagrams.jsonDocs/assets/diagrams/Docs/generated/screenshots.jsonDocs/assets/screenshots/llms.txtllms-full.txtdocs-manifest.jsonDocs/en/contributing/decisions/0001-github-pages-markdown-publication.mdDocs/en/contributing/decisions/0003-manifest-backed-ai-documentation-delivery.mdDocs/en/contributing/decisions/0004-manifest-backed-site-navigation-search.mdDocs/en/contributing/decisions/0006-documentation-version-locale-routing.md
Production contract
Перед Jekyll выполните python BuildTools/docs_prepare.py. Двенадцать производных файлов игнорируются Git: оба endpoints llms, общий manifest, навигация, поиск и каталоги проверок. Модели публичных контрактов, авторский Markdown, проверенные исходники изображений и переводы остаются версионируемыми. Агенту с чистым checkout файлы llms не нужны: AGENTS.md направляет его к исходным руководствам.
Production получает проверенный артефакт documentation-site; documentation-publish публикует его только при push в master репозитория cvet/fonline, после проверки версии и документации. PR и release branches создают артефакты для просмотра. 2026-10-09 владелец выбрал Settings → Pages → Build and deployment → Source → GitHub Actions; аутентифицированный Pages API подтвердил build_type: workflow и cname: fonline.ru. Первый deploy нового workflow ещё необходимо проверить после публикации. Прежняя сборка из ветки не выполняет Python-подготовку; генерируемый CNAME, домен и публичные URL сохраняют прежний смысл.
| Задача | Контракт |
|---|---|
| Canonical content | Versioned Markdown в этом репозитории |
| Production provider | GitHub Pages |
| Renderer | Jekyll, совместимый с GitHub Pages |
| Production URL | https://fonline.ru |
| Источник custom domain | publishing.domain исходного manifest, экспортируемый как CNAME |
| Конфигурация сайта | Docs/Site/_config.yml |
| Rendering layer | Только поддерживаемые GitHub Pages themes, plugins, layouts, includes, data и static assets |
| Навигация читателя | Generated Docs/Site/Data/docs-site.json, используемый default layout репозитория |
| Static search | Generated locale-scoped Docs/Site/Assets/docs-search.json и Docs/Site/Assets/docs-search.ru.json, полностью выполняемые в браузере |
| Обучающие диаграммы | Source-owned local SVG в Docs/assets/diagrams/ с provenance и hashes в Docs/generated/diagrams.json |
| Скриншоты инструментов | Source-owned local PNG в Docs/assets/screenshots/ с environment, interactions, source/image hashes и recapture triggers в Docs/generated/screenshots.json |
| Карта version, locale и routes | Generated docs-manifest.json#/routing, выведенный из stable document IDs и manifest targets |
| Review output | Commit-addressable Workspace/DocumentationSite artifact и rendered-site validation report из GitHub Actions |
| AI delivery | Публичный корневой llms.txt, ограниченный llms-full.txt, public docs-manifest.json, deterministic AI evaluation и complete snippet coverage reports |
Маршрут публикации намеренно не зависит от подключаемого игрового проекта. Last Frontier, TLA и public example games могут ссылаться на этот сайт, но не собирают и не определяют его.
Размещение исходников сайта
Реализация сайта находится в Docs/Site/: Layouts/ содержит HTML-шаблон,
Data/ — сгенерированную навигацию, а Assets/ — стили, скрипты, логотип и
поисковые индексы локалей. В Docs/Site/_config.yml заданы
layouts_dir: Docs/Site/Layouts и data_dir: Docs/Site/Data; оба служебных
каталога исключены из опубликованного дерева. URL статических ресурсов
используют /Docs/Site/Assets/ и проверяются по тому же манифесту.
Jekyll читает канонический Markdown из корня репозитория с явным путём
конфигурации. BuildTools/docs_prepare.py создаёт Gemfile, .ruby-version
и CNAME из версий зависимостей и домена исходного manifest, вместе с
llms.txt, llms-full.txt и docs-manifest.json, в игнорируемом
Workspace/Documentation/. Настройки Bundler и Gemfile.lock также находятся
там. Версионируемых копий этих файлов в корне репозитория нет.
BuildTools/docs_site_build.py подготавливает входные файлы, собирает сайт в
Workspace/DocumentationSite/ и экспортирует три публичных endpoint и CNAME
в корень результата. Публичные URL и логические пути артефактов manifest
сохраняются. Изменения структуры требуют одновременного обновления генераторов,
сведений об исходниках, переводов и проверок собранного сайта.
GitHub Pages использует jekyll-readme-index, который обычно превращает route вложенного README.md в directory index. Поэтому семь public root/subsystem/example READMEs закрепляют manifest-owned .html routes коротким YAML front matter. Docs/Site/_config.yml исключает local build trees, third-party inputs, private example governance templates и BuildTools subtrees без public pages, сохраняя source files, на которые ссылается документация. Удаление pinned permalink создаёт обещанный каталогом, но не отрендеренный Jekyll route и проваливает source-level и post-build validation.
Каталоги managed bin и obj внутри Source/Scripting/Managed/ содержат результаты сборки на любой глубине проекта. Исключайте их шаблонами каталогов без завершающего слеша; аудит артефакта отклоняет опубликованные файлы внутри них, сохраняя авторские исходники.
Обычные index.md используют canonical directory URL Jekyll (/path/), хотя artifact остаётся /path/index.html. BuildTools/docs_site.py записывает directory form в navigation, search, locale reservations и route catalog, чтобы canonical tags и published links совпадали с GitHub Pages.
Записи документов манифеста с visibility: internal и сгенерированные
артефакты с такой же видимостью являются только внутренними доказательствами
для сопровождающих. Docs/Site/_config.yml должен исключать их канонические пути и пути
репозиторных указателей из GitHub Pages, а BuildTools/docs_ai_delivery.py не
должен включать внутренние модели в публичный AI-пакет.
BuildTools/docs_site_artifact.py отклоняет собранный артефакт, если в нём
присутствует любой вариант внутреннего Markdown, JSON, index или
отрендеренного HTML. Публичная документация может вести сопровождающих к этим
файлам через URL исходника GitHub, но не должна обещать для них маршрут на
основном домене.
Навигация читателя и статический поиск
Public site оборачивает обычный Markdown, отрендеренный Jekyll, в Docs/Site/Layouts/default.html. Layout добавляет persistent desktop sidebar, mobile navigation, page-local table of contents, source link, code-copy controls, light/dark preference, ссылку CalVer движка на историю изменений выбранного языка и EN/RU switch для текущих locale pairs. Метка Current и подсказка сохраняют идентичность обновляемого канала master. Markdown остаётся полным и читаемым при открытии непосредственно в GitHub; layout не владеет технической prose. Правила версий движка задают источник VERSION; генерируемые манифесты сайта, маршрутов и данных для ИИ содержат его в объекте engine отдельно от version канала документации.
Docs/documentation-manifest.json задаёт navigation groups через stable document ID. BuildTools/docs_site.py разрешает ID в текущие titles и paths и записывает:
| Артефакт | Содержимое |
|---|---|
Docs/Site/Data/docs-site.json |
Site identity, repository/source ref, localized navigation groups, resolved public Markdown routes и current stable-ID locale pairs |
Docs/Site/Assets/docs-search.json |
Compact weighted English token postings и result metadata для каждого public current English human document |
Docs/Site/Assets/docs-search.ru.json |
Compact weighted Russian token postings и result metadata для каждого current translated human document |
docs-manifest.json#/routing |
Current public URLs, canonical future owners, planned English/Russian paths, route availability и required legacy redirects |
Каждая public current human top-level page должна ровно один раз входить в navigation. Generated detail pages не попадают в sidebar, но доступны в поиске через generated index pages. Internal plans, placeholders и AI-only maintainer routes отсутствуют в обеих reader surfaces.
Поиск использует только JavaScript репозитория и browser APIs. Нет hosted index, account, analytics dependency, remote script или server endpoint. Rendered page загружает только index активной локали, а results остаются в ней. Titles и headings имеют больший вес, чем body terms; полные technical identifiers и camel-case components остаются searchable. Чисто числовые components и terms, встречающиеся более чем в 60 процентах locale corpus, исключаются как неразличающие. Компактный JSON записывается как UTF-8 без разворачивания non-ASCII текста в escape-последовательности \\uXXXX, поэтому русский бюджет измеряет фактические байты текста. Source manifest независимо применяет reviewed hard limit 1,78125 MiB (1 867 776 байт) к каждому generated index. Лимит даёт ёмкость полному двуязычному corpus, но не разрешает исключать документы; при превышении любой локалью generation по-прежнему завершается fail-closed.
После изменения public Markdown membership, titles, paths, lifecycle state, migration targets, version/localization policy, navigation groups или search policy выполните:
python BuildTools/docs_site.py --write
python BuildTools/docs_site.py --check
При изменении visual, fenced или delivery layers сначала создайте diagrams и screenshot catalog, затем snippet report, translation status, site data, AI evaluation report и в конце AI delivery. Evaluation использует site search model, а public docs-manifest.json записывает hashes diagram, screenshot, snippet, machine model, evaluation, navigation, search и route catalog. Generated delivery data нельзя редактировать вручную. Presentation меняется в layout или local assets; ownership navigation/search/routing меняется в source manifest. Принятые границы описаны в проверке snippets, ADR-0004, ADR-0006, оценке документации для ИИ и процессе перевода.
Поиск игнорирует скрытые комментарии перевода и пустые HTML-якоря вне блоков и строк кода. Разметка якорей остаётся в исходной странице и маршрутах; видимый текст и стабильные ID доступны для поиска. Примеры самой разметки индексируются.
Миграция версий, локалей и маршрутов
Unversioned production site является каналом current. Он следует rolling master, а layout помечает его Current; это не утверждение, что master является стабильным релизом. Historical review использует repository revisions и commit-addressable Workspace/DocumentationSite artifacts.
Tagged release snapshots намеренно отложены. Manifest резервирует /versions/{version}/, но release page не генерируется до появления immutable supported tags, support matrix и approved follow-up decision. VERSION, branch или reachable tag не должны неявно создавать supported documentation line.
Localization policy также принадлежит исходному коду:
enявляется canonical; принадлежащие манифесту страницы используют текущие пути вDocs/en/или явно заданные README-точки входа репозитория и подсистем;ruявляется полным зеркалом; в этой ревизии все обязательные соответствия защищены fail-closed проверкой паритета;- paths в
Docs/en/прямо зеркалируются вDocs/ru/; - root и subsystem README pages используют explicit pairs, например
README.mdиREADME.ru.md; BuildTools/docs_localization.pyвычисляет normalized SHA-256 каждого canonical English source и отклоняет stale или mismatched Russian pages;docs-manifest.json#/translation_statusсообщает точное required/current/missing coverage;- stable-ID language switching и locale-scoped search активны для каждой обязательной пары; режим manifest enforcement равен
complete.
docs-manifest.json#/routing фиксирует migration map до перемещения файлов. Каждая public record содержит current route, planned canonical owner/path, locale paths и redirect requirement. Несколько legacy pages могут сходиться только к одному non-replace owner destination.
Каждый текущий маршрут объявляет current_locale, включая старые русские
страницы-указатели, у которых нет пары переводов. Проверки артефакта и браузера
используют это поле для проверки языка HTML. Указатель index.md закрепляет
permalink каталога, совпадающий с каталогом маршрутов.
Прежние плоские Markdown-файлы остаются долговечными указателями на канонические страницы, включая ссылки для старых якорей заголовков. Это сохраняет маршруты и в интерфейсе репозитория GitHub, и в Jekyll без сгенерированного HTML и дополнительного redirect-плагина. Сгенерированный реестр маршрутов отклоняет отсутствующих владельцев, коллизии маршрутов и устаревшие записи указателей.
Маршруты для ИИ и машинного чтения
Static site публикует три generated root endpoints, route catalog и current AI evaluation report рядом с обычным Markdown, отрендеренным Jekyll:
| Route | Назначение |
|---|---|
https://fonline.ru/llms.txt |
Краткая карта всех public current pages по типам Diataxis и canonical generated JSON models |
https://fonline.ru/llms-full.txt |
UTF-8/LF full-context bundle public current authored pages и generated reference indexes; политика размера — ai_delivery.full_context в манифесте документации |
https://fonline.ru/docs-manifest.json |
Public stable IDs, locale, owner, lifecycle state, canonical/source/raw URLs, provenance, byte size и SHA-256 hashes |
https://fonline.ru/docs-manifest.json#/routing |
Current/planned paths, version/locale policy, canonical target ownership и legacy redirects |
https://fonline.ru/Docs/generated/ai-evaluation-report.json |
Deterministic task-set identity, retrieval ranks, evidence checks, success rate, MRR и failures |
https://fonline.ru/Docs/generated/snippets.json |
Каждый public/current/human fenced block, owner/heading, parser harness, hash, template status, result и normative coverage |
https://fonline.ru/Docs/generated/diagrams.json |
Diagram IDs, documents, dimensions, alt/caption, source provenance, SVG paths и hashes |
https://fonline.ru/Docs/generated/screenshots.json |
Screenshot IDs, documents, dimensions, alt/caption, environment/interactions, provenance, recapture triggers и hashes |
Docs/documentation-manifest.json задаёт membership и policy. BuildTools/docs_ai_delivery.py отвечает только за deterministic projection; три outputs нельзя редактировать вручную. Каждая public document record содержит canonical human HTML URL на fonline.ru и привязанный к source_ref clean Markdown URL GitHub raw-content. llms.txt использует Markdown route и сохраняет HTML link. Текущий pipeline GitHub Pages/Jekyll 3.10 не может публиковать same-domain raw aliases без дублирования контента или custom plugin, поэтому такие aliases остаются задачей платформы публикации, а не ложным route claim. Generated reference detail pages доступны как Markdown и JSON, но full-context bundle включает их indexes без дублирования больших inventories.
После любого изменения inventoried Markdown или manifest выполните:
python BuildTools/docs_ai_delivery.py --write
python BuildTools/docs_ai_delivery.py --check
При изменении search model или AI task set выполняйте полную dependency chain:
python BuildTools/docs_diagrams.py --write
python BuildTools/docs_screenshots.py --write
python BuildTools/docs_snippets.py --write --external
python BuildTools/docs_localization.py --write
python BuildTools/docs_site.py --write
python BuildTools/docs_ai_eval.py --write
python BuildTools/docs_ai_eval.py --check
python BuildTools/docs_ai_delivery.py --write
python BuildTools/docs_ai_delivery.py --check
Generator завершается ошибкой, а не усечением, если context bundle превышает byte budget. Content hashes используют normalized LF text, поэтому output byte-identical на Windows и Linux. Эти routes помогают discovery и transport, но не переопределяют source precedence в manifest и не повышают internal Engine symbol до public API.
Проверенное публичное состояние
Состояние проверено 2026-07-10, повторно 2026-07-15 и 2026-08-01 по public state, а 2026-08-02 подтверждено через authenticated GitHub Pages API:
- Pages API сообщает status
built, source modelegacy, branchmasterи folder/. Custom domain равенfonline.ru, HTTPS enforcement включён. https://fonline.ru/и legacy index/Docs/возвращают HTTP 200. Representative generated routes/Docs/en/и/Docs/ru/возвращают 404, потому что documentation branch ещё не попала вmaster.CNAMEрепозитория содержитfonline.ru. Public IPv4 DNS возвращает четыре GitHub Pages addresses от185.199.108.153до185.199.111.153, аwww.fonline.ruявляется CNAME дляfonline.ru.- Последний Pages build для remote commit
masterfee50fb636b5bd1e30509aded929df1fc0e95db5завершился успешно. Сопутствующий legacy workflowvalidateупал в build lanes, не относящихся к документации, и ещё не содержит pending jobs документационного artifact/browser audit. - Для
_github-pages-challenge-cvet.fonline.ruотсутствует public TXT record. DNS routing подтверждён, но GitHub domain-ownership verification записана какnot-observed, а не выведена из работающего custom domain.
Docs/documentation-manifest.json записывает подтверждённый Pages source и отдельно нерешённое состояние ownership verification. Обновляйте audit date и значения только по authenticated settings/API evidence и public DNS, но не по одному rendered page. При посадке документационного корпуса не заменяйте существующий production route и не ослабляйте HTTPS.
DNS account names, registrar credentials, recovery codes и GitHub credentials не должны находиться в public repository. Operational ownership разделено между repository administrators и private domain-administration owner. Именованный account owner хранится в private operations inventory; репозиторий владеет только public domain contract и его validation.
Совместимое окружение
Исходный Docs/documentation-manifest.json задаёт Ruby 3.3.4, github-pages
232 и домен. Подготовка выводит из этих значений
Workspace/Documentation/.ruby-version, Gemfile и CNAME. CI использует
ruby/setup-ruby@v1 с working-directory: Workspace/Documentation и кэшем
Bundler, затем тот же Python-инструмент сборки, что используется локально.
Дополнительный плагин Jekyll не вводится.
Проверка браузера использует Node 24.16.0, Playwright 1.62.0 с Chromium
151.0.7922.34 и axe-core 4.12.1, закреплённые в manifest,
BuildTools/docs-browser/package.json и его lock-файле. Перед изменением
версии рендеринга сравните версии зависимостей GitHub Pages
и обновите исходный manifest. Обновление браузерных зависимостей требует точных
правок lock, focused tests и полной проверки маршрутов; не используйте latest в CI.
Workspace/Documentation/Gemfile.lock игнорируется согласно рекомендации
GitHub Pages. Точная версия github-pages задаёт границу совместимости.
Локальная сборка и предварительный просмотр
Установите Ruby указанной в исходном manifest версии и Bundler, затем из корня Engine выполните:
На Windows используйте RubyInstaller с Devkit/MSYS2. GitHub Pages bundle содержит native gems; bare Ruby archive может разрешить bundle, но не соберёт эти dependencies.
python BuildTools/docs_prepare.py --external
python BuildTools/docs_diagrams.py --check
python BuildTools/docs_screenshots.py --check
python BuildTools/docs_site.py --check
bundle install --gemfile Workspace/Documentation/Gemfile
python BuildTools/docs_site_build.py
python BuildTools/docs_site_artifact.py --site-dir Workspace/DocumentationSite
npm ci --prefix BuildTools/docs-browser
npx --prefix BuildTools/docs-browser playwright install chromium
npm --prefix BuildTools/docs-browser run audit
Rendered output находится в Workspace/DocumentationSite/, является disposable и ignored by git. Успешная сборка не содержит Jekyll/Liquid errors; Docs/Site/_config.yml включает strict front-matter parsing. Browser validation обслуживает Workspace/DocumentationSite/ только на ephemeral 127.0.0.1 port и пишет Workspace/docs-browser-audit-report.json и сохраняемый набор screenshots в Workspace/docs-browser-screenshots/. Она не обращается к production и не исполняет snippets.
Для interactive preview:
python -m http.server 4000 --bind 127.0.0.1 --directory Workspace/DocumentationSite
Откройте http://127.0.0.1:4000/. Остановите server перед переключением branch или сменой Ruby/Jekyll pin. Поддерживаемая GitHub процедура: Testing your GitHub Pages site locally with Jekyll.
Артефакт pull request
Job Build documentation site в .github/workflows/validate.yml запускается после быстрых standalone documentation checks. Он:
- Checkout точной pull-request или push revision.
- Запускает
BuildTools/docs_prepare.py, устанавливает заданные manifest зависимости Ruby/Bundler черезruby/setup-ruby@v1, затем выполняетBuildTools/docs_site_build.pyвWorkspace/DocumentationSite/. - Запускает
BuildTools/docs_site_artifact.pyна готовом дереве. - Устанавливает manifest-pinned Node, npm lock, Chromium revision и Linux browser libraries.
- Запускает
BuildTools/docs-browser/audit.mjsна том же дереве. - Загружает отдельные static-validation и browser-validation artifacts с JSON и screenshots.
- Загружает
documentation-site-<commit-sha>черезactions/upload-artifact@v4на 14 дней.
Static post-build gate требует каждый current route и available locale route из docs-manifest.json#/routing, проверяет byte-for-byte static AI/search/generated-model endpoints, canonical URLs, HTML language, один h1, skip/main landmarks, accessible image/button names, unique IDs, search targets и links к publishable local resources.
Browser gate посещает каждый catalog route в трёх profiles, принадлежащих manifest: desktop при 1440 x 1000 CSS pixels, mobile при 390 x 844 CSS pixels и zoom-200 при 640 x 512 CSS pixels с device scale factor 2. Последний profile моделирует физический viewport 1280 x 1024 при 200 percent browser zoom и требует compact navigation/reflow contract без mobile user agent. Страница не должна иметь выбранных WCAG 2.2 A/AA axe violations, page/console/request errors, undecoded images, clipped reading column, fixed-header/sidebar overlap или reachable page-level horizontal scroll. Interaction scenarios дополнительно проверяют keyboard skip navigation, English technical/prose search, native-dialog Escape, theme persistence, copy feedback, compact/mobile drawer semantics, focus containment/restoration, Russian search, html lang, active locale, все explicit README language pairs, exact paired-route switching, rendering архитектурной схемы и Content Showcase и русский reflow при 200 процентах. Сохраняемые screenshots включают responsive document/navigation states, все Russian README entry points, translated documents, архитектурную схему и материалы Content Showcase для каждого profile, а также zoom-200-russian-documentation.png с точным физическим размером 1280 x 1024 без изменения Pages deployment path.
Проверка архитектурной схемы ожидает декодирования изображений до измерения размеров и снятия скриншотов, используя тот же барьер, что и проверка маршрутов. Команда npm --prefix BuildTools/docs-browser run test:diagram проверяет задержанную ленивую загрузку SVG и отсутствующее изображение в профилях desktop, mobile и zoom-200; отсутствие изображения или ошибка декодирования по-прежнему проваливают аудит.
Automated axe results покрывают только machine-detectable criteria. Raw incomplete nodes остаются rule-level records с node/route counts и bounded examples. Если color-contrast incomplete вызван clipped text в scroll container, harness вычисляет effective colors с alpha composition, применяет WCAG relative-luminance formula и требует 4.5:1 или 3:1 для large text. Failed или unresolvable fallback проваливает route; raw и resolved counts остаются в report. Profile zoom-200 является детерминированным доказательством reflow, accessibility и screenshot для одного viewport, а не доказательством для каждого браузера, magnifier операционной системы, font override или production rendering difference. Green job не доказывает screen-reader behavior, cognitive accessibility, content clarity или production equivalence. Release review требует keyboard-only и representative assistive-technology checks на landed artifact и production domain.
Job проверяет и предварительно показывает production render. При push в master он загружает тот же проверенный tree как Pages artifact; зависимый documentation-publish публикует его с pages: write и id-token: write. Оба job не записывают source branch и не меняют DNS. PR не может попасть в deployment job.
Reviewers должны просмотреть каждый retained screenshot, включая отдельное русское изображение reflow при 200 процентах, затем интерактивно landing page и changed pages. Проверьте rolling version indicator, locale switch, page TOC, code blocks, tables, local assets, keyboard order и один screen-reader landmarks/headings pass. Перед выпуском повторите 200 percent zoom на landed artifact или production domain; локальный profile не заменяет проверку этой среды. Green source/artifact/axe check сам по себе не доказывает читаемость для каждого пользователя.
Три профиля проверки маршрутов выполняются параллельно в отдельных браузерных контекстах. У каждого своя страница, обработчики ошибок и счётчики доступности; результаты сохраняют порядок профилей из манифеста. Каждые 50 страниц выводится число проверенных маршрутов. Интерактивные сценарии выполняются после завершения всех трёх профилей.
Длинные неразрывные слова в обычном тексте переносятся по ширине колонки. Блоки кода сохраняют собственную горизонтальную прокрутку. Проверка геометрии использует мгновенную прокрутку, чтобы плавная прокрутка сайта не скрывала доступное читателю горизонтальное переполнение.
Проверка production
После попадания documentation change в configured Pages source:
- Убедитесь, что
Validate documentationиBuild documentation site, включая browser audit, зелёные для published commit. - Проверьте оба validation reports, каждый browser screenshot и commit-addressable site artifact до объяснения production difference поведением Pages.
- Откройте
https://fonline.ru/и English, Russian и legacy routes хотя бы одного migrated document. - Проверьте sidebar highlight и mobile usability.
- Найдите
Game.Syncиmap bakingна английском, затемигровой клиентна русском; results должны оставаться на canonical routes активной локали. - Проверьте HTTPS и сохранение
fonline.ruв browser. - Проверьте, что
CNAMEсодержит ровноfonline.ru. - Разрешите domain и подтвердите target GitHub Pages.
PowerShell DNS check:
Resolve-DnsName fonline.ru -Type A
POSIX DNS check:
dig +short fonline.ru A
Передайте mismatch и repository, и domain administrators. Не обходите Pages/DNS problem через committed generated HTML, смену canonical domain или alternate deployment workflow.
Контрольный список проверки
- Markdown остаётся canonical authored content.
- Исходный manifest,
Docs/Site/_config.yml, генерируемые входные файлыWorkspace/Documentation/и CI согласованы по publication contract. python BuildTools/tests/test_docs_validate.pyпроходит.python BuildTools/tests/test_docs_snippets.pyиpython BuildTools/docs_snippets.py --check --externalпроходят без выполнения команд.- Tests/checks diagrams, screenshots и site source/layout проходят с ownership/freshness и version/locale/route collision coverage.
python BuildTools/tests/test_docs_ai_eval.pyиpython BuildTools/docs_ai_eval.py --checkпроходят на том же search model.python BuildTools/tests/test_docs_ai_delivery.pyиpython BuildTools/docs_ai_delivery.py --checkпроходят.- Localization test/check проходят; production bilingual launch также использует
--enforce-complete. python BuildTools/docs_validate.pyпроходит.- Local или CI Jekyll build создаёт
Workspace/DocumentationSite/без errors со всеми AI routes, reports, navigation, search indexes, route catalog, layout и assets. - Site artifact test и
docs_site_artifact.py --site-dir Workspace/DocumentationSiteпроходят на rendered tree. - Browser unit test проходит, pinned npm dependencies установлены из lock, browser audit проходит каждый route во всех трёх manifest profiles и все interaction scenarios.
- Desktop, mobile и 200-percent reflow navigation, search, TOC, source link, theme, overflow, focus containment и screenshots проверены в artifact.
- Отдельный русский screenshot при 200 процентах просмотрен; manual keyboard, production-domain 200 percent zoom и representative screen-reader checks записаны для release candidate; axe incomplete nodes review выполнен.
- Site, static report, browser report и screenshot artifacts привязаны к exact reviewed commit.
- Production source settings и DNS не менялись без явного administrator review.