This is the master manual regression checklist for every user-facing dialog in QUILL. Use it to verify that each dialog opens, is fully keyboard and screen-reader operable, has a working Escape and an explicit default, and returns focus to the editor on close.
How to use this file:
.github/copilot-instructions.md ("Keep dialogs.md
current").This manual checklist is the human companion to the machine-enforced
dialog registry. The authoritative, source-of-truth inventory of every
dialog surface is generated from code by
quill/tools/dialog_inventory.py and committed as
tests/unit/ui/fixtures/dialog_inventory.json; the A11Y-4
banned-pattern gate and
tests/unit/ui/test_dialog_inventory.py fail the build if
any dialog is unregistered, unclassified, or on a bespoke surface.
Regenerate the snapshot with
python -m quill.tools.dialog_inventory --write whenever you
add, move, or remove a dialog. See "Dialog Excellence Mandates" in the
copilot instructions.
What "passes" means for every dialog (the A11Y-4 contract):
Automated companion tests and the manual QA plan:
tests/accessibility/test_accessibility_suite.py and
tests/accessibility/test_announcement_grammar.py cover
screen-reader announcement capture, SR detection, and announcement
grammar. Run with pytest tests/accessibility/ -q.docs/QUILL-PRD.md §6 ("Dialog estate pass") describes the
full human-executed pass against this checklist, including the SR
coverage matrix (NVDA full, JAWS spot, Narrator sanity) and the A11Y-4
sign-off criteria.Legend: "QUILL key" is the prefix chord, default
Ctrl+Shift+Grave (backtick). "via menu" means there is no
default keybinding; reach it through the named menu or the command
palette (Ctrl+Shift+P).
The Quillins Manager always opens, even when third-party Quillins are
disabled (SEC-8 core.third_party_plugins is locked off for
1.0); it then reports that state and lists any installed Quillins
read-only.
These open only from inside another dialog or flow. Test each by reaching its parent first.
Editor power-tool conveniences (EDS-1..20). These commands carry no
default keybinding; reach each from its conventional menu home (or the
command palette, Ctrl+Shift+P). As of the menu reorg
(menus.md §3.7) these commands were recirculated out of the former
power-tools monolith into their natural menus; the cohesive
editor-behavior remainder lives under Tools > Power
Tools. Only the commands that present a dialog are listed here;
the remaining power-tool commands act directly on the document and
announce their result.
Multi-document workspace commands (§10.4 Milestone 2). All custom
surfaces are hardened_custom per the dialog contract.
These appear only during a specific startup condition. Test by reproducing the trigger.
This checklist was generated from a full source scrub of
quill/ui/ (chiefly quill/ui/main_frame.py,
plus palette.py, assistant_panel.py,
assistant_tools.py, ai_model_panel.py,
train_style_dialog.py, sticky_notes.py,
preview_dialog.py, and web_form.py) and the
bindings in quill/core/keymap.py. When you add or change a
dialog, update the matching row here in the same change so this file
stays a faithful, complete map.
quill/stability/safe_mode.py (env-var contract is
QUILL_SAFE_MODE=1) and
quill/stability/__init__.py (SafeModeConfig,
build_safe_mode_config). When safe mode is active, the AI
assistant surfaces in section Q, the BITS / Whisperer surfaces in
section R, the watch-folder network calls in section M, and the Agent
Center all short-circuit. Manual verification: launch with
set QUILL_SAFE_MODE=1 (cmd) /
$env:QUILL_SAFE_MODE=1 (PowerShell) /
--safe-mode (CLI flag); confirm the status-bar banner and
the AI/assistant menu items are disabled.