docs: capture mainland sync-agent blocker
This commit is contained in:
68
docs/ops_center_runtime/HANDOFF_20260419_0300.md
Normal file
68
docs/ops_center_runtime/HANDOFF_20260419_0300.md
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
# HANDOFF 2026-04-19 03:00
|
||||||
|
|
||||||
|
## 本轮做了什么
|
||||||
|
|
||||||
|
本轮没有进入新实现,只做了中央只读复查:
|
||||||
|
|
||||||
|
1. 复查 mainland `detect_result_ingest`
|
||||||
|
2. 复查 mainland `runtime_ingest`
|
||||||
|
3. 复查中央 `detect_run_events`
|
||||||
|
|
||||||
|
## 本轮结论
|
||||||
|
|
||||||
|
结论已经非常明确:
|
||||||
|
|
||||||
|
- mainland 同步链是活的
|
||||||
|
- 但 mainland 仍未真正跑到新版 `domaincheck-sync-agent`
|
||||||
|
|
||||||
|
## 证据
|
||||||
|
|
||||||
|
### 1. `runtime_ingest` 仍在刷新
|
||||||
|
|
||||||
|
- 最新 `updated_at` 到 `2026-04-19 02:59:12`
|
||||||
|
|
||||||
|
### 2. `detect_result_ingest` 没有刷新
|
||||||
|
|
||||||
|
- 最新 `updated_at` 仍停在 `2026-04-17 16:57:32`
|
||||||
|
|
||||||
|
### 3. mainland `domain_*` 仍为 0
|
||||||
|
|
||||||
|
- `detect_run_events`
|
||||||
|
- mainland `domain_started/domain_completed/domain_failed/domain_blacklisted`
|
||||||
|
- 当前 `count = 0`
|
||||||
|
|
||||||
|
## 当前唯一剩余动作
|
||||||
|
|
||||||
|
现在只剩一个外部动作:
|
||||||
|
|
||||||
|
1. mainland 节点拉最新代码
|
||||||
|
2. 重启 `domaincheck-sync-agent`
|
||||||
|
|
||||||
|
建议直接执行:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git pull
|
||||||
|
systemctl restart domaincheck-sync-agent
|
||||||
|
sleep 3
|
||||||
|
systemctl status domaincheck-sync-agent --no-pager -l
|
||||||
|
journalctl -u domaincheck-sync-agent -n 80 --no-pager
|
||||||
|
```
|
||||||
|
|
||||||
|
## 你执行完后,我下一轮只查什么
|
||||||
|
|
||||||
|
我下一轮只查这 3 个结果:
|
||||||
|
|
||||||
|
1. `detect_result_ingest.payload.projection.recent_domain_events` 是否非空
|
||||||
|
2. `detect_run_events` 是否出现 mainland `domain_*`
|
||||||
|
3. `detect/job/active` 的 `recent_events` 是否开始出现 imported mainland 逐条事件
|
||||||
|
|
||||||
|
## 继续不要做什么
|
||||||
|
|
||||||
|
- 不做 item 级最终回写
|
||||||
|
- 不做新页面
|
||||||
|
- 不做控制面增强
|
||||||
|
- 不做发布动作
|
||||||
|
|
||||||
|
## 一句话结论
|
||||||
|
|
||||||
|
现在代码已经补完,卡点不在中央,卡点只剩 mainland 端还没切到新版 `domaincheck-sync-agent`。
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
# IMPLEMENTATION_STATUS
|
# IMPLEMENTATION_STATUS
|
||||||
|
|
||||||
更新时间:2026-04-19 02:57 CST
|
更新时间:2026-04-19 03:00 CST
|
||||||
|
|
||||||
## 当前真实状态
|
## 当前真实状态
|
||||||
|
|
||||||
@@ -10,72 +10,36 @@
|
|||||||
- 分布式检测真实执行能力:约 `94%`
|
- 分布式检测真实执行能力:约 `94%`
|
||||||
- 距离“可稳定上线并放心用后台发起检测”:约 `93%~94%`
|
- 距离“可稳定上线并放心用后台发起检测”:约 `93%~94%`
|
||||||
|
|
||||||
本轮最重要的新事实:
|
## 本轮最新结论
|
||||||
|
|
||||||
- 中央“逐条事件接收与落库”能力已经补齐
|
这轮只做了只读复查,结论更明确了:
|
||||||
- mainland `sync_agent` 自动产 `detect_result_projection` 的缺口也已经补齐
|
|
||||||
- 当前真正剩余阻塞变成:
|
|
||||||
- 大陆节点还没把这版代码跑起来并重启 `sync_agent`
|
|
||||||
|
|
||||||
## 本轮结论收口
|
- 中央接收 `detect_result_projection` 的代码已经就位
|
||||||
|
- `sync_agent` 自动产 `detect_result_projection` 的代码也已经就位
|
||||||
|
- 但 mainland 端当前仍未真正跑到新版 `domaincheck-sync-agent`
|
||||||
|
|
||||||
本轮没有发散做新模块,而是完成了 `J1` 的第二轮最小实现:
|
## 当前证据拆分
|
||||||
|
|
||||||
### 1. `detect_result_projection` 已扩展为可带逐条事件
|
### 1. 代码闭环
|
||||||
|
|
||||||
当前新增:
|
已经完成:
|
||||||
|
|
||||||
- `recent_domain_events`
|
- `detect_result_projection` 支持 `recent_domain_events`
|
||||||
|
- 中央 ingest 会把逐条事件写入 `detect_run_events`
|
||||||
|
- `sync_agent` 会自动产出 `detect_result_projection`
|
||||||
|
|
||||||
该字段只承载最小逐条事件:
|
### 2. 真实运行闭环
|
||||||
|
|
||||||
- `domain_started`
|
当前仍未完成:
|
||||||
- `domain_completed`
|
|
||||||
- `domain_failed`
|
|
||||||
- `domain_blacklisted`
|
|
||||||
|
|
||||||
### 2. 中央 ingest 已具备把投影事件写入 `detect_run_events` 的能力
|
- `runtime_ingest` 持续刷新
|
||||||
|
- `detect_result_ingest` 没有刷新
|
||||||
|
- mainland `domain_*` 事件仍为 0
|
||||||
|
|
||||||
当前中央在 ingest `detect_result_projection` 时会:
|
这说明:
|
||||||
|
|
||||||
- 提取 `recent_domain_events`
|
- mainland 到中央的基础同步链是活的
|
||||||
- 以当前中央活跃任务作为展示锚点写入 `detect_run_events`
|
- 但 mainland 目前还没有跑到新版 `sync_agent`
|
||||||
- 在 payload 中保留:
|
|
||||||
- `import_source_region`
|
|
||||||
- `import_source_record_id`
|
|
||||||
- `import_source_job_id`
|
|
||||||
- `import_source_job_code`
|
|
||||||
- `import_fingerprint`
|
|
||||||
|
|
||||||
### 3. `sync_agent` 已会自动产出 `detect_result_projection`
|
|
||||||
|
|
||||||
本轮新增:
|
|
||||||
|
|
||||||
- `app.sync_agent` 每个 tick 会基于当前 `active_job`
|
|
||||||
- 自动调用 `append_detect_result_projection_if_changed`
|
|
||||||
|
|
||||||
这意味着:
|
|
||||||
|
|
||||||
- mainland 只要拉到这版代码并重启 `domaincheck-sync-agent`
|
|
||||||
- 就会自动开始补推 `detect_result_projection`
|
|
||||||
- 不再依赖额外访问 mainland 检测页面
|
|
||||||
|
|
||||||
### 4. 真实端到端仍待 mainland 拉新并重启 `sync_agent`
|
|
||||||
|
|
||||||
当前中央实际可见:
|
|
||||||
|
|
||||||
- `mainland-controller-01` / `mainland-worker-01` 心跳正常
|
|
||||||
- `runtime_ingest.updated_at`
|
|
||||||
- 已刷新到 `2026-04-19 02:55:36`
|
|
||||||
- `detect_result_ingest.updated_at`
|
|
||||||
- 仍停在 `2026-04-17 16:57:32`
|
|
||||||
- `detect_run_events`
|
|
||||||
- 仍无 mainland `domain_*`
|
|
||||||
|
|
||||||
说明:
|
|
||||||
|
|
||||||
- mainland 同步链活着
|
|
||||||
- 但 अभी还没有跑到会自动产新格式投影的这版 `sync_agent`
|
|
||||||
|
|
||||||
## 当前已闭合的问题
|
## 当前已闭合的问题
|
||||||
|
|
||||||
@@ -85,28 +49,29 @@
|
|||||||
- Detect 页面误判“大陆没跑”
|
- Detect 页面误判“大陆没跑”
|
||||||
- Detect 主统计口径不一致
|
- Detect 主统计口径不一致
|
||||||
- Runtime / Queue / Detect 主摘要不统一
|
- Runtime / Queue / Detect 主摘要不统一
|
||||||
- “中央如何接并落大陆逐条事件”的代码缺口
|
- 中央逐条事件接收缺口
|
||||||
- “mainland 必须人工访问检测页面才会产生 detect_result_projection”的自动触发缺口
|
- `sync_agent` 自动产出结果投影缺口
|
||||||
|
|
||||||
## 当前剩余问题
|
## 当前唯一剩余问题
|
||||||
|
|
||||||
当前唯一剩余问题:
|
当前唯一剩余问题:
|
||||||
|
|
||||||
- mainland 节点尚未完成“拉新代码并重启 `domaincheck-sync-agent`”的最后验证
|
- mainland 节点尚未完成“拉新代码并重启 `domaincheck-sync-agent`”
|
||||||
|
|
||||||
换句话说:
|
换句话说:
|
||||||
|
|
||||||
- 当前不是“中央不会接”
|
- 现在不是逻辑未实现
|
||||||
- 也不是“代码还没写”
|
- 不是中央映射失败
|
||||||
- 而是 mainland 还没跑到会自动产新格式投影的这一版
|
- 也不是检测任务没跑
|
||||||
|
- 而是 mainland 仍在跑旧版 `sync_agent`
|
||||||
|
|
||||||
## 当前是否可以继续跑检测测试
|
## 当前是否可以继续跑检测测试
|
||||||
|
|
||||||
当前结论:
|
当前结论:
|
||||||
|
|
||||||
- 可以继续跑检测测试
|
- 可以继续跑检测测试
|
||||||
- 主统计和节点参与已经足够可信
|
- 主统计和节点参与已经可信
|
||||||
- 逐条账本是否完整,取决于 mainland 是否已经拉到这版代码并重启 `domaincheck-sync-agent`
|
- 但中央逐条账本仍不能视为 mainland 最终真相
|
||||||
|
|
||||||
## 当前是否建议直接上线
|
## 当前是否建议直接上线
|
||||||
|
|
||||||
@@ -119,8 +84,8 @@
|
|||||||
那已经基本可用
|
那已经基本可用
|
||||||
|
|
||||||
- 如果目标是:
|
- 如果目标是:
|
||||||
- 中央账本逐条反映大陆每个域名的终态
|
- 中央逐条反映大陆每个域名的终态
|
||||||
那现在只差最后一个落地验证动作:
|
那还差最后一个外部动作:
|
||||||
- mainland 拉新
|
- mainland 拉新
|
||||||
- 重启 `domaincheck-sync-agent`
|
- 重启 `domaincheck-sync-agent`
|
||||||
|
|
||||||
@@ -140,8 +105,8 @@
|
|||||||
|
|
||||||
## 完成下一轮后的预期
|
## 完成下一轮后的预期
|
||||||
|
|
||||||
如果下一轮完成 mainland 拉新、重启 `sync_agent` 并验证贯通:
|
如果下一轮完成 mainland 拉新并重启 `domaincheck-sync-agent`,并验证贯通:
|
||||||
|
|
||||||
|
- mainland `domain_*` 会进入中央
|
||||||
- item 级统一才会真正可落地
|
- item 级统一才会真正可落地
|
||||||
- 后续 `detect_job_items` 回写会变成纯工程实现问题
|
|
||||||
- 整体可上线程度预计提升到 `95%~96%`
|
- 整体可上线程度预计提升到 `95%~96%`
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# TASK_BOARD
|
# TASK_BOARD
|
||||||
|
|
||||||
更新时间:2026-04-19 02:57 CST
|
更新时间:2026-04-19 03:00 CST
|
||||||
|
|
||||||
## 当前主批次
|
## 当前主批次
|
||||||
|
|
||||||
@@ -13,96 +13,69 @@
|
|||||||
- 只解决 item 级统一前的唯一前置缺口:
|
- 只解决 item 级统一前的唯一前置缺口:
|
||||||
- 大陆节点逐条检测事件进入中央
|
- 大陆节点逐条检测事件进入中央
|
||||||
|
|
||||||
## 本轮已完成
|
## 本轮最新复查结果
|
||||||
|
|
||||||
本轮完成的是最小输入通道第二轮收口:
|
本轮没有新增功能扩展,只做了中央只读复查:
|
||||||
|
|
||||||
- 已让 `detect_result_projection` 开始携带 `recent_domain_events`
|
- `runtime_ingest` 仍在持续刷新
|
||||||
- 已让中央 `detect_result_ingest` 在接收时尝试落库 `detect_run_events`
|
- `detect_result_ingest` 仍未刷新
|
||||||
- 已补幂等去重,避免重复投影重复写事件
|
- `detect_run_events` 里仍没有 mainland `domain_*`
|
||||||
- 已补 `sync_agent` 自动产出 `detect_result_projection`
|
|
||||||
- 已完成最小单测与中央 API 重启
|
|
||||||
|
|
||||||
## 关键证据
|
## 关键证据
|
||||||
|
|
||||||
### 证据 1:中央接收能力已经补上
|
### 证据 1:mainland 同步链仍然活着
|
||||||
|
|
||||||
当前代码状态:
|
中央最新记录显示:
|
||||||
|
|
||||||
- 大陆侧 `detect_result_projection` 将开始带:
|
|
||||||
- `recent_domain_events`
|
|
||||||
- 中央视角在 ingest `detect_result_projection` 时会:
|
|
||||||
- 提取 `domain_started/domain_completed/domain_failed/domain_blacklisted`
|
|
||||||
- 以幂等方式写入中央 `detect_run_events`
|
|
||||||
|
|
||||||
### 证据 2:mainland 当前只在持续推 `runtime_projection`
|
|
||||||
|
|
||||||
中央当前可见:
|
|
||||||
|
|
||||||
- `runtime_ingest.updated_at`
|
- `runtime_ingest.updated_at`
|
||||||
- 已刷新到 `2026-04-19 02:55:36`
|
- 已刷新到 `2026-04-19 02:59:12`
|
||||||
- `detect_result_ingest.updated_at`
|
|
||||||
- 仍停在 `2026-04-17 16:57:32`
|
|
||||||
|
|
||||||
说明:
|
说明:
|
||||||
|
|
||||||
- mainland 同步链是活的
|
- mainland controller 仍在向中央推运行时投影
|
||||||
- 但还没有持续产出新的 `detect_result_projection`
|
|
||||||
|
|
||||||
### 证据 3:自动产投影缺口已经补上
|
### 证据 2:mainland 逐条结果投影仍未开始刷新
|
||||||
|
|
||||||
当前代码状态:
|
中央最新记录显示:
|
||||||
|
|
||||||
- `sync_agent` 每个 tick 会基于 `active_job` 自动调用:
|
- `detect_result_ingest.updated_at`
|
||||||
- `append_detect_result_projection_if_changed`
|
- 仍停留在 `2026-04-17 16:57:32`
|
||||||
|
|
||||||
所以 mainland 拉新并重启 `domaincheck-sync-agent` 后:
|
而且当前最新 mainland `detect_result_ingest` 中:
|
||||||
|
|
||||||
- 不再依赖有人访问 mainland 检测页面
|
- `job_code = None`
|
||||||
- 逐条结果会自动进入中央
|
- `latest_event_type = None`
|
||||||
|
- `recent_domain_events = 0`
|
||||||
|
|
||||||
### 证据 4:当前真实库里 mainland 逐条事件仍未出现
|
说明:
|
||||||
|
|
||||||
当前中央库里可见:
|
- mainland 还没有开始推送新版 `detect_result_projection`
|
||||||
|
|
||||||
- `overseas-control-01`
|
### 证据 3:中央逐条事件仍为空
|
||||||
- `domain_started`
|
|
||||||
- `domain_completed`
|
|
||||||
|
|
||||||
当前仍不可见:
|
当前中央查询结果:
|
||||||
|
|
||||||
- `mainland-controller-01`
|
- mainland `domain_started/domain_completed/domain_failed/domain_blacklisted`
|
||||||
- 无逐条 `domain_*` 事件
|
- `count = 0`
|
||||||
- `mainland-worker-01`
|
|
||||||
- 无逐条 `domain_*` 事件
|
|
||||||
|
|
||||||
## 当前结论
|
## 当前结论
|
||||||
|
|
||||||
`J1-大陆逐条结果同步前置批` 的代码闭环已经补完:
|
当前结论已经可以收敛为一句话:
|
||||||
|
|
||||||
- 中央会接
|
- 代码闭环已完成
|
||||||
- 中央会落
|
- 真实链路未贯通
|
||||||
- mainland `sync_agent` 也会自动产投影
|
- 唯一剩余阻塞是 mainland 端没有真正跑到新版 `domaincheck-sync-agent`
|
||||||
|
|
||||||
现在只差:
|
|
||||||
|
|
||||||
- mainland 拉最新代码
|
|
||||||
- 重启 `domaincheck-sync-agent`
|
|
||||||
- 然后验证真实事件是否进入中央
|
|
||||||
|
|
||||||
## 下一步唯一主批次
|
## 下一步唯一主批次
|
||||||
|
|
||||||
唯一主批次仍然是:`J1-大陆逐条结果同步前置批`
|
唯一主批次仍然是:`J1-大陆逐条结果同步前置批`
|
||||||
|
|
||||||
范围:
|
|
||||||
|
|
||||||
- 不做最终 item 回写
|
|
||||||
- 先完成 mainland 真实事件进中央的端到端验证
|
|
||||||
|
|
||||||
本批次唯一目标:
|
本批次唯一目标:
|
||||||
|
|
||||||
- 让 mainland 通过新版 `sync_agent` 自动把 `recent_domain_events` 同步到中央
|
- 让 mainland 拉最新代码并重启 `domaincheck-sync-agent`
|
||||||
- 并在中央确认出现 mainland `domain_*` 事件
|
- 然后在中央确认出现:
|
||||||
|
- `detect_result_ingest.payload.projection.recent_domain_events`
|
||||||
|
- mainland `domain_*`
|
||||||
|
|
||||||
## 候选批次
|
## 候选批次
|
||||||
|
|
||||||
@@ -114,27 +87,13 @@
|
|||||||
|
|
||||||
- `J1` 完成后,中央已经能收到大陆逐条结果
|
- `J1` 完成后,中央已经能收到大陆逐条结果
|
||||||
|
|
||||||
范围:
|
|
||||||
|
|
||||||
- 将大陆逐条结果最小映射回 `detect_job_items`
|
|
||||||
- 只更新:
|
|
||||||
- `status`
|
|
||||||
- `finished_at`
|
|
||||||
- `last_error`
|
|
||||||
- `result_version`
|
|
||||||
|
|
||||||
### Candidate J3
|
### Candidate J3
|
||||||
|
|
||||||
名称:raw/effective 运营文案收口批
|
名称:raw/effective 运营文案收口批
|
||||||
|
|
||||||
进入条件:
|
进入条件:
|
||||||
|
|
||||||
- 如果用户只想先把页面提示再写清楚
|
- 如果用户只想先补页面文案
|
||||||
|
|
||||||
范围:
|
|
||||||
|
|
||||||
- 只补文案
|
|
||||||
- 不改逻辑
|
|
||||||
|
|
||||||
## 暂停项
|
## 暂停项
|
||||||
|
|
||||||
@@ -142,7 +101,7 @@
|
|||||||
|
|
||||||
- 新页面
|
- 新页面
|
||||||
- 新模块
|
- 新模块
|
||||||
- 运维中枢增强
|
- 控制面增强
|
||||||
- 发布动作
|
- 发布动作
|
||||||
- 与大陆逐条结果同步无关的工作
|
- 与大陆逐条结果同步无关的工作
|
||||||
|
|
||||||
@@ -150,6 +109,8 @@
|
|||||||
|
|
||||||
下一轮唯一应该继续做的事情:
|
下一轮唯一应该继续做的事情:
|
||||||
|
|
||||||
- 在 mainland 节点拉最新代码并重启 `domaincheck-sync-agent` 后,验证:
|
- 在 mainland 节点执行:
|
||||||
- `detect_result_ingest.payload.projection.recent_domain_events` 已非空
|
- `git pull`
|
||||||
- 中央 `detect_run_events` 已出现 mainland `domain_*`
|
- `systemctl restart domaincheck-sync-agent`
|
||||||
|
- `systemctl status domaincheck-sync-agent --no-pager -l`
|
||||||
|
- `journalctl -u domaincheck-sync-agent -n 80 --no-pager`
|
||||||
|
|||||||
Reference in New Issue
Block a user