v0.3.0
BREAKING: Playwright is no longer installed by default. The default
install (pip install a11y-moda) now ships only lint + rules
subcommand dependencies (~30MB). To use scan / site / --render /
--render-crawl / --probe-modals, install the [scan] extra:
pip install 'a11y-moda[scan]'
playwright install chromium
Existing users who upgrade and then run --render will see a clear
install message printed to stderr; the CLI does not auto-install.
Reframing — knowledge service
a11y-moda repositions from "audit CLI" to "audit CLI + queryable MODA
rule knowledge service". The new rules subcommand exposes the
internal rule registry as a queryable API for AI agents (any IDE /
agent that can call CLI tools), so the agent can lookup MODA rules
before writing accessibility-sensitive code instead of only after
lint complains. Cross-platform by design — works with Cursor, GitHub
Copilot, Aider, Claude Code, Cline, Continue, custom agents.
Added
a11y-moda rulessubcommand group — query MODA rule metadata.
Three subcommands:list,show,search. JSON / Markdown output.
Filters:--level,--topic,--source(freego/extension),
--scope(scan/lint),--search. English keyword aliases for
search (button/form/image/dialog/ etc. map to zh-TW
desc substrings).a11y-moda explain <RULE_ID>— short alias forrules show.- 9-field rule metadata —
rule_id,guideline,level,
level_name,desc,source,runtime_authoritative,wcag_url
(WAI Quickref anchor),topic(codes/ subdir),scope(list of
stages: scan/lint). examples/cursor/.cursorrules— Cursor integration.examples/copilot/.github/copilot-instructions.md— GitHub
Copilot Chat integration.examples/aider/.aider.conf.yml— Aider integration with
lint-cmd:hook.examples/generic-agent/AGENT.md— platform-agnostic
instructions for any LLM agent (Cline, Continue, RooCode, custom).- SKILL.md —
argument-hint, knowledge-query section, MODA 編碼
速查 (HM/GN/CS/AR/FA/SC + C/E suffix decoder). - Workflow positioning expanded from T1–T7 to T0–T7 (T0 = pre-write
rule lookup).
Changed (BREAKING)
pyproject.tomldependenciesno longer includesplaywright.
Moved tooptional-dependencies.scanandoptional-dependencies.all.- CLI
scan/siteearly-exit with friendly install message when
--render/--render-crawlselected and Playwright not importable.
lintandrulesunaffected.
Notes
- Why no MCP server yet:
rulessubcommand + system-prompt
examples (Layer 2 of cross-IDE strategy) ship first to validate the
"edit-time query" workflow with the lowest-risk approach. MCP server
(Layer 1, native tool integration) deferred to v0.4.0 pending real
usage signal. - Why no auto-install: industry consensus (pytest plugins, ruff,
black, even Playwright itself) is to print a clear install command
and let the user run it. Auto-install causes permission, network,
and reproducibility issues. AI agents that read stderr will run the
printed command on the user's behalf. - Knowledge query is proactive, not reactive: the design intent
is for agents to query rules BEFORE generating JSX, not just after
lint reports an issue. Reactive lookup also works (explain <RULE_ID>after seeing afail), but the bigger UX win is writing
compliant code from the start.