Доступность

В issue #232 было задано два вопроса, и эта страница дает на них ответы:

  1. Каковы здесь варианты поддержки людей с инвалидностью и что считается лучшей практикой?
  2. Каковы варианты сведения агентных вопросов и ответов (Q&A) к направляемым вопросам, которые следуют логике DMN и могут обслуживать несколько модальностей взаимодействия?

Оказывается, это один и тот же вопрос, заданный с двух сторон, поэтому они объединены на одной странице. Реализующий навык — interaction-modality.

  1. 1. Сбой, о котором идет речь
  2. 2. Варианты поддержки людей с инвалидностью — что реально доступно
    1. 2.1 Ограниченная функция рук / моторика
    2. 2.2 Слабое зрение
    3. 2.3 Аудио / голос
    4. 2.4 Когнитивная нагрузка и простой язык
    5. 2.5 Лучшая практика: конкретные стандарты для проверки
    6. 2.6 Что реализовано на сегодняшний день
    7. 2.7 Что еще не сделано
  3. 3. Сведение агентных вопросов и ответов к направляемым вопросам
    1. 3.1 Две вещи, которые кажутся одной
    2. 3.2 Четыре преимущества такого подхода
    3. 3.3 Варианты и цена каждого из них
    4. 3.4 Честно сформулированные ограничения
  4. См. также

1. Сбой, о котором идет речь

Агент, задавший хороший вопрос в непригодной для использования форме, не спросил ничего.

Обычно это выглядит так: длинный открытый запрос — «Расскажите о фолио, которое вы задумали, какие типы контента вы ожидаете и как вы хотели бы его организовать», — отправленный человеку, для которого ввод текста медленный и болезненный. Ответ приходит коротким. Агент воспринимает краткость как слабую вовлеченность и задает еще один открытый вопрос. Никто в этом диалоге не сделал ничего явно предосудительного, но разговор уже терпит крах.

У владельца этого репозитория сильно ограничена функция рук, поэтому здесь этот случай отнюдь не гипотетический. Но правило применимо ко всем безотносительно конкретных лиц:

Цену вопроса оплачивает тот, кто на него отвечает. Формулируйте вопрос так, чтобы наименее трудоемкий ответ все равно оставался полным.

Выбор из готовых вариантов — это вопрос лучше открытого почти для каждого, и он ничего не стоит тому, кто все равно предпочел бы печатать текст самостоятельно. Если относиться к этому как к особой уступке (accommodation), а не как к стандарту по умолчанию, это неизбежно приведет к тому, что применять его будут лишь после того, как человеку придется специально об этом попросить.

2. Варианты поддержки людей с инвалидностью — что реально доступно

Четыре независимые оси. Человек может находиться более чем на одной из них, и ни одна из них не является диагнозом — это решения, касающиеся интерфейса.

2.1 Ограниченная функция рук / моторика

Ось, которая сильнее всего меняет поведение агента и которую чаще всего сводят к «сделайте кнопки покрупнее».

что делатьпочему
Каждый вопрос — это выбор из вариантов, пронумерованныйввод текста — это затратное действие
Четыре варианта или меньшеесли вариантов больше, разделите вопрос
Один рекомендуемый вариант, указанный первым и помеченныйчеловек, который не хочет принимать решение, может выбрать первый пункт и оказаться правым
Сообщите, что произойдет при молчании, затем сделайте этомолчание никогда не должно блокировать работу
Группируйте решения пакетами, чтобы один ответ охватывал сразу несколькокаждый цикл обмена репликами стоит нажатий клавиш
Анонсируйте длительную работу; не спрашивайте на нее разрешениязапросы подтверждения — это скрытый налог
Свободный ввод текста всегда доступен, но никогда не обязателенсписок вариантов — это пол, а не потолок

В отображаемом выводе: WCAG 2.2 SC 2.5.8 Target Size (Minimum) — 24 × 24 пикселя CSS — и 2.5.7 Dragging Movements: для любого перетаскиваемого элемента требуется альтернатива без перетаскивания.

2.2 Слабое зрение

Крупный шрифт, настоящий контраст, информация никогда не передается одним лишь цветом, короткие строки и узкие таблицы — широкая таблица нечитаема при 200 % масштабировании и еще хуже воспринимается через скринридер. ASCII-диаграммы тоже не выдерживают критики; используйте настоящее изображение с полноценным alt-текстом.

