Top 50 測試目標

給 comeshop-ai watch 監控指向的靜態目標:50 個 use case、281 條驗收條件,每條一頁。

怎麼用

這些是靜態檔,用任何靜態伺服器起來即可:

cd testings/2026-09-05 && python3 -m http.server 8787

每一案先觀測 <案號>/index.html 取得基準,再把監控指向該案的某一條 <案號>-AC-0N.html。兩份都是靜態的,所以差異是決定性的——重跑幾次結果都一樣,這正是驗證變動偵測需要的性質。

每一頁都寫了「應該發生什麼」與「平台必須不做什麼」。多數條目的重點在後者:五十條裡有十一條是在測「讀不到的時候不准說沒有變動」,那是本平台最容易安靜出錯的地方。

結構化來源的觀測方式用同名的 .json;抓頁面的用 /jsonld/0/observed/… 這個 JSON pointer。

靜態檔做得到與做不到的

做得到:回應的內容——HTTP 200 卻沒有價格、空的 JSON、被付費牆擋住的正文、標題裡的注入字串、超出量綱的數值。

做不到:回應的狀態碼與標頭——429 加 Retry-After、403、逾時、簽章無效。這些要靠能控制回應的伺服器或 stub,靜態檔只能提供那一刻的 body。相關頁面上會明說。

更難的目標

上面五十條驗收假設抓一次就拿得到值。真實網站多半不是——而它們失敗的方式各不相同:

登入牆(4 頁)內容藏在 session 後面。牆是穩定的,所以「有讀到東西」會被誤當成「讀到了那個東西」,於是永遠回報沒有變動。含一個給流程腳本走的真實表單。
動態內容(3 頁)值由 React 或腳本在載入後寫入。抓取拿到空的 #root,而空殼的雜湊也是穩定的雜湊。含延遲渲染與水合不一致。
URL 與特殊字元(4 頁+對照表)有時候變的不是內容而是位址,有時候位址看起來變了其實是同一個東西。追蹤參數、canonical、轉址、路徑編碼,加上十種建立監控時該被拒絕的 URL 形式。
極端值(6 頁+3 個 JSON)數值、文字、惡意內容、形狀、時間、金額。這一組不會讓平台安靜出錯,會讓它大聲出錯——而錯的值比缺席的值更危險,因為錯的值會被拿去行動。

use case

排名 1–10

驗收條文由建置時讀自規格文件——規格改了,這些頁會跟著改。

#1 T24 競品價格、庫存與 MAP

一個競品商品頁。價格、庫存、促銷與 MAP 下限都在頁面上,也在 JSON-LD 裡。

存取 public 審查 standard 0 個必要欄位 5 條驗收

#2 T13 CVE、KEV 與 remediation

一份廠商弱點公告。CVSS、EPSS、KEV 與修補期限都是可觀測欄位。

存取 public 審查 professional_review 0 個必要欄位 5 條驗收

#3 N31 商家物流例外與 ETA

一個需要授權才看得到的物流追蹤頁。用來測試已授權來源與 PII 最小化。

存取 authorized 審查 professional_review 0 個必要欄位 5 條驗收

#4 N32 仿冒、未授權賣家與假站

一個市集搜尋結果頁。這裡的產出是「指控」,所以整案都是候選加人工審查。

存取 public 審查 professional_review 0 個必要欄位 5 條驗收

#5 N38 供應商與供應鏈風險

一個供應商狀態頁。單一訊號不算數,要跨來源佐證。

存取 mixed 審查 professional_review 0 個必要欄位 5 條驗收

#6 T10 公司 filing 與指定 Item

一個公司申報清單。只有「指定的 Item」變動才算數。

存取 public 審查 professional_review 0 個必要欄位 5 條驗收

#7 T14 Incident、maintenance 與 recovery

一個服務狀態頁。C2 節奏——事故要快,所以觀測頻率高。

存取 mixed 審查 professional_review 0 個必要欄位 5 條驗收

#8 N45 第三方依賴與 SLA

一個依賴健康頁。存取類別是 mixed——公開狀態頁加上自有量測。

存取 mixed 審查 professional_review 0 個必要欄位 5 條驗收

#9 N39 競品、產業與監管情報

一則公司新聞列表。實質性跨門檻才算事件,否則是噪音。

