第七案例文 · 方法論補完篇 · 三公約共構平台

監督政府的平台,如何監督自己?

三公約共構平台量化政府失語的同時,也用同一套工具量化自身的失語。link_audit 從 88 個 dead_anchor 降到 50,是結構批評需要結構自律的具體例證。

2026-05-06 · 三公約共構平台編輯室 · CC BY 4.0

前 6 篇案例文揭露 6 個跨公約結構性發現:政府文件中身障女性受暴 0 段、合理調整 7 段、身障原住民全 0。但本平台若只批評政府不檢視自己,就只是另一份「沒人主張」的論述。所以我們對自己跑同一套量化工具,把連結品質當成第 7 個指標。Wave 162 baseline:88 個 dead_anchor。Wave 165 後:50。

88 → 50
三平台 dead_anchor 從 baseline 降到 Wave 165 final(43% 修復率)

為何要做平台自審?

跨公約共構平台的核心倡議是:政府的沉默可被量化。但這個主張只有在我們自己的工具不沉默時才成立。如果三平台首頁有 88 個失靈的內部連結,我們指責政府文件邏輯斷裂的姿勢就站不住腳。

結構批評需要結構自律。
我們對政府要求 disability-disaggregated 統計、跨公約 List of Issues 互相引用、CRC GC-22 §32-34 條文落實 — 這些都要求政府在論述精度上達標。如果我們自己的論述精度(broken links、dead anchors、stale subdomains)沒有同樣標準,批評就缺乏正當性。

怎麼做的?

Wave 160-166 期間,我們建構了一個 150 行的 Python 腳本(link_audit.py)做整個 _public/ 的全文掃描:

結果輸出 JSON history(每月一筆 snapshot),自動 render 成 QA · Link Audit Dashboard。每月 1 號跑 run_monthly_pipeline.sh 第 [5/5] 步自動更新。

Baseline → 50 的三個關鍵 fix

CRPD 102 頁加 id="main"

-102

102 個 CRPD 子頁面有 href="#main" 無障礙 skip-link,但 <main> 元素未加 id="main"。鍵盤使用者按 Tab 跳到 skip 後焦點落空。
Fix: sed 把 <main><main id="main">

移除 CEDAW templates/_layout_pi.html

-2

build template 不該被部署(GH Pages 會 skip _ 前綴檔反正 404)。template 內含 dead anchor 但實際不對外。
Fix: git rm

CEDAW index.html 加 4 個 invisible anchor

-38

19 個 PI 詳細頁 footer 連 ../index.html#axis3#axis4,但 index.html 沒有對應 id。
Fix:<a id="axis3" style="position:absolute;left:-9999px;"> 等 4 個 invisible 元素

三個 fix 合計從 88 降到 50。剩下的 50 主要是 CRC 平台 crc-articles.html#PI-XX(crc-articles 用 JS 動態載入 PI 資料,沒有 static id),屬結構性議題,需要 JS 路由器才能修。

從工具到 KPI:第 7 個 indicator 加入月度追蹤

Wave 166 把 dead_anchor 從一個內部 audit 升格為 monthly-tracker 的第 7 個指標:

📅 月度行動追蹤原有 6 個指標(6 結構性發現)。Wave 166 加第 7 個:
🩺 平台健康 · dead_anchor:baseline 50 → target 0(2027-Q1)

這個指標 inverted(lower 越好),從 link_audit.json 自動讀。任何新引入 broken anchor 的 commit 會立即在 dashboard 顯示「平台健康下滑」 — 形成自我規範。

三層意義

1. 信譽信號

NGO 監督 NGO,UN reviewer 評估 NGO 的證據可信度。一個量化政府文件失語但自身連結 50% broken 的平台,信譽折半。把自審當第 7 個指標公開上線,等於告訴讀者:「我們的數字也接受同樣標準的檢驗」。

2. 工程紀律

每月一次的 audit 確保未來新加頁面 / 新 wave 不引入 regression。link_audit.py 整合進 run_monthly_pipeline.sh 第 [5/5] 步,跟 6 結構性發現 indicator 一起更新。

3. 範例給其他 NGO

DEVELOPER_GUIDE.md 引導其他想複製本架構的 NGO,也應一併套用 link_audit。從 day 1 就把自審當 first-class citizen,而非事後補。

結語:沉默是雙向的

政府的沉默是 0 段政府文件,我們的沉默是 88 個失靈連結。兩者都可被量化、可被追蹤、可被問責。差別只在誰先承認。

我們先承認 88,然後降到 50,目標 0。政府呢?

