Communitygithub.com

SocialGouv/ultra11y

針對 HTML/CSS/JSX 進行 WCAG 2.2 AA 無障礙審計,產生帶日期的合規報告,並支援編寫或審查無障礙標記。零依賴的靜態引擎結合 AI 代理判斷,並設有反幻覺檢查/驗證關卡。

ultra11y 是什麼?

ultra11y 是一個無障礙審計工具,將機械化檢查與 AI 代理的判斷相結合,專門針對 WCAG 2.2 AA 標準。它包含一個零依賴的靜態引擎,能夠執行 93 項靜態檢查,並將結果對應到 WCAG 的成功標準。該工具的核心設計旨在防止幻覺:所有 AI 代理做出的「不符合」判定都必須有可驗證的證據支持,而「符合」判定則需要完整的證據記錄。它支援多種國家標準(如法國的 RGAA、美國的 Section 508),並允許在運行時動態加載自定義標準包。ultra11y 主要用於 Claude Code、Codex CLI 等 AI 編碼代理環境,通過具體的參考文件和命令(如 `audit`、`verify`、`check`)指導代理完成從原始碼審計到渲染 DOM 掃描的完整工作流程。值得注意的是,在 55 個 WCAG 2.2 AA 成功標準中,引擎只能直接判定 3 個,14 個需要渲染頁面掃描,而多達 38 個依賴於 AI 代理的判斷,因此該工具明確定位為一個協作起點而非終審判決。

相容平台✓Claude Code✓Codex CLI~Cursor✓OpenCode
npx skills add SocialGouv/ultra11y

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

ultra11y — 審計 WCAG 2.2 AA 並撰寫無障礙標記

關於無障礙,自動化工具只能看到問題的一部分。ultra11y 透過分工來解決這個問題:確定性、無需安裝的引擎(node scripts/ultra11y.mjs <command> — 無需 npm install,無需金鑰;JSX/TSX 解析器已嵌入在套件中)負責執行機械化工作 — 檢測可透過機器檢查的不合規項,並將其連結到對應的 WCAG 成功標準 — 而主動編碼代理則負責裁決判斷標準本身 — 如替代文字的相關性、連結在上下文中的目的、閱讀順序 — 它會根據引擎收集的證據進行靜態分析(verify --manual),每個裁決結果都經過 verify/check 關卡的驗證。只有那些真正涉及渲染後 DOM 的標準(如計算後的對比度、可見焦點、縮放/重排、懸停內容)才會落在 scan 層級(使用真實瀏覽器中的 axe-core);人類最多只是可選的監督角色。這些關卡可以阻止任何幻覺產生的不合規項存活下來,並且永遠不會有默默「符合」的情況。

不要混淆規則與標準。 該套件包含 93 項靜態檢查,WCAG AA 有 55 個成功標準,而 RGAA 有 106 個標準。多個規則可能指向同一個標準,一個規則可能貢獻給多個套件標準,且大多數標準在掃描或裁決之前仍保持開放狀態。唯一誠實的運行層級覆蓋率是網格中即時的來源統計(moteur + scan + agent,加上任何命名的不可判定殘留項),絕不是像「48 個代理標準」這樣的固定承諾。因此,GitHub 摘要顯示的是 已決定/總數,而不是針對已決定子集的百分比。

WCAG 2.2 Level AA 是全球核心。 各國標準 — 法國的 RGAA、美國的 Section 508、歐盟的 EN 301 549 — 都是可插拔的標準套件,將其標準映射到 WCAG。添加 --standard rgaa 可以重新設定每個命令和每個輸出的鍵值 — 包括 audit 及其結果;使用 --pack ./pack.json(或 .ultra11yrc.json 檔案)在運行時插入外部套件,無需重建;或者貢獻您自己國家的標準(請參閱 references/standards.md)。這些套件(及其具體的實作指南 — RGAA SocialGouv/etalab 的好/壞模式)可以被 AI 吸收,並經由 pack check 進行門控,以防止偽造的映射通過 — 請參閱 references/packs.md 和 references/guidance.md。

大部分工作是您的。 在 55 個 WCAG 2.2 AA 成功標準中,引擎可以直接判定 3 個;14 個需要渲染後的頁面(scan),而 38 個是代理需要裁決的判斷項目。因此,引擎的乾淨運行只是一個起點,絕非最終裁決 — 而 references/adjudication.md 是您實際要工作的頁面。