存取 mixed 審查 professional_review 0 個必要欄位 5 條驗收

#10 T07 標案、附件與 deadline

一個標案公告頁。deadline 與附件的變動都要通知,時區不能算錯。

存取 mixed 審查 professional_review 7 個必要欄位 5 條驗收

排名 11–20

#11 N36 法院 docket 與新文件

一個法院 docket 查詢頁,模擬同一案件由 RSS、CourtListener API 與 RECAP 三個來源同時可查到,用來測試多來源去重、時區換算與受限文件的存取邊界。

存取 public 審查 automatic 11 個必要欄位 5 條驗收 條文為引用 extremes

#12 N40 市場催化新聞與 watchlist

一個股票/ETF watchlist 儀表板,價格由 JS 動態更新,新聞欄位另外標示發布與接收時間,用來測試 crossing 語意、來源延遲與訊號衝突。

存取 public 審查 automatic 11 個必要欄位 5 條驗收 條文為引用 extremes dynamic

#13 N41 已驗證網域與 email breach

一個網域 owner 已完成驗證才看得到的資安 breach exposure 頁面,用來測試驗證邊界、IDN/punycode 正規化與 PII 最小化。

存取 public 審查 automatic 9 個必要欄位 5 條驗收 條文為引用 gated urls

#14 N44 登入與 checkout 流程可靠性

一個模擬電商 checkout 流程的多步驟頁面,包含登入、購物車與付款前確認,用來測試 stop-before-mutation 與跨地區 quorum。

存取 public 審查 automatic 9 個必要欄位 5 條驗收 條文為引用 gated dynamic

#15 T04 航班票價與條件組合

一個航班搜尋結果頁,同時呈現含稅/未稅、幣別與行李政策等條件,用來測試跨來源票價比較的口徑一致性。

存取 public 審查 automatic 8 個必要欄位 5 條驗收 條文為引用 extremes

#16 T09 法規條文與主管機關公告

一份主管機關公告頁,呈現條文版本、生效日與 proposed/final 狀態,用來測試純排版 diff 與法律審查邊界。

存取 public 審查 automatic 9 個必要欄位 5 條驗收 條文為引用 extremes

#17 T03 演唱會與票券 offer

一個演唱會售票頁,座位區與價格會動態變化,包含 queue、CAPTCHA 與追加費用等情境,用來測試不搶票、不繞過 queue 的邊界。

存取 public 審查 automatic 10 個必要欄位 5 條驗收 條文為引用 dynamic extremes

#18 N34 商標申請、狀態與期限

一個商標檢索結果頁,包含近似文字、Unicode 混淆字元與跨租戶查詢情境,用來測試法律候選與相似度門檻。

存取 public 審查 automatic 9 個必要欄位 5 條驗收 條文為引用 urls extremes

#19 N42 已訂航班 disruption

一個已登入才看得到的航班行程追蹤頁,呈現已訂票旅客的即時航班狀態,用來測試 codeshare、時區與 consent 撤回邊界。

存取 public 審查 automatic 8 個必要欄位 5 條驗收 條文為引用 gated extremes

#20 T01 商品價格與真正可購買性

一個商品頁,包含多個 variant、賣家與運費稅金組合,URL 含有查詢參數與重複網址情境,用來測試真正可購買性與極端金額。

存取 public 審查 automatic 10 個必要欄位 5 條驗收 條文為引用 urls extremes

排名 21–30

#21 T21 藝人官方消息與公開行程

一個藝人官方網站的行程/預售頁,JS 動態渲染場次列表;同一場次也出現在授權售票頁與粉絲私人帳號轉貼中。

存取 public 審查 automatic 10 個必要欄位 6 條驗收 條文為引用 dynamic urls

#22 N35 專利申請、狀態與技術領域

一個 WIPO PATENTSCOPE 風格的公開檢索頁,含 publication、applicant 與 classification 欄位。

存取 public 審查 automatic 10 個必要欄位 5 條驗收 條文為引用 extremes urls

#23 N46 港口、邊境、關稅與航線風險

一個航運儀表板,JS 動態渲染 port congestion 與 ETA;同一港口在兩個資料商的儀表板上編號不同。

存取 public 審查 automatic 9 個必要欄位 6 條驗收 條文為引用 extremes dynamic

#24 T08 補助與 funding opportunity

