From 451d0f75f0181481ffd67853fa3f5a512e0154ec Mon Sep 17 00:00:00 2001 From: Your Name Date: Sun, 19 Apr 2026 03:00:53 +0800 Subject: [PATCH] docs: capture mainland sync-agent blocker --- .../HANDOFF_20260419_0300.md | 68 ++++++++++ .../IMPLEMENTATION_STATUS.md | 103 +++++---------- docs/ops_center_runtime/TASK_BOARD.md | 117 ++++++------------ 3 files changed, 141 insertions(+), 147 deletions(-) create mode 100644 docs/ops_center_runtime/HANDOFF_20260419_0300.md diff --git a/docs/ops_center_runtime/HANDOFF_20260419_0300.md b/docs/ops_center_runtime/HANDOFF_20260419_0300.md new file mode 100644 index 0000000..5b6ab1c --- /dev/null +++ b/docs/ops_center_runtime/HANDOFF_20260419_0300.md @@ -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`。 diff --git a/docs/ops_center_runtime/IMPLEMENTATION_STATUS.md b/docs/ops_center_runtime/IMPLEMENTATION_STATUS.md index fdbe3f3..3831a90 100644 --- a/docs/ops_center_runtime/IMPLEMENTATION_STATUS.md +++ b/docs/ops_center_runtime/IMPLEMENTATION_STATUS.md @@ -1,6 +1,6 @@ # IMPLEMENTATION_STATUS -更新时间:2026-04-19 02:57 CST +更新时间:2026-04-19 03:00 CST ## 当前真实状态 @@ -10,72 +10,36 @@ - 分布式检测真实执行能力:约 `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` -- 以当前中央活跃任务作为展示锚点写入 `detect_run_events` -- 在 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` +- mainland 到中央的基础同步链是活的 +- 但 mainland 目前还没有跑到新版 `sync_agent` ## 当前已闭合的问题 @@ -85,28 +49,29 @@ - Detect 页面误判“大陆没跑” - 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 拉新 - 重启 `domaincheck-sync-agent` @@ -140,8 +105,8 @@ ## 完成下一轮后的预期 -如果下一轮完成 mainland 拉新、重启 `sync_agent` 并验证贯通: +如果下一轮完成 mainland 拉新并重启 `domaincheck-sync-agent`,并验证贯通: +- mainland `domain_*` 会进入中央 - item 级统一才会真正可落地 -- 后续 `detect_job_items` 回写会变成纯工程实现问题 - 整体可上线程度预计提升到 `95%~96%` diff --git a/docs/ops_center_runtime/TASK_BOARD.md b/docs/ops_center_runtime/TASK_BOARD.md index 912a238..4fbf08b 100644 --- a/docs/ops_center_runtime/TASK_BOARD.md +++ b/docs/ops_center_runtime/TASK_BOARD.md @@ -1,6 +1,6 @@ # TASK_BOARD -更新时间:2026-04-19 02:57 CST +更新时间:2026-04-19 03:00 CST ## 当前主批次 @@ -13,96 +13,69 @@ - 只解决 item 级统一前的唯一前置缺口: - 大陆节点逐条检测事件进入中央 -## 本轮已完成 +## 本轮最新复查结果 -本轮完成的是最小输入通道第二轮收口: +本轮没有新增功能扩展,只做了中央只读复查: -- 已让 `detect_result_projection` 开始携带 `recent_domain_events` -- 已让中央 `detect_result_ingest` 在接收时尝试落库 `detect_run_events` -- 已补幂等去重,避免重复投影重复写事件 -- 已补 `sync_agent` 自动产出 `detect_result_projection` -- 已完成最小单测与中央 API 重启 +- `runtime_ingest` 仍在持续刷新 +- `detect_result_ingest` 仍未刷新 +- `detect_run_events` 里仍没有 mainland `domain_*` ## 关键证据 -### 证据 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` - - 已刷新到 `2026-04-19 02:55:36` -- `detect_result_ingest.updated_at` - - 仍停在 `2026-04-17 16:57:32` + - 已刷新到 `2026-04-19 02:59:12` 说明: -- mainland 同步链是活的 -- 但还没有持续产出新的 `detect_result_projection` +- mainland controller 仍在向中央推运行时投影 -### 证据 3:自动产投影缺口已经补上 +### 证据 2:mainland 逐条结果投影仍未开始刷新 -当前代码状态: +中央最新记录显示: -- `sync_agent` 每个 tick 会基于 `active_job` 自动调用: - - `append_detect_result_projection_if_changed` +- `detect_result_ingest.updated_at` + - 仍停留在 `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` - - `domain_started` - - `domain_completed` +### 证据 3:中央逐条事件仍为空 -当前仍不可见: +当前中央查询结果: -- `mainland-controller-01` - - 无逐条 `domain_*` 事件 -- `mainland-worker-01` - - 无逐条 `domain_*` 事件 +- mainland `domain_started/domain_completed/domain_failed/domain_blacklisted` + - `count = 0` ## 当前结论 -`J1-大陆逐条结果同步前置批` 的代码闭环已经补完: +当前结论已经可以收敛为一句话: -- 中央会接 -- 中央会落 -- mainland `sync_agent` 也会自动产投影 - -现在只差: - -- mainland 拉最新代码 -- 重启 `domaincheck-sync-agent` -- 然后验证真实事件是否进入中央 +- 代码闭环已完成 +- 真实链路未贯通 +- 唯一剩余阻塞是 mainland 端没有真正跑到新版 `domaincheck-sync-agent` ## 下一步唯一主批次 唯一主批次仍然是:`J1-大陆逐条结果同步前置批` -范围: - -- 不做最终 item 回写 -- 先完成 mainland 真实事件进中央的端到端验证 - 本批次唯一目标: -- 让 mainland 通过新版 `sync_agent` 自动把 `recent_domain_events` 同步到中央 -- 并在中央确认出现 mainland `domain_*` 事件 +- 让 mainland 拉最新代码并重启 `domaincheck-sync-agent` +- 然后在中央确认出现: + - `detect_result_ingest.payload.projection.recent_domain_events` + - mainland `domain_*` ## 候选批次 @@ -114,27 +87,13 @@ - `J1` 完成后,中央已经能收到大陆逐条结果 -范围: - -- 将大陆逐条结果最小映射回 `detect_job_items` -- 只更新: - - `status` - - `finished_at` - - `last_error` - - `result_version` - ### Candidate J3 名称:raw/effective 运营文案收口批 进入条件: -- 如果用户只想先把页面提示再写清楚 - -范围: - -- 只补文案 -- 不改逻辑 +- 如果用户只想先补页面文案 ## 暂停项 @@ -142,7 +101,7 @@ - 新页面 - 新模块 -- 运维中枢增强 +- 控制面增强 - 发布动作 - 与大陆逐条结果同步无关的工作 @@ -150,6 +109,8 @@ 下一轮唯一应该继续做的事情: -- 在 mainland 节点拉最新代码并重启 `domaincheck-sync-agent` 后,验证: - - `detect_result_ingest.payload.projection.recent_domain_events` 已非空 - - 中央 `detect_run_events` 已出现 mainland `domain_*` +- 在 mainland 节点执行: + - `git pull` + - `systemctl restart domaincheck-sync-agent` + - `systemctl status domaincheck-sync-agent --no-pager -l` + - `journalctl -u domaincheck-sync-agent -n 80 --no-pager`