核心規則:

  1. 永遠不要發明不符合項:每個 NC 都必須引用一個真實、可解析的元素(check 會驗證它)。
  2. 原生 HTML 優先,ARIA 最後;永遠不要重複隱含語義。
  3. 永遠不要發明符合項:一個 C 的引用方式與 NC 完全相同 — 它在 citations[] 中列出它所清除的已收集證據,每個錨點都可解析且來自該標準實際被展示的證據。一個沒有證據就呈現的標準根本不能為 C;它必須保持 manual。同樣地,如果其讀取狀態為 INCOMPLETE(evidenceComplete: false),也不能為 C:一個您只看到部分證據的標準,您可以基於所見內容判定它失敗,但絕不能因為您沒看到的內容就判定它通過。並且,經裁決的 C 永遠不會與引擎決定的 C 合併:報告會將其分開列出,並將其排除在自動通過率之外。 3b. 您所看到的內容是整個群體,每個不同的事物只出現一次。 證據是每個內容類別的一個代表,帶有 occurrences、其他錨點位於 alsoAt,以及它出現的 pages — 跨 38 個捕獲頁面的 887 個連結是 97 個不同的(text, href)配對。對代表做出裁決即等同於對所有連結做出裁決,這正是達成誠實 C 的基礎;而引用該標準所攜帶任何類別的任何出現次數的引用都是可接受的,因此請引用您實際打開的那個。
  4. 殘留項是明確的,絕不默默符合:AI 代理自行裁決每個判斷標準(verify --manual,經門控),而渲染標準則交給 scan — 當承載某標準的每個規則都在範圍內的每個頁面上執行且沒有引發任何問題時,scan 現在會得出 C(decidedBy: "scan")的結論;而當即使只有一個頁面的訊號不完整時,它會保持沉默。任何仍未確定的標準都會保持「待人工評估」狀態 — 沒有狀態是沒有記錄的、有正當理由的裁決。為了使其成為一個門檻而非一個希望,check --in <audit.json> --require-decided 在仍有任何項目待評估時會失敗,而 --allow-undecided <file> 則接受您確實無法決定的標準,每個標準都附有其理由(一個命名的列表,不是一個門檻)。--require-decided=pages 將每個頁面自己的網格都置於相同的標準下:一個在一個路徑上失敗的標準,對於該運行而言是已確定的,但對於它從未觸發過的路徑來說,可能仍然不是任何人的裁決,而每個頁面的交付物正是根據這些路徑來評判的。 發出的工作清單是權威的。 它可能故意包含一個運行範圍內狀態已經是 NC 的標準,因為該失敗並未決定該標準在其他頁面上的狀態。這樣的項目並非冗餘:為它返回一個有根據的裁決(或一個明確的 manual 理由),永遠不要因為全局統計看起來已經決定就留空。
  5. 查閱標準;永遠不要憑記憶。 criteria [--standard <pack>] <id> — 或透過 MCP 使用 ultra11y_criteria — 會返回標準本身的措辭、其編號測試,以及這些測試所引用的詞彙表定義。RGAA 8.3 不是「頁面需要一個 lang 屬性」;它是測試 8.3.1,包含兩個替代條件,而詞彙表決定其術語的含義。一個在閱讀後引用 8.3.1 的審計區塊是有根據的;一個憑記憶引用的則是穿著引用外衣的猜測。在針對某國標準進行審計之前,請先執行計畫(ultra11y_method):它會告訴您還有多少標準需要裁決才能獲得 C — 對於 RGAA,106 個中有 104 個。請參閱 references/mcp.md。
  6. 最終渲染的語義 HTML 必須正確。 引擎只看到原始碼;一個元件庫(DSFR/MUI…)或 .vue/.svelte/.astro SFC 隱藏了真實的標記,因此綠色的原始碼審計並非證明。請驗證生成的語義 HTML — 安裝零接觸的捕獲收集器(render --setup),以便您的測試渲染的每個元件都被序列化到 .ultra11y/captures 並進行審計,並使用 audit --require-captures 門控來處理盲點。請參閱 references/automation.md / references/rendered.md。
  7. 語言:始終傳遞 --lang,使其與您與使用者對話的語言匹配;在有歧義時詢問使用者。如果沒有該標誌,CLI 會自動檢測(儲存庫 <html lang> → 啟用標準的預設語言環境 → 英文) — 這是一個腳本/CI 的備案,不能取代您自己傳遞 --lang。
  8. 技術標記保持英文,即使在法語散文中也是如此。 在您撰寫的任何法語交付物(報告評論、PRD、追蹤器工單、判斷裁決)中,屬性/元素/角色名稱及其值是程式碼,而非散文 — 永遠不要翻譯它們:aria-live 保持為 aria-live(永遠不要寫成「région live」),tabindex、alt、role="alert"、地標角色名稱也是如此。引擎自己的法語目錄遵循此規則;請與之匹配。規範性標準詞彙(RGAA 措辭,例如 « lien d'évitement »)保留其官方法語。

參考資料庫

先了解領域知識,再了解工具。閱讀與您當前問題相匹配的資料。

無障礙知識
references/adjudication.md如何決定引擎交給您的 52 個標準中的每一個 — 決策規則,何時 NA 是合法的,問題
references/naming.md無障礙名稱計算,2.5.3 名稱中的標籤,視覺隱藏 CSS,為圖片/SVG/圖形命名
references/widgets.mdARIA APG 複合模式,鍵盤合約,焦點管理,SPA 路由變更,動態區域
references/forms-and-errors.md標籤與說明,autocomplete 代碼列表,錯誤識別/建議/預防,冗餘輸入,無障礙驗證
references/structure.md標題,地標,列表與 dl,簡單與複雜表格,有意義的順序
references/media-and-motion.md字幕/口述影像/逐字稿,指標手勢,目標大小,方向,重排,減少動畫
references/forbidden-patterns.md15 個反模式:錯誤 → 原因 → 原生修復 → 標準
references/focus-and-logic.md您擁有的焦點/鍵盤標準,以及如何推理它們
references/criteria.md55 個標準:等級,自動化類別,引擎規則,套件映射(已生成)
references/rgaa-automation.mdRGAA 4.1.2:已生成的 106 個標準 / 258 個測試矩陣,決定性規則,候選訊號與靜默策略
references/act.md引擎被測量到能捕獲什麼 — 以及它明顯不能捕獲什麼(已生成)
執行工具
references/runbook.md可靠運行:一個配方,要使用的傳輸方式及原因,以及一次通過的成本。在為裁決付費之前請先閱讀此文件
references/claude-code-report.mdClaude Code 的詳細發布路徑:渲染範圍,直接裁決,對抗性驗證,Markdown + HTML + 每頁證據
references/audit.md端到端的審計循環,以及規範性頁面樣本
references/judgment.md裁決 + 駁斥工作清單,裁決詞彙,故障封閉折疊
references/verify.mdcheck/verify 門控
references/false-positives.md發現結果仍可能錯誤的地方,以及如何駁斥它
references/rendered.md · references/automation.md審計生成的 HTML、捕獲、鉤子和 CI
references/harnesses.md運行環境:Claude Code、Codex CLI、OpenCode 和 AGENTS.md 備案
references/orchestrators.md從工作流引擎 / 非 GitHub CI 驅動引擎:固定版本、六步驟管線、退出碼、以 JSON 形式為任何追蹤器提供的工單集
references/ci.md`--format sarif
references/pages.md頁面快照 + 每頁標準網格(pages),及其誠實規則
references/e2e.mdrender --e2e:在 Playwright/Cypress 運行期間審計頁面
references/devtools.mddev:您在開發時的即時疊加層,以及每頁儀表板
references/extension.md瀏覽器擴充功能:透過 side-car 審計您正在查看的頁面
references/dynamic.mdscan 層級:運行時、探針、已認證頁面
references/scale.md在大型儲存庫上聚焦審計
references/fix.md · references/correction.md按優先級應用修復,無回歸
references/prd.md作為待辦事項清單(markdown)的審計區塊
references/tickets.md將該待辦事項清單歸檔為工單:GitHub、GitLab、Jira 以及粒度
references/standards.md · references/packs.md · references/guidance.md國家標準,撰寫套件,實作指南
references/mcp.md作為規則引擎的標準:查閱標準而非憑記憶回憶 — 其編號測試、其定義的術語、修復方法以及工作計畫。作為 MCP 工具和 std:// 資源,或 CLI 上的相同資料
references/methodology.md狀態、通過率、嚴重性、報告格式
references/cross-file.md--graph:導入和跨檔案規則
references/orchestration.md將判斷階段分配給子代理

依情境選擇

  • 「在 Claude Code 中產出詳細的審計/報告」 → 將活動中的 Claude 會話用作審計員,關閉渲染和判斷標準,挑戰其主張,然後發布帶日期的 Markdown 報告、可列印的 HTML 和有證據支援的每頁檔案。閱讀 references/claude-code-report.md。這是互動式發布設定檔;以其完整的交付物集完成。緊湊摘要見下方 CI 分支。
  • 「審計 / 合規報告」 → node scripts/ultra11y.mjs audit … --json,然後 report(匯總表 + 每個 NC 標準一個審計員合規區塊 — 與 prd 和 tickets 使用的區塊相同),然後 check;閱讀 references/audit.md。
  • 「由庫(DSFR、MUI…)或 .vue/.svelte/.astro SFC 渲染的程式碼 / 避免假陰性」 → 審計生成的 HTML,而非原始碼模板。最簡單的方法:安裝零接觸的捕獲收集器(render --setup),以便您的測試將每個渲染的元件序列化到 .ultra11y/captures(自動吸收,發現結果歸因於原始元件;render --coverage 和 audit --require-captures 追蹤盲點)。或者執行 render(建置→審計配方或 SSR 快照 --scaffold),然後對輸出執行 audit,再執行 scan 以進行計算後的渲染。SFC 原始碼的發現結果會被標記為 preliminary(一個 scope.sourceTemplate 警告);閱讀 references/rendered.md。
  • 「發現結果看起來不對 / 元件的假陽性」 → 引擎會自動抑制大多數元件的假陽性(插槽/屬性注入的名稱、元件子項、動態綁定、條件式標題),並將 SFC/庫原始碼的發現結果標記為 preliminary;使用 verify --apply 確認或駁斥其餘部分;閱讀 references/false-positives.md。
  • 「大型儲存庫 / 智慧審計」 → 聚焦:--changed(git diff)、模板優先級排序、去重、--max-files;閱讀 references/scale.md。
  • 「跨檔案分析(樹狀結構 + 依賴關係),JSX/TSX 作為真實 AST」 → audit --graph 解析匯入並套用跨檔案規則

相關技能