一個 grants.gov 風格的補助搜尋頁,deadline 以來源時區顯示,並附申請文件附件清單。

存取 public 審查 automatic 12 個必要欄位 5 條驗收 條文為引用 urls extremes

#25 T12 API schema、deprecation 與 breaking change

一份自有 API 的 OpenAPI 文件與 changelog 頁,schema hash 與 rate limit 都是可觀測欄位。

存取 public 審查 automatic 10 個必要欄位 6 條驗收 條文為引用 gated urls

#26 T17 天氣警報與設施營運影響

一份 NWS CAP 風格的官方警報 feed,geometry 為 polygon,與設施 geofence 相交才有意義。

存取 public 審查 automatic 10 個必要欄位 7 條驗收 條文為引用 dynamic extremes

#27 T22 Fantasy/體育球員與球隊狀態

一個授權運動資料頁,需登入才能看到完整 lineup/injury 明細;比賽開始前更新最頻繁。

存取 public 審查 automatic 10 個必要欄位 6 條驗收 條文為引用 gated dynamic

#28 N37 臨床試驗新增、招募與 protocol 更新

一個 ClinicalTrials.gov 風格的官方 registry 頁面,protocol 文件與 eligibility 文字都是可觀測欄位。

存取 public 審查 automatic 8 個必要欄位 5 條驗收 條文為引用 urls extremes

#29 T06 職缺、薪資與 remote 條件

一個求職平台的職缺搜尋結果頁,SPA 動態渲染,薪資與 remote 用語常見不一致。

存取 public 審查 automatic 10 個必要欄位 5 條驗收 條文為引用 dynamic gated

#30 N33 App review 與產品訊號

一個 App Store Connect 風格的評論管理頁,評分、關鍵字與 volume 都是可觀測欄位。

存取 public 審查 automatic 11 個必要欄位 5 條驗收 條文為引用 extremes gated

排名 31–40

#31 T23 收藏/球鞋/卡牌稀有品與賣家狀態

一個跨平台的收藏品搜尋結果頁:同一款球鞋或卡牌在多個 marketplace 都可能出現,含 variant、grade、賣家分數與含運總價。

存取 public 審查 automatic 11 個必要欄位 6 條驗收 條文為引用 urls extremes

#32 N48 私募公司融資、併購、管理層與競爭動向

一個私募公司側寫頁:融資、併購、管理層與公開申報訊號都在頁面上,供 PE/VC/BD 研究,不作投資結論。

存取 public 審查 automatic 12 個必要欄位 6 條驗收 條文為引用 urls extremes

#33 T25 房產 listing、降價、法拍與公開紀錄

一個房產搜尋結果頁:listing、parcel 公開紀錄與法拍公告都在頁面上,用 polygon geofence 篩選,不作估價或交易。

存取 public 審查 automatic 12 個必要欄位 6 條驗收 條文為引用 extremes urls

#34 N47 供應商文件、terms、privacy、security 與 SLA 變更

一個供應商 Trust Center/SLA 文件頁:條款、價格、subprocessor 與 SLA 數字都可能改變,變更需路由給法遵責任人。

存取 public 審查 automatic 10 個必要欄位 6 條驗收 條文為引用 dynamic gated

#35 T11 Dependency release、security fix 與 breaking change

一個 GitHub repository 的 release/advisory feed:版本、安全公告與 breaking change 供 release manager 建立分組 migration task。

存取 public 審查 automatic 12 個必要欄位 6 條驗收 條文為引用 urls extremes

#36 T26 二手車 listing、VIN/stock no.、價格與里程

一個二手車搜尋結果頁:車型、年式、里程與 VIN 都在頁面上,跨市場比對車源但不評估車況。

存取 public 審查 automatic 11 個必要欄位 6 條驗收 條文為引用 extremes gated

#37 T02 翻新品與替代品真正補貨

一個翻新商品/替代品頁面:庫存狀態由前端 JS 渲染,需要兩次以上觀測才能確認真的補貨,而不是短暫快取命中。

存取 public 審查 automatic 11 個必要欄位 7 條驗收 條文為引用 dynamic gated

#38 N43 餐廳指定日期、時段與人數桌位

一個餐廳訂位頁:桌位表由前端 JS 動態渲染,符合日期/時段/人數的空位出現時通知,但不自動訂位。