Критерии: 1.4.4 Resize text (200 % без потерь), 1.4.3 Contrast (Minimum), 1.4.1 Use of Colour, 1.4.10 Reflow, 2.4.7 Focus Visible.

2.3 Аудио / голос

Ответы, которые чисто звучат при чтении вслух: никаких блоков кода внутри текста, никаких таблиц, никаких «см. диаграмму выше», расшифровка идентификаторов при первом упоминании, одна мысль на предложение и один вопрос за раз. Список из четырех вариантов отлично воспринимается на слух; таблица из четырех колонок — нет.

2.4 Когнитивная нагрузка и простой язык

Более короткие предложения, расшифровка профессионального жаргона при первом употреблении, отсутствие вложенных придаточных предложений и предсказуемый порядок действий. Именно отсюда на самом деле берется ограничение «не более четырех вариантов» — руководство W3C COGA и WCAG 3.1 — и это также просто правильный выбор по умолчанию для читателя, читающего на неродном языке, а для руководств WHO SMART Guidelines это подавляющая часть аудитории.

2.5 Лучшая практика: конкретные стандарты для проверки

Не расплывчатое «следуйте рекомендациям по доступности», а конкретные документы, чтобы любое утверждение здесь можно было проверить, а не принимать на веру:

стандартчто охватываетпочему применим здесь
WCAG 2.2 Level AAотображаемый вывод — сайт документации, просмотрщик, сгенерированные PDFбазовая линия, на которую ссылается все остальное
Новые критерии успеха WCAG 2.2 — 2.5.7, 2.5.8, 3.3.7перетаскивание, размер цели, повторный ввод3.3.7 — это критерий, меняющий проектирование агента: не заставляйте пользователя вводить одну и ту же информацию дважды
W3C COGAкогнитивные нарушения и трудности в обучении§2.4 выше
EN 301 549закупки для государственного сектора ЕСделает WCAG AA юридическим требованием в контекстах, где внедряется руководство
Section 508федеральные закупки СШАто же самое для США
ATAG 2.0инструменты, создающие контентто, что обычно упускают. folio-assistant — это инструмент разработки: Часть A — удобство использования самого инструмента, Часть B — помощь автору в создании доступного контента

На Части B стандарта ATAG стоит остановиться подробнее, поскольку это именно то, что контентная платформа способна предоставить наилучшим образом: наличие alt-текста, иерархия заголовков, заголовки таблиц и указание языка в опубликованных фолио — это проверки, которые может выполнять QA-контроль (QA sweep), и никакое повышение доступности самого редактора их не заменит.

2.6 Что реализовано на сегодняшний день

где
Настройки для агента, зафиксированные в репозитории, считываемые в начале сессииinteraction/interaction.json, передаются через scripts/session-start-coord-sweep.sh
Правила, которым следует агент при формулировании вопросовinteraction-modality
Элементы управления для читателя на этом сайтешестеренка в шапке боковой панели — увеличенный текст, повышенный контраст, подчеркнутые ссылки, уменьшение анимации
Учет предпочтения об уменьшении анимации без явного запросамедиа-запрос prefers-reduced-motion, определяющий значение по умолчанию в панели

Два хранилища настроек намеренно разделены. Файл interaction/interaction.json зафиксирован в репозитории, ориентирован на агента и относится к процессу общения. Элементы управления на сайте сохраняются в localStorage конкретного читателя, никогда не покидают браузер и относятся к чтению. Если читатель, не являющийся автором, выбирает крупный шрифт, это не должно негласно менять то, как агент общается с автором.

2.7 Что еще не сделано

Заявлено прямо, а не оставлено в виде догадок, поскольку наполовину заявленная функция доступности хуже ее полного отсутствия:

  • В проверках QA отсутствуют проверки ATAG Part B. Пока ничто не проверяет, содержит ли опубликованное фолио alt-текст, правильную иерархию заголовков или заголовки таблиц.
  • Нет аудита создаваемых PDF. Конвейер рендеринга документов проходит через weasyprint/prince/wkhtmltopdf, и вывод размеченных PDF (tagged-PDF) еще не проверялся.
  • Не проводилось тестирование со скринридерами. Элементы управления сайта разработаны в соответствии с критериями, но не проверялись с помощью NVDA, JAWS или VoiceOver. Соответствие спецификации — это не то же самое, что проверка на практике.
  • Аудиомодальность только описана, но не реализована. Правила зафиксированы; голосовой канал не подключен.

