edit | blame | history | raw

CODE-DESIGN-PROJECT-INFO-BILI-DYNAMIC-REFRESH-COLLECTOR-V006

创建人员:dev.developer.project.secondary / infodev-2
事项:DEV-PROJECT-INFO-BILI-DYNAMIC-REFRESH-COLLECTOR-20260813-001
前序:V005 runtime timeout design HOLD/1
性质:F1 action error count/terminal projection 单点修订
状态:PENDING_F1_ONLY_REREVIEW / IMPLEMENTATION_FROZEN

1. 修订范围

本修订只闭环 F1_ACTION_ERROR_COUNT_AND_TERMINAL_PROJECTION_UNDEFINED。V005 已通过的单 action/单 observation、35/45/15/120 秒预算、retry0、timeout 不得证明 no-new、schema2 历史恢复、槽 018/019/020 不可变以及秘密/控制面边界全部冻结,不重开。

V006 撤销 V005 的笼统 refresh_action_outcome=ERROR。新 runtime-v2 evidence 只允许:

refresh_action_outcome=
  CONFIRMED |
  TIMEOUT |
  PRE_DISPATCH_ERROR |
  POST_DISPATCH_ERROR

不再接受无法判定 action 是否已发出的 ERROR。controller 必须在调用受支持 reload()/goto() 前后由自身状态机生成 outcome;调用者提交的 evidence 不得自行选择或改写该阶段。

2. 精确动作状态与计数

2.1 PRE_DISPATCH_ERROR

仅当失败发生在实际调用 reload()/goto() 之前,例如 exact tab 选择歧义、受支持 action handle 不可建立、总 deadline 在 dispatch 前已耗尽时成立。

  • refresh_count=0;pending 中的 max_refresh_count=1 只是上限,不能当实际计数;
  • observation_count=0,不得读取页面,因为没有可信 exact action target;
  • 不创建 browser evidence 文件之外的业务产物,不保存新条目,不更新 formal/state manifest;
  • no-new/coverage token 固定为 false;
  • 唯一终态=REFRESH_FAILED_PAGE_UNREADABLE
  • bounded diagnostics 只写 code=E_REFRESH_ACTION_PRE_DISPATCH 和冻结预算,不写 target 候选、raw browser error 或异常文本。

2.2 POST_DISPATCH_ERROR

仅当受支持 action 调用已经开始,但在获得 confirmed return 前以非 timeout 的受支持错误结束时成立。因为 action 可能已实际触发,按与 TIMEOUT 相同的保守副作用模型处理:

  • refresh_count=1;不得再次 reload/goto;
  • 若总 deadline 尚存,允许且只允许一次 exact observation,故 observation_count=1
  • observation READABLE + 新完整条目:允许按既有新条目事务保存,但 coverage_complete=falseno_new=false
  • observation READABLE + 空/仅旧条目:唯一终态=PARTIAL_DISCOVERY_UNCONFIRMED,不写 formal manifest;
  • observation timeout/error:唯一终态=REFRESH_FAILED_PAGE_UNREADABLE,不保存条目;
  • exact login/captcha/access/identity mismatch:唯一终态=REFRESH_BLOCKED_AUTH_OR_ACCESS
  • 任一路径都不得形成 REFRESH_CONFIRMED_NO_NEW

TIMEOUT 继续沿用上述 post-dispatch 保守投影;CONFIRMED 继续沿用 V005 已通过投影。

3. Evidence 与可信生成

runtime-v2 schema 3 对 runtime_observation 精确增加/冻结:

{
  refresh_action_outcome,
  refresh_action_elapsed_ms,
  refresh_count,
  observation_outcome,
  observation_elapsed_ms,
  observation_count
}
  • PRE_DISPATCH_ERROR 必须是 refresh_count=0observation_count=0、两 elapsed 为0、observation_outcome=NOT_ATTEMPTED
  • POST_DISPATCH_ERROR|TIMEOUT|CONFIRMED 必须是 refresh_count=1;前两者若非总 deadline 耗尽,必须 observation_count=1;若 action 返回时总 deadline 已耗尽,则 observation_count=0、observation_outcome=DEADLINE_EXHAUSTED、唯一终态 unreadable;
  • controller 在 CreateNew evidence 前,把 begin 返回的 run_id、pending schema/hash、action-dispatch boolean、单调起止值与计数写入 source-controlled envelope;CLI 机械验证组合,不接受单个自报 outcome;
  • outcome/count/elapsed/observation/terminal 任一矩阵不一致即 E_EVIDENCE_SCHEMA,两份 manifest 与 slot 不变。

4. 离线非真空验收矩阵

至少覆盖:

  1. PRE_DISPATCH_ERROR × READABLE-new 输入伪造:因 observation 必须 NOT_ATTEMPTED 而拒绝;零保存,unreadable;
  2. PRE_DISPATCH_ERROR × READABLE-empty 输入伪造:同上;
  3. PRE_DISPATCH_ERROR × observation-error 输入伪造:同上;
  4. 合法 PRE_DISPATCH_ERROR:count=0/0、唯一 unreadable、两 manifest 不变;
  5. POST_DISPATCH_ERROR × READABLE-new:count=1/1,可保存新完整条目但 no-new/coverage=false;
  6. POST_DISPATCH_ERROR × READABLE-empty:唯一 partial,不写 formal;
  7. POST_DISPATCH_ERROR × observation-error:唯一 unreadable,不保存;
  8. POST_DISPATCH_ERROR × deadline exhausted:count=1/0、唯一 unreadable;
  9. 任一 ERROR、错误 count、第二 observation、第二 action、POST_DISPATCH_ERROR+no-new 均 schema failure;
  10. 既有 TIMEOUT/CONFIRMED 矩阵、36 项离线回归及 formal manifest 前像不回退。

5. 边界

实现仍冻结到原 reviewer 对 V005+V006 组合设计 PASS/0。本修订不授权 Chrome/reload/goto、网络、正式写入、Raw CDP、坐标、Cookie/session、下载、媒体、F:\video、formal ana-data 或转写;不改判或重交 018/019/020 历史 evidence。