📌 Wave 169 後記(2026-05-06):本文上線後重跑 link_audit,發現之前只盯 dead_anchor,忽略了 broken_target(連到不存在的檔案)。CRC 平台 14 個 timeline 頁面引用 ../../data/sources/*.md../../data/advocacy_actions/*.md,但這些檔案在母 repo 而非部署的 _public/ sub-repo。broken_target 從 3,624 降到 67(98% 修復)。三步修法:(1) 把 data/sources/*.md + data/advocacy_actions/*.md 鏡像到 _public/(380 KB,42 檔)(2) 修 render_timeline.py 的相對路徑邏輯 (3) 對不存在的 source 改顯示「📄 原始檔(待補)」灰字而非 <a>。三平台總 issues:3,713 → 156(96% 修復)。同樣的標準對自己,先承認再修復。
📌 Wave 170-171 後記(2026-05-06,提前 9 個月):持續同樣的紀律,Wave 170 把 stale_subdomain(21)和 platform_root_absolute(18)清零;Wave 171 給 crc-articles.htmlchain.html 各加 14 個 PI-XX 隱形錨點 + 一個小型 hash router(JS),把 dead_anchor 也降到 0第 7 項指標原訂 2027-Q1 達標,實際 2026-05-06 達成 — 提前 9 個月。三平台總 issues 156 → 10(94% 修復,僅剩 broken_target 10 個小範圍佔位)。意義:當量化標準對外公開、被讀者監督,自我約束的速度就會加快。「先承認 88,然後降到 50」是文初的承諾,Wave 171 把它兌現到 0。政府呢?
📌 Wave 173-176 後記:全 0 達成。Wave 173 媒體素材包 + Wave 174 國際對照表上線後,我又一次發現自己引入了 broken link(把 PI-12 和 sogiesc_frequency.html 連到沒有該頁的平台)。Wave 175 補回 release-notes;Wave 176 一次清理:跨平台連結改成絕對 URL、給 CRC 的 sources/advocacy_actions/ 加 index 瀏覽頁、把 4 個 placeholder 連結改成「(待補)」灰字標籤。四個類別三平台合計 0 個 issue — broken_target / dead_anchor / stale_subdomain / platform_root_absolute 全清零。從 Wave 162 baseline 3,751 到 Wave 176 的 0,跨 14 個 wave。雙重承擔:不僅該量化的東西被公開,連自己尚未公開的盲點被讀者發現之後,也要承認、要修。
📌 Wave 177-179 後記:第二條自審 KPI 收斂(WCAG 2.1 AA · 94% files clean)。link 健康歸零後,把同一套量化邏輯延伸到 web accessibility — 因為一個身障權益監督平台,本身的 a11y 不該只是勉強通過。

W177 baseline:921 個 HTML 中只有 20 個全綠(2.2%),共 27,084 個 findings。W178 修 218 C7(<html>lang)+ 31 C6(缺 skip-link)→ 兩個結構性類別歸零。W179 兩階段:第一階段重寫 C1 audit 邏輯 — 之前是 element-agnostic 比對(每個 color:#fff 都跟 body 背景配對,白字按鈕被誤判),改為 scope-aware(同一 CSS rule 或 inline-style 內才配對)→ 26,866 → 157(99.4% 是稽核工具的 false positive)。第二階段做真實調色 — 把 8 種低對比 badge 背景色(#C68822 / #E65100 / #2FA598 等)替換為 WCAG-AA-safe 變體(#8E5A0E / #B5371F / #1F6F66 等),覆蓋 217 檔的 inline + <style> blocks → 157 → 55

W180:批次把 body font-size < 16px 全部 bump 到 16px(kids/* 18px),涵蓋 295 檔 → C2 也歸零。三平台 924/924 全綠(100%)。WCAG 2.1 AA 自審 KPI 在 4 個 wave 內從 27,084 收斂到 0。

結算 · 兩條自審 KPI 並列收斂: 不僅自我量化,連量化工具本身的可信度也經歷外部檢驗 — Wave 179 的最大發現是承認 W177-178 的「26,866 個違反」其實 99.4% 是工具設計問題,而非真實 a11y 失敗。誠實的數字比好看的數字更有意義。同樣的問句,從失能轉為已落實:政府的監督平台量化政府文件失語(0 段)、自身連結健康(0 issue)、自身可及性健康(0 finding)。政府呢?

本文以 CC BY 4.0 授權釋出,自由轉載 / 改編,需註明出處。引用建議格式:
三公約共構平台。(2026-05-06)。〈監督政府的平台,如何監督自己?〉。網址:cedaw.taiwanmommies.org/blog/2026-05-06-platform-self-audit.html