Доступность
В issue #232 было задано два вопроса, и эта страница дает на них ответы:
- Каковы здесь варианты поддержки людей с инвалидностью и что считается лучшей практикой?
- Каковы варианты сведения агентных вопросов и ответов (Q&A) к направляемым вопросам, которые следуют логике DMN и могут обслуживать несколько модальностей взаимодействия?
Оказывается, это один и тот же вопрос, заданный с двух сторон, поэтому они объединены на одной странице. Реализующий навык — interaction-modality.
- 1. Сбой, о котором идет речь
- 2. Варианты поддержки людей с инвалидностью — что реально доступно
- 3. Сведение агентных вопросов и ответов к направляемым вопросам
- См. также
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 Четыре преимущества такого подхода
- Набор вопросов конечен и поддается проверке. Вы можете прочитать таблицу и знать каждый вопрос, который агент способен задать. Импровизирующий агент не дает таких гарантий, и его поведение невозможно проверить до того, как он встретится с пользователем.
- Процесс завершается. Таблица, результатом которой может быть
none, имеет условие остановки. - Вопрос становится обязательным, а не факультативным. Это прием, который уже используется в
folio-intent.dmn:askявляется результатом таблицы, поэтому агент не может обойти его при маршрутизации. Агент, который сам решает, задавать ли вопрос, под любым давлением казаться полезным решит его не задавать. - Пропущенный вопрос можно проверить при аудите. Факты зафиксированы; воспроизведите вычисление таблицы и посмотрите, какое правило сработало.
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). Пользователь всегда должен иметь возможность сказать то, чего таблица не предусмотрела. Именно для этого существует вариант «расскажите подробнее», и это отнюдь не факультативное украшение.
- Направляемый диалог — это не допрос. Самый большой выигрыш в доступности — это вопрос, который вам не пришлось задавать: каждый факт, который агент считывает из файловой системы, избавляет от еще одного вопроса. Этот выигрыш невидим, за него никто не похвалит, но он ценнее любых таблиц стилей.
См. также
- Начало работы — таблица решений о намерениях в действии
- Навык
interaction-modality - Процесс публикации — каждый процесс в репозитории
- Варианты состояния рабочего процесса в beans