3. Сведение агентных вопросов и ответов к направляемым вопросам

Второй вопрос. Ответ заключается в разделении, и это разделение лежит в основе всей архитектуры.

3.1 Две вещи, которые кажутся одной

Что спросить дальше — это решение. Входными данными служат известные на данный момент факты; результатом является идентификатор следующего вопроса или none, когда информации уже достаточно. Этому место в таблице DMN, это доступно для анализа владельцу процесса и одинаково для каждого пользователя.

Как отобразить вопрос — это модальность. Нумерованный список в чате; произносимые по одному варианты в аудиорежиме; радиокнопки крупным шрифтом на веб-странице. Таблица решений ничего не знает обо всем этом.

 facts ──▶ [ next-question.dmn ] ──▶ question id ──▶ renderer(profile) ──▶ user
   ▲                                                                        │
   └──────────────────── answer recorded as a new fact ─────────────────────┘

Одна логика, четыре интерфейса. Добавьте модальность, добавив средство рендеринга; сценарий опроса не меняется. Измените сценарий опроса, отредактировав таблицу; ни одно средство рендеринга не затрагивается.

3.2 Четыре преимущества такого подхода

  1. Набор вопросов конечен и поддается проверке. Вы можете прочитать таблицу и знать каждый вопрос, который агент способен задать. Импровизирующий агент не дает таких гарантий, и его поведение невозможно проверить до того, как он встретится с пользователем.
  2. Процесс завершается. Таблица, результатом которой может быть none, имеет условие остановки.
  3. Вопрос становится обязательным, а не факультативным. Это прием, который уже используется в folio-intent.dmn: ask является результатом таблицы, поэтому агент не может обойти его при маршрутизации. Агент, который сам решает, задавать ли вопрос, под любым давлением казаться полезным решит его не задавать.
  4. Пропущенный вопрос можно проверить при аудите. Факты зафиксированы; воспроизведите вычисление таблицы и посмотрите, какое правило сработало.

3.3 Варианты и цена каждого из них

Четыре способа сделать это, в порядке возрастания сложности и масштаба. На данный момент реализован только первый.

вариантчто это такоецена
A — решение на каждый шлюз (реализовано)каждая неоднозначная точка ветвления в BPMN содержит cat-harness.processes:decision; таблица возвращает ветку, включая askнет конечного автомата опроса — состоянием является сам процесс. Нельзя выразить условие «задайте эти четыре вопроса в любом порядке»
B — набор вопросов за одним шлюзомцикл next-question.dmn до тех пор, пока не вернется none; ответы накапливаются как фактыеще одна таблица и хранилище фактов; цикл принадлежит самому процессу, поэтому ничего нового не выполняется
C — формы на основе DMNта же таблица формирует форму на сайте, а не только обмен репликами в чатетребуется схема фактов и модуль рендеринга для каждой модальности; сама таблица не меняется
D — полноценный движок опросов на DMN/BPMNподпроцессы для каждой темы, граничные события для варианта «я передумал»серьезная работа над движком, и подмножество FEEL придется расширить

3.4 Честно сформулированные ограничения

  • Подмножество FEEL невелико. src/workflow/decision-table.ts реализует проверку равенства, сравнение и выбор из набора («one-of»). Диапазоны, функция not() и вызовы функций отклоняются, а не вычисляются молча с ошибкой: таблица, которая возвращает ответ, не соответствующий таблице на странице, хуже той, которая сразу выбрасывает ошибку.
  • Открытый вопрос — это не решение. Вопросу «О чем эта статья?» не место в таблице, и попытка силой поместить его туда лишь ухудшает сценарий опроса.
  • Диалог — это не пошаговый мастер (wizard). Пользователь всегда должен иметь возможность сказать то, чего таблица не предусмотрела. Именно для этого существует вариант «расскажите подробнее», и это отнюдь не факультативное украшение.
  • Направляемый диалог — это не допрос. Самый большой выигрыш в доступности — это вопрос, который вам не пришлось задавать: каждый факт, который агент считывает из файловой системы, избавляет от еще одного вопроса. Этот выигрыш невидим, за него никто не похвалит, но он ценнее любых таблиц стилей.

См. также


folio-assistant — code under the Apache License 2.0, documentation under CC BY 3.0. Generated schema and API references are rebuilt from source on every push to main.

deployed dev