2026-03-31-account-survival-upgrade-implementation-plan.md 5.4 KB

Account Survival Upgrade Implementation Plan

结论

当前阶段不再把问题定义成"继续扩大指纹池".
最新实验已经证明:

  1. 注册与 probe 的 UA 指纹不一致, 确实是问题, 但已经修正.
  2. 即使 fingerprint_consistent = true, fresh 号仍可能在几十秒内 401 no_organization.
  3. 当前更强的根因是:
    • fresh 注册出口节点质量
    • 首用 probe 没有绑定注册代理
    • add_phone 成功号质量显著更差
    • 实验 cohort 混入旧号, 导致判断失真

因此, 本计划调整为先修 fresh 首用与实验卫生, 再做长期评分与健康状态机.


0. 约束与非目标

必须保持

  • 保持当前主线:
    • 单池 + backend API
    • main.py 统一入口
    • lite + cfmail + register
    • full + cpa
    • full + sub2api
  • 保持当前 cfmail 多活动域 runtime 语义.
  • 保持当前 add_phone token 恢复链:
    • direct session token
    • workspace flow
    • fresh login fallback
    • pending retry sidecar
  • 不恢复旧候选池 / 晋升池 / 两阶段池叙事.

这轮明确不做

  • 不做浏览器自动化重写.
  • 不做无限随机指纹.
  • 不把 add_phone 成功号直接改成另一套后端主线.
  • 不承诺"代码改了就一定长寿", 必须靠实验验证.

1. 当前阶段目标

G1. 修正 fresh 实验样本质量

  • responses_survival 只优先追踪带注册 provenance 的 recent accounts.
  • 减少旧号污染 cohort.

G2. 让首用尽量复用注册代理语义

  • 首次 responses 探测优先复用:
    • registration_proxy_key
    • 不可用时至少复用 registration_proxy_region

G3. 收紧 fresh 注册节点

  • fresh 注册优先只走 tw,sg.
  • 不再让 us 自然落入 fresh 主路径.

G4. 显式标记 add_phone 风险

  • 单池内新增 warmup 风险字段, 但不恢复候选池.
  • add_phone 成功号进入 warmup_required 状态.
  • survival probe 负责把它更新为:
    • pending
    • passed
    • failed

G5. 为下一阶段打基础

这轮完成后, 再决定是否进入:

  • cfmail domain score
  • account health state machine
  • bounded fingerprint profile pool

2. 实现顺序

Task 1. Fresh 实验卫生

目标:

  • responses_survival reseed 时优先选择:
    • recent accounts
    • registration_fingerprint_profile 的号

文件:

  • ops/responses_survival.py
  • core/settings.py
  • scripts/run_responses_survival.py
  • 对应 pytest

验收:

  • cohort 优先由新日志时代的 fresh 号组成
  • 旧号只在无 fresh provenance 样本时才补位或被跳过

Task 2. 首用绑定注册代理

目标:

  • probe 时优先复用 registration_proxy_key
  • 不可直接命中时, 至少按 registration_proxy_region 选代理

文件:

  • core/proxy_pool.py
  • ops/responses_survival.py
  • 对应 pytest

验收:

  • survival probe 对带 provenance 的账号能记录:
    • first_use_proxy_key
    • first_use_proxy_region
    • first_invalid_proxy_key
    • first_invalid_proxy_region

Task 3. Fresh 注册区域收敛

目标:

  • fresh 注册 worker 从代理池取节点时, 默认优先 tw,sg

文件:

  • core/settings.py
  • core/registration.py
  • 对应 pytest

验收:

  • register worker 从 proxy pool acquire() 时传入 fresh 区域偏好
  • 设置缺失时安全回退当前行为

Task 4. Add-phone warmup 风险标记

目标:

  • 单池内显式标记 add_phone 成功号风险, 但不改变单池主线

文件:

  • platforms/chatgpt/pool.py
  • ops/responses_survival.py
  • dashboard/api.py
  • 对应 pytest

字段:

  • warmup_required
  • warmup_state
  • warmup_passed
  • warmup_completed_at
  • successful_probe_count

状态:

  • not_required
  • pending
  • passed
  • failed

验收:

  • add_phone 成功号默认 warmup_required = true
  • survival 连续成功后可转 passed
  • 首次 invalid 时可转 failed

Task 5. 文档与可观测性

目标:

  • 把新设置与新诊断口径写进稳定文档

文件:

  • docs/CONFIG_REFERENCE.md
  • docs/TROUBLESHOOTING.md

3. 这轮不做的任务

以下内容保留为下一阶段候选, 本计划不直接实现:

  1. core/cfmail_domain_score.py
  2. ops/account_health.py
  3. bounded fingerprint profile pool
  4. dashboard 大改版

原因:

  • 当前最强根因不在这三块.
  • 必须先用更干净的 fresh cohort 把代理与 add_phone 风险验证清楚.

4. 验收标准

必须满足

  1. fresh cohort 优先使用带 provenance 的 recent accounts.
  2. first-use / first-invalid 能带上 probe 代理信息.
  3. register worker 默认优先 tw,sg.
  4. add_phone 成功号有明确 warmup 字段.
  5. targeted pytest 通过.
  6. 关键回归 pytest 通过.

实验输出

本轮完成后要能稳定回答:

  1. twsg 的寿命是否显著优于 us.
  2. add_phone 组是否比非 add_phone 组更短命.
  3. 首用代理与注册代理是否一致.

5. 风险

风险 1. strict fresh 区域偏好降低短时吞吐

接受这个风险. 当前目标是先提寿命质量, 不是继续放大低质量产号.

风险 2. 旧号 provenance 不完整

这轮通过 cohort 过滤减轻, 不试图补写旧历史事实.

风险 3. warmup 标记不等于业务隔离

这轮只做风险标记与实验分层, 不直接改变 CPA 主线语义.


6. 交付物

本轮交付物只包括:

  1. revised plan
  2. fresh cohort hygiene
  3. proxy affinity reuse
  4. fresh region preference
  5. add_phone warmup metadata
  6. docs update

不包含第二阶段长期评分与完整健康状态机.