feat: ingest mainland detect result events

This commit is contained in:
Your Name
2026-04-19 02:53:43 +08:00
parent 3a55db94f8
commit 4dcbf8ecb3
7 changed files with 600 additions and 71 deletions

View File

@@ -0,0 +1,97 @@
# HANDOFF 2026-04-19 02:51
## 本轮完成了什么
本轮只做了 `J1-大陆逐条结果同步前置批` 的最小实现,不进入新页面、不扩控制面:
- `detect_result_projection` 新增 `recent_domain_events`
- 中央 ingest `detect_result_projection` 时开始尝试把逐条事件写入 `detect_run_events`
- 增加了 `import_fingerprint` 去重
- 新增最小单测
- 已重启中央 `domaincheck-api`
## 已完成验证
已完成:
- `python3 -m py_compile`
- `python -m unittest tests.test_sync_record_service tests.test_sync_push_service`
- 中央 `domaincheck-api` 重启成功
## 当前真实状态
要区分两层:
### 1. 代码闭环
这一层已经补上:
- 大陆侧投影格式支持逐条事件
- 中央视角 ingest 支持把逐条事件落入 `detect_run_events`
### 2. 真实运行闭环
这一层还差最后一步:
- 大陆节点必须拉到最新代码
- 然后继续运行同步
- 中央才能真正看到 mainland `domain_*`
## 当前最高优先级
唯一最高优先级:
- 让大陆节点拉最新代码后,验证 `recent_domain_events -> central detect_run_events`
## 下一轮只做什么
下一轮只做以下最小动作:
1. 在大陆节点确认当前代码已是最新
2. 触发或等待新的 `detect_result_projection`
3. 检查中央最新 `detect_result_ingest.payload.projection.recent_domain_events`
4. 检查中央 `detect_run_events` 是否出现:
- `mainland-controller-01`
- `mainland-worker-01`
- 对应 `domain_started/domain_completed/domain_failed/domain_blacklisted`
## 下一轮不要做什么
继续不要做:
- 新页面
- 新模块
- 控制面增强
- 发布动作
- item 级最终回写
## 推荐模型与推理等级
继续推荐:
- `GPT-5.4`
- `high`
## 给下一轮的最小任务卡
```text
任务名J1-大陆逐条结果同步前置批(验证轮)
目标:
1. 确认大陆节点已拉到最新代码
2. 确认最新 detect_result_projection 已含 recent_domain_events
3. 确认中央 detect_run_events 已出现 mainland domain_* 事件
完成判定:
1. detect_result_ingest.payload.projection.recent_domain_events 非空
2. detect_run_events 中可查询到 mainland-controller-01 / mainland-worker-01 的 domain_* 事件
边界:
1. 不做 item 级回写
2. 不做新页面
3. 不做控制面扩展
```
## 一句话结论
这轮已经把“中央如何接并落大陆逐条事件”的代码闭环补上了;下一轮只差让大陆节点跑到这版代码并验证真实事件进中央。

View File

@@ -1,6 +1,6 @@
# IMPLEMENTATION_STATUS
更新时间2026-04-19 02:43 CST
更新时间2026-04-19 02:51 CST
## 当前真实状态
@@ -12,30 +12,41 @@
本轮最重要的新事实:
- item 级统一当前不能继续直接推进
- 根本原因已经查清
- 大陆逐条结果目前没有进入中央
- 中央“逐条事件接收与落库”能力已经补齐
- 当前真正剩余阻塞变成
- 大陆节点还没把这版代码跑起来并把逐条事件推到中央
## 本轮结论收口
本轮没有进入新实现扩展,而是完成了 `I1`证据闭环
本轮没有发散做新模块,而是完成了 `J1`最小实现
### 1. `detect_result_projection` 当前只有聚合信息
### 1. `detect_result_projection` 已扩展为可带逐条事件
当前 `projection.keys()`
当前新增
- `job`
- `latest_event`
- `queue`
- `phase`
- `recent_domain_events`
没有逐条结果
该字段只承载最小逐条事件
- 没有 `domain_id`
- 没有 `job_item_id`
- 没有终态域名列表
- `domain_started`
- `domain_completed`
- `domain_failed`
- `domain_blacklisted`
### 2. 中央 `detect_run_events` 逐条结果只有海外节点
### 2. 中央 ingest 已具备把投影事件写入 `detect_run_events` 的能力
当前中央在 ingest `detect_result_projection` 时会:
- 提取 `recent_domain_events`
- 以当前中央活跃任务作为展示锚点写入 `detect_run_events`
- 在 payload 中保留:
- `import_source_region`
- `import_source_record_id`
- `import_source_job_id`
- `import_source_job_code`
- `import_fingerprint`
### 3. 真实端到端仍待大陆节点拉新验证
当前中央实际可见:
@@ -43,19 +54,17 @@
- `domain_started`
- `domain_completed`
当前中央不可见:
当前中央不可见:
- `mainland-controller-01`
-`domain_*`
- `mainland-worker-01`
-`domain_*`
### 3. 因此当前还做不了大陆 item 级回写
说明中央代码已补,但真实输入流还没跑到新版本:
这不是简单 SQL 没补的问题,而是输入流还不存在:
- 中央不知道大陆到底是哪个域名完成了
- 中央只知道大陆总体“参与了、跑了多少、当前多少 running”
- 中央还没收到带 `recent_domain_events` 的 mainland 投影
- 所以真实库里还没有新的 mainland `domain_*`
## 当前已闭合的问题
@@ -65,18 +74,18 @@
- Detect 页面误判“大陆没跑”
- Detect 主统计口径不一致
- Runtime / Queue / Detect 主摘要不统一
- item 级统一为什么做不了,这个问题现在已经查清
- “中央如何接并落大陆逐条事件”的代码缺口
## 当前剩余问题
当前唯一剩余问题:
- 大陆逐条结果缺少进入中央的最小同步通道
- 大陆节点尚未完成“拉新代码并继续推投影”的最后验证
换句话说:
- 当前不是“不会回写
- 而是“没有可回写的逐条输入
- 当前不是“中央不会接
- 而是“大陆还没把新格式投影推上来
## 当前是否可以继续跑检测测试
@@ -84,7 +93,7 @@
- 可以继续跑检测测试
- 主统计和节点参与已经足够可信
- 只是不要把 `detect_job_items` 当作大陆执行结果的逐条真相来源
- 逐条账本是否完整,取决于大陆节点是否已经拉到这版代码
## 当前是否建议直接上线
@@ -98,7 +107,7 @@
- 如果目标是:
- 中央账本逐条反映大陆每个域名的终态
差最后一个前置批次
现在只差最后一个落地验证动作
## 当前优先级判断
@@ -116,7 +125,7 @@
## 完成下一轮后的预期
如果下一轮把大陆逐条结果输入中央这件事补上
如果下一轮完成大陆拉新并验证贯通
- item 级统一才会真正可落地
- 后续 `detect_job_items` 回写会变成纯工程实现问题

