browser-qalisted
Install: claude install-skill abs1294/fulin-claude-plugins
# Browser QA Skill
> **機械保證的邊界(先讀)**:本 skill 分兩層——
> **產物層**(每個功能在 `tests/e2e/` 留下可重跑的 `test_*.py` + junitxml 報告 + 回填的 catalog)由 `qa-flow.sh` + Stop hook **機械強制**,AI 繞不過。
> **設計品質層**(覆蓋矩陣是否窮盡、證據是否夠強、是否真走兩階段 qa-engineer 設計)**無法機械強制**(品質是 AI-complete)——下面的方法論是**強烈建議的流程**,靠引導不靠閘門。
> 所以:產物一定會有,但「測得好不好」需人把關。別把「hook 全綠」當成「測試設計到位」。
把測試計畫的每條「預期結果」對映成一個 **critical point**,再落成可重跑 runner 裡**(至少)一行 `assert`**(雙向卡控等可多行)。
這條設計的好處:測試**寫一次**(探索階段花一次 agent token),之後直接 `pytest`(或對應 runner)跑——
有 assert 就能自動判 pass/fail、無 agent、不花 token、可掛 CI。
> **方法論中立、載體固定優先 pytest(核心原則)**:本 skill 的價值在「測試設計方法論」(覆蓋矩陣 /
> 可追溯 / CP→assert / 必測 checklist / 測試資料原則)。沉澱載體**固定優先 pytest-playwright**——
> **唯二例外**:(a) 目標專案「既有」測試資產就是別的 runner(如既有 Playwright JS 專案)→ 沿用既有、對齊風格;
> (b) greenfield 且**使用者明確不同意**裝 Python 環境 → 退而用 Playwright JS。除此之外一律 pytest,
> **不得因「載體中立」自行選 JS**(歷史踩雷:執行者看到子目錄有 JS 專案就鑽進去出 JS)。
> 判定一律靠**結構化證據**(API 業務碼、DOM/a11y 讀回、來源 readback),**不靠讀截圖**。截圖至多留檔備查。
>
> **落點鎖死**:測試 / 報告 / catalog 一律落在**你起 session 的那個資料夾**底下(`tests/e2e/`),
> **禁止鑽進子專案目錄**。此規範由 `qa-flow.sh`(鎖 `CLAUDE_PROJECT_DIR`)機械執行,見下方「qa-flow.sh 腳本」。
| Phase | 執行者 | 職責 |
|-------|--------|------|
| Phase 1 | QA Agent(本 plugin 的 `qa-engineer` agent) | 設計測試計畫、定義 critical points 與輸出格式 |
| Phase 2 | QA Agent(同一個 `qa-engineer` agent 接續執行) | 預擬草稿(每 CP 一行 assert)→ 首跑收失敗清單 → 定向探索補值 → 結構化證據自驗 → 輸出測試報告 + 回填 catalog |
> 主 Agent(指揮官)不出現在任何 Phase:它只判斷何時該 QA、派 qa-engineer agent(附環境啟動方式 /
> 已知 DOM 坑 / allow-list 前提)、收報告結論,**不親跑 MCP**。實作 agent 不做瀏覽器自驗。
> **a