存取 public 審查 automatic 11 個必要欄位 7 條驗收 條文為引用 dynamic urls

#39 N49 App keyword rank、featured、價格與競品 metadata

一個 app store 搜尋結果頁:keyword 排名、featured 徽章與競品 metadata 都在頁面上,估算資料要標示信賴區間。

存取 public 審查 automatic 12 個必要欄位 7 條驗收 條文為引用 urls extremes

#40 T05 商務旅客可取消、含早餐、地點與總價

一個飯店房價比較頁:房型、取消政策、早餐與含稅總價由 JS 動態渲染,需 final recheck 後才能確認可 book。

存取 public 審查 automatic 12 個必要欄位 6 條驗收 條文為引用 dynamic gated extremes

排名 41–50

#41 T20 交通路線延誤、停駛與恢復

一個交通營運者的路線狀態頁,同時對外提供 GTFS-RT 風格 feed;延誤秒數、停駛與恢復狀態都在頁面與 feed 裡。

存取 public 審查 automatic 14 個必要欄位 6 條驗收 條文為引用 dynamic extremes

#42 T27 食品、藥品與用品 recall

一個官方消費品 recall 公告頁,商品識別碼、批號與地區範圍都是可觀測欄位。

存取 public 審查 automatic 15 個必要欄位 6 條驗收 條文為引用 urls extremes

#43 T15 媒體文章首次命中與更新

一個新聞媒體的文章頁,含 RSS feed 與正文;標題、章節與內容雜湊都可觀測。

存取 public 審查 automatic 13 個必要欄位 6 條驗收 條文為引用 dynamic urls

#44 T16 預印本版本與撤稿

一個預印本典藏庫的論文頁,版本歷程、撤稿狀態與作者資訊都在頁面上。

存取 public 審查 automatic 14 個必要欄位 6 條驗收 條文為引用 extremes urls

#45 T18 地震 geofence 與 revision

一個官方地震測報頁,含 GeoJSON 事件摘要;規模、深度與座標都可觀測。

存取 public 審查 automatic 13 個必要欄位 6 條驗收 條文為引用 dynamic extremes

#46 T19 官方匯率與歷史 revision

一個官方匯率資料頁,含即期與歷史 fixing rate;幣別、日期與 revision 都可觀測。

存取 public 審查 automatic 12 個必要欄位 6 條驗收 條文為引用 gated extremes

#47 T28 創作者內容、合作與品牌提及

一個創作者的頻道/podcast/newsletter 聚合頁,內容發布、贊助與品牌提及都可觀測。

存取 public 審查 automatic 13 個必要欄位 6 條驗收 條文為引用 dynamic gated

#48 T30 在地競品商家與許可變更

一個在地商家頁,加上公開許可公告;地址、營業時間、菜單與許可狀態都可觀測。

存取 public 審查 automatic 14 個必要欄位 7 條驗收 條文為引用 gated dynamic

#49 T29 招生、文件與獎學金期限

一個學校招生頁,名額、文件、獎學金與截止時間都可觀測。

存取 public 審查 automatic 13 個必要欄位 6 條驗收 條文為引用 gated urls

#50 N50 公開醫療預約名額

一個診所公開預約頁,僅顯示科別、日期與時段空位,無登入、無病歷。

存取 public 審查 automatic 11 個必要欄位 7 條驗收 條文為引用 gated dynamic

兩種條文,兩種可信度

前十案的驗收條文是建置時讀進來的:規格文件一改,這些頁面下次產生就跟著改,不會有人需要記得同步。

其餘 40 案的規格以散文寫在逐案章節裡,沒有可供索引的條號,所以那些頁面上的條文是抄來的,並且每一頁都這樣寫明、附上章節位置。抄來的條文會安靜地過期——這不是瑕疵被藏起來,是這批規格目前的形狀,寫在頁面上讓讀者知道該去哪裡對照。

一件值得說清楚的事

這些目標是逐案寫的,而且應該如此:測試目標必須是某一個具體的商店、feed 或入口網站,否則沒有東西可以指向。

平台本身則相反——它必須在不知道這是哪一案的情況下服務任何目標,這一點由 watch/src/server/no-case-keyed-mappings.test.ts 強制執行。兩者不衝突:fixture 是資料,規則才不能逐案。