CRS 内部控制台 · 域名

提交复核news.example.tw

站点改版是常态,判定不是一次性的。这是整套系统唯一能自我改进的环节。

将要发出的请求

POST sampling-url/v1/domains · 人工复核走这条,不走 /v1/recheck

field字段value取值
domains域名数组["news.example.tw"]
reason提交原因recheck

⚠️ 人工复核不伪造 signal。POST /v1/rechecksignal 四个取值全部由调度器的统计发出,它们是「调度器观察到了什么」的记录。人工触发没有对应的观测,填任何一个都是假证据 —— 所以走 /v1/domainsreason = recheck

⚠️ domains字符串数组,只用于 POST /v1/domainsPOST /v1/seeds。装对象的数组必须另起名字并带 _list(如 undetermined_domain_list)—— 同名不同元素类型是命名规范里最严重的违反

⚠️ 提交由控制台后端代发,前端不直连服务接口。服务间认证是固定 token(Authorization: Bearer),浏览器表单带不了也不该带。

确认提交 · 先看当前规则 · 取消

复核的三种触发

DEV-sampler.md §九

source来源basis依据24h count24h 次数
定期verified_at 到期2,910
调度器POST /v1/recheck,带异常信号193
人工指定域名,reason = manualrecheck25

调度器送来的四种信号

CONTRACT.md §四 POST /v1/recheck · signal 只有这四个取值

signal信号 meaning含义 24h count24h 次数
text_length_drop该域名 text_length 较历史中位数下降过多104
empty_streak_detected连续 N 次 fetch_status = empty51
dom_changedom_node_count 骤变26
api_auth_change后端接口开始返回 401 / 403 —— CSR 特有,文档层看不出来12

⚠️ 取值 empty_streak_detected 刻意带了 _detected 后缀。裸用 empty_streak 会与统计字段 empty_streak_count 只差一个后缀,读代码时极易看错 —— 枚举取值不得与字段名重名

⚠️ 统计由调度器维护(它收到每次 report 摘要),采样器不扫全库。api_auth_changehealth_signal.xhr_denied_count 超阈值时发出。

⚠️ 调度器只送「内容变了,你去重新判定」,不送「这个域名挂了,你接手」。站点可用性由调度器的熔断自己处理,不推给采样器。这是唯一允许的方向,也是唯一的一条边。

复核结果与动作

DEV-sampler.md §九

change变化 means含义 action动作
ratio 显著升高改成了 SSRverdict = ssr,回调调度器
ratio 显著降低更 CSR 或结构变了更新数值,重推 wait_selector
渲染后为空站点挂了或加了反爬verdict = unknown不立即改判,进待定池
接口鉴权变更api_auth_change 触发重推 wait_selector,必要时判 partial

⚠️ 第三行不立即改判:渲染后为空可能是暂时的。直接判 ssr 会让一个 CSR 站被永久丢弃 —— 漏判是不可逆的。进待定池,走 30 / 90 / 180 天退避重采。

⚠️ 规则表里的 ratio 是 3~5 样本的中位数不能直接与单页值比。复核要重新采样算中位数。

复核之后调度器必须重置统计

DEV-scheduler.md §五 · 引用,本服务不执行

采样器回调 /v1/rules 时,调度器要清空该域名的 domain_signal_statistic。不清会这样:

step步骤what happens发生什么
1站点确实改版
2复核确认,规则已更新
3但调度器的中位数仍是旧值
4下一页立刻再触发 text_length_drop
5★ 复核风暴

⚠️ 这一步在调度器那边执行,采样器不写 scheduler:domain_signal_statistic。跨服务写表是明令禁止的 —— 每张表恰好一个写入方。本页只是把这条依赖标出来,以便联调时确认对方做了。