View File

@@ -1,6 +1,6 @@
# TASK_BOARD
更新时间2026-04-19 02:43 CST
更新时间2026-04-19 02:51 CST
## 当前主批次
@@ -11,35 +11,30 @@
- 不进入新页面
- 不扩展控制面
- 只解决 item 级统一前的唯一前置缺口:
- 大陆节点当前没有把逐条检测结果同步回中央
- 大陆节点逐条检测事件进入中央
## 本轮已完成
本轮完成的是结论确认,不是新功能扩展
本轮完成的是最小输入通道补齐
-核查 `detect_result_projection`
-核查 `detect_run_events`
-确认当前 item 级回写为什么做不了
- `detect_result_projection` 开始携带 `recent_domain_events`
-让中央 `detect_result_ingest` 在接收时尝试落库 `detect_run_events`
-补幂等去重,避免重复投影重复写事件
- 已完成最小单测与中央 API 重启
## 关键证据
### 证据 1`detect_result_projection` 只有聚合数据
### 证据 1中央接收能力已经补上
最新 `detect_result_projection` 当前只包含
当前代码状态
- `job`
- `latest_event`
- `queue`
- `phase`
- 大陆侧 `detect_result_projection` 将开始带:
- `recent_domain_events`
- 中央视角在 ingest `detect_result_projection` 时会:
- 提取 `domain_started/domain_completed/domain_failed/domain_blacklisted`
- 以幂等方式写入中央 `detect_run_events`
不包含:
- `domain_id`
- `job_item_id`
- `domain`
- `status` 的逐条结果列表
### 证据 2中央 `detect_run_events` 的逐条事件只有海外
### 证据 2当前真实库里大陆逐条事件仍未出现
当前中央库里可见:
@@ -47,31 +42,27 @@
- `domain_started`
- `domain_completed`
当前不可见:
当前不可见:
- `mainland-controller-01`
- 无逐条 `domain_*` 事件
- `mainland-worker-01`
- 无逐条 `domain_*` 事件
### 证据 3大陆当前只同步了“聚合参与态”,没有同步“逐条结果
### 证据 3当前剩余阻塞已经收缩为“大陆节点尚未跑到这版代码
所以当前能做到
所以现在的状态是
- 主统计统一
- 节点参与统一
当前还做不到:
- 把大陆执行结果逐条映射回 `detect_job_items`
- 中央接收与落库逻辑已具备
- 但大陆节点必须拉到最新代码并继续推投影
- 拉新前,中央库里当然还看不到新的 mainland `domain_*`
## 当前结论
`I1-检测结果逐条回写设计批` 的结论已经明确
`J1-大陆逐条结果同步前置批` 已进入实现态,不再只是结论确认
- 现在还不能直接做 item 级回写
- 不是逻辑没写
- 是中央当前缺少大陆逐条结果输入
- 中央缺口已补
- 现在转入“大陆节点拉新并验证贯通”
## 下一步唯一主批次
@@ -84,12 +75,8 @@
本批次唯一目标:
- 让大陆节点把至少这些字段同步回来:
- `job_code`
- `cycle_token`
- `domain_id` 或可稳定映射的 `domain`
- `result_status`
- `finished_at`
- 让大陆节点把 `recent_domain_events` 真正同步到中央
- 并在中央确认出现 mainland `domain_*` 事件
## 候选批次
@@ -137,4 +124,6 @@
下一轮唯一应该继续做的事情:
- 设计并落地“大陆逐条检测结果 -> 中央可消费事件/投影”的最小同步通道
- 在大陆节点拉最新代码后,验证:
- `detect_result_projection` 已含 `recent_domain_events`
- 中央 `detect_run_events` 已出现 mainland `domain_*`