跳转至

🎯 P22:AgentMeshOS 系统基座、职责域与运行闭环重构

📌 计划结论

P22 是 AgentMeshOS 的系统级治理计划,不是一次网络迁移、代码重写或控制台局部改版。它的目标是重新确认系统基座、模块职责、探针业务、告警处理、AI Boss 协作、状态数据和 Console 导航之间的关系,消除当前“部分功能已经实现,但职责、入口和闭环没有统一”的问题。用户已于 2026-11-03 确认本总范围,作为后续 P22-0 只读盘点的边界。

本计划已于 2026-11-03 完成核心范围并归档,但不是原计划全部验收通过。最终收口证据和验收边界见已完成归档;本页保留为详细计划、职责矩阵、验收契约和历史决策原文。

依据是当前架构入口 docs/architecture/index.md、项目宪法 docs/architecture/02_项目宪法.md、总体架构 docs/architecture/03_总体架构设计.md、核心模块设计 docs/architecture/04_核心模块设计.md,以及 P19、P20、P21 的现有计划与收口记录。影响是 P22 将成为后续系统整改的统一范围边界,防止继续用局部补丁修复单个页面或单条告警链路。

当前文档的定位是详细计划与验收底稿:它负责冻结范围、边界、依赖、工作包和验收方向。依据是项目规则要求“完整工作包、四态状态和阶段出口”与“当前阶段摘要”分离维护。影响是后续复核必须同时对照本页和已完成归档,不能只引用计划阶段的初始判断。

🧾 P22 最终收口记录(2026-11-03)

收口项 最终结论 生产证据
101 网络稳定性 无线永久关闭后完成重启复验,只有有线默认路由与 DNS nmcli、ip route、resolvectl、Tailscale BackendState
Console 职责域导航 六个一级职责组已上线,支持折叠、展开、当前路径恢复 生产 Console 静态回读与浏览器契约
恢复与 AI Boss 分离 recovery_status 独立于 handling_status,恢复不再冒充 AI Boss 已处理 告警状态机测试与 API 契约
网络唯一数据源 节点 UDP 只使用 101、102 双源 Tailnet 快照,不再回退 R4 拓扑负向回归 PASS
R4 运行对象退役 101、102、RR 的相关 service、timer 和当前快照均已移除 三节点 LoadState=not-found 与运行目录回读
R4 历史归档 单元、快照、程序文本、状态、二进制哈希和环境文件元数据已保存到 101 备份盘并附 SHA256 清单 20261103T201022+0800 与 20261103T203934+0800 两个批次
生产部署回读 API Gateway v0.18.0、Console 与文档站镜像健康,Reachability Refresh 执行器哈希一致 容器健康、镜像 revision、/health 与文件 SHA256

🧭 初始化决策与分支边界

分支 原始设想 当前决定 处理方式
分支一:建立总计划 先建立 P22 总计划,再逐项讨论、修正和执行,最后统一更新架构基座与 Console 重新启动 作为当前 P22 主线
分支二:先改整体网络架构 先迁移 RR 或改变整体节点网络,再用新网络约束 P22 取消 不再拆分工作包,不进入 P22
分支三:推倒重建整套系统 新建一套干净生产栈,整体交割后下线旧系统 暂停 不作为 P22 前置条件,不继续向下分发
代理链路与节点网络分离 将代理网络职责从节点网络中分离 保留为局部议题 作为 P22 的一个候选工作包,不代表 P22 全部范围

P22 的正式方向是:先认清系统,再确认职责,再重建闭环,最后统一修改基座和 Console。网络架构迁移和整套系统重建若未来重新启动,必须另立计划并重新评审。

📚 目录

🧩 系统范围与目标

目标范围

领域 本计划要解决的问题 预期结果
系统基座 架构文档与实际运行职责存在漂移 形成一份与生产事实一致的职责模型
Agent 与节点 Agent、节点、网络节点、控制面节点和平台服务边界混杂 每个节点和模块有明确角色、能力、权限和状态来源
探针体系 探针既有网络探测,也有业务健康、运行态和资源检查,但没有完整清单 每个探针都有业务目的、运行状态、数据出口和责任归属
告警中心 告警产生、恢复、关闭和“已处理”之间责任不清 明确发现、通知、处置、恢复和关闭的状态机
AI Boss AI Boss 是否参与处理、是否真的执行过、是否只是展示不清楚 AI Boss 处理记录与告警事件形成可验证关联
Console 导航 告警中心、OA、AI 平台等被错误放入 Agent 状态 按工作台、Agent 与节点、网络态势、平台服务、告警与处置、系统维护重新组织
数据与证据 页面可能使用不同快照或重复探测 统一权威数据源、更新时间、证据引用和过期标识
架构文档 原始文档描述的架构和当前实际系统不同 讨论定稿后一次性更新基座,保留历史更正记录

明确不包含

本阶段不执行 RR 迁移、不更换控制面、不新建第二套生产 Runtime、不重建整套 AgentMeshOS、不改动生产网络、不自动恢复已暂停的 P19 工作包,也不因为 P22 立项就重新启用已归档阶段。

🧭 目标 Console 信息架构

用户已经暂时接受以下六个一级方向,作为 P22 的初始设计约束。它们是待评审的目标结构,不代表当前 Console 已经完成改造。

一级导航 主要内容 归属边界
工作台 当前问题、待处理事项、系统总览 面向日常工作的入口,不复制底层状态机
Agent 与节点 Agent 状态、节点管理、任务运行、节点能力 展示 Agent 和节点运行事实
网络态势 实时分布图、网络可达性、节点路径视图、双节点诊断 展示 IP、TCP、UDP、Tailnet、Peer Relay、DERP 和业务链路
平台服务 OA 平台、AI 平台、存储与文件、搜索与外部服务 展示平台服务,不归入 Agent 状态
告警与处置 当前告警、历史告警、AI Boss 处理记录、恢复与审计 展示错误输出和处置闭环
系统维护 发布与部署、运行检查、变更记录、系统证据 面向维护和证据,不作为日常首页入口

“基线、变更、例外、审计”等治理资料继续保留,但原则上作为第二层证据或详情内容,不再作为普通用户的第一层导航。

导航层级可读性与折叠交互

当前 Console 已经存在菜单分级,问题不是“没有层级”,而是层级视觉差异和展开状态不够清楚。P22-5 必须把以下内容作为正式设计目标:

层级 必须表现 交互要求 验收重点
一级导航 平台主领域,如“工作台”“网络态势”“告警与处置” 始终可识别;当前一级区域有明确选中状态 用户能一眼看出当前属于哪个系统领域
二级导航 该领域下的功能组,如“网络可达性”“节点路径视图” 与一级导航有稳定缩进、字号、颜色或分隔差异 不得与一级菜单混成同一层
三级或页面入口 具体页面、详情或诊断入口 只在需要时展示,避免首屏过度展开 能看出它属于哪个二级功能组
折叠状态 当前未展开的功能组 显示折叠图标和展开方向,不隐藏当前选中路径 用户能知道还有下级内容
展开状态 当前正在浏览或操作的功能组 支持展开、收起;当前路径保持可见 切换页面后状态不丢失或产生误导
移动端状态 有限宽度下的导航层级 使用同一套自定义抽屉/折叠交互,不横向溢出 一级、二级、当前项仍能区分

推荐交互是“一级导航可见,二级导航按组折叠,当前路径自动展开,用户可以手动收起;刷新或重新进入时恢复合理的当前组状态”。这不是简单增加箭头,而是要同时定义缩进、字号、颜色、分隔线、选中态、悬停态、键盘焦点、移动端行为和无障碍语义。最终视觉方案必须以当前 Console 主题为基准,不能引入浏览器原生 alert、prompt、confirm 或与项目主题不一致的系统弹窗。

🧭 P22-0 详细规格:范围冻结与事实盘点

📌 工作包结论

P22-0 不是“把已有文档再读一遍”,而是建立后续所有职责、页面和状态判断的事实基线。它必须只读盘点当前仓库、运行服务和 Console 页面,形成一份带来源、时间、状态和可信等级的资产清单。依据是项目宪法中的“真实状态优先”原则,以及 P22 当前发现的架构、探针、告警和导航漂移。影响是 P22-1 和 P22-5 只能使用 P22-0 已冻结的事实,不能按页面名称或历史记忆自行推断。

📊 盘点范围与证据优先级

盘点域 必须回答的问题 首选证据 禁止替代
架构文档 哪些文件是现行权威,哪些只是历史或归档 docs/architecture/、docs/plans/state.json、计划索引 只看路线图标题
Console 页面 当前有哪些路由、页面、标签、入口和重复页面 已部署 Console 路由清单、API 返回、真实浏览器页面 只看导航文字
导航结构 每个入口的一级、二级、三级归属是什么 页面路由与实际功能映射 按文件目录猜归属
探针 探针的业务目的、调度、输入、输出和运行状态是什么 注册配置、timer/service、运行快照和日志 只按告警表反推探针
告警 哪些探针真正进入告警,恢复和关闭由谁触发 告警事件、恢复事件、状态机和审计 只看当前角标
AI Boss 是否接收、分析、执行、等待人工和完成 Runtime 事件、处理记录、动作审计 把告警已恢复当成 AI Boss 已处理
数据源 哪个页面读取哪个快照或接口,是否重复探测 API 路由、快照字段、刷新器和调用记录 只按页面显示结果判断
运行职责 当前节点、服务、Agent、网络和平台服务各自承担什么角色 部署清单、服务状态、架构文档和实时回读 只按主机名称判断

证据优先级固定为:实时运行回读 > 正式配置/代码契约 > 当前架构文档 > 计划与历史记录 > 推断。低等级资料可以提出待核对项,但不能直接冻结为系统事实。每条事实至少记录来源、读取时间、对应对象、状态和“已验证/待验证/冲突”标记。

🧩 P22-0 产物与字段

P22-0 必须产出以下四份结果;它们属于计划验收材料,不新增运行时数据库。

产物 最低内容 后续用途
系统事实清单 模块、服务、节点、页面、探针、告警、事件、数据源和状态 作为 P22-1 职责边界输入
页面归属初表 路由、页面名称、当前入口、目标一级/二级/三级归属、重复/冲突标记 作为 P22-5 导航重构输入
探针—告警—AI Boss 关系表 探针目的、运行状态、是否告警、恢复事件、AI Boss 入口和证据 作为 P22-2、P22-3 输入
冲突与待决清单 文档与运行态不一致、重复权威源、缺失页面、未登记探针和历史残留 作为 P22-1 和 P22-6 的整改边界

每条清单记录至少包含:人类可读名称、内部对象标识、所属职责域、权威来源、更新时间、当前状态、证据位置、冲突说明和下一步。内部编号只能作为二级证据,不能作为用户界面的主标题或结论。

🔧 P22-0 执行步骤

  1. 固定本轮读取范围和只读边界,确认不修改 state.json、生产配置、服务和页面代码。
  2. 读取架构入口、项目宪法、核心模块、AI 协作、部署规范、路线图、P19 至 P21 计划和当前计划看板。
  3. 盘点 Console 当前导航、路由、页面功能、API 来源和页面重复项,区分“存在于代码”“已发布”“当前可访问”三种状态。
  4. 盘点探针、刷新器、timer、service、告警适配器、恢复事件和 AI Boss 处理事件,建立对象关系,不以告警记录反推全部探针。
  5. 对每一项冲突保留双方证据,先标记为“冲突/待决”,不使用局部补丁掩盖差异。
  6. 由用户确认范围和重大职责冲突后,冻结 P22-0 基线,才允许进入 P22-1 和 P22-5 的详细设计。

🧪 P22-0 完成标准

验收项 通过条件 失败表现
范围完整 架构、Console、探针、告警、AI Boss、数据源和节点职责均有记录 只盘点某一个页面或某一类探针
证据可追溯 每条事实可回指文件、接口、运行回读或日志 只有结论没有来源
状态不混淆 设计、仓库修改、已部署、已验证四态分开 用计划文字冒充生产完成
冲突不丢失 文档与运行态冲突单独登记并保留两侧证据 直接选择一侧覆盖另一侧
只读边界成立 没有代码、配置、服务或生产写入 盘点过程改变运行状态
用户可读 主表使用业务名称和人类可读状态,技术字段折叠为证据 直接把编号、端口和内部字段当主结论

📊 P22-0 只读盘点记录(2026-11-03)

本轮已完成第一批只读事实盘点,范围覆盖当前工作区的架构入口、Console 导航与路由、API Gateway 告警接口、AI Runtime 告警生命周期、探针源码、systemd 单元定义,以及 101 本机的探针 timer/service 运行回读。结论是:P22-0 尚未完全冻结,但已经确认了三类必须进入后续职责重构的事实:Console 目前只有视觉分组,没有真正的一级/二级/三级导航;探针与告警的接入关系是“部分统一、部分独立”;运行检查把“按时启动”与“业务探测成功”混在了一起。

证据边界如下:源码和仓库配置属于“正式定义已确认”;101 本机 pcdell-101 的 systemd 回读属于“当前节点运行态已确认”;RR/API Gateway 正式告警数据库、102、RR、MM、d02、DD、dog 的生产运行态在本轮尚未直接回读,因此不能把本表写成全网生产结论。影响是后续 P22-0 仍需要补做跨节点和告警数据库的只读核对,但不需要推翻本轮已确认的职责冲突。

🧭 Console 页面与导航归属初表

事实项 当前只读结论 证据 状态与影响
当前视觉分组 只有“工作台”“Agent 状态”“系统入口”三个平面分组 tools/console-site/src/index.html 的 nav-label 与连续 nav-item 仓库源码已确认;尚未形成真正层级
Agent 状态混入内容 网络态势、告警中心、AI 平台运行概览、CPA、MCP 记忆、Web 搜索、OpenCode 记忆库、OmniRoute 均放在该组 tools/console-site/src/index.html 仓库源码已确认;与 P22 目标职责冲突
网络页面内部结构 网络态势页已有“网络可达性”“网络态势实时分布图”“节点路径视图”三个标签,并已有“两节点链路诊断” tools/console-site/src/index.html、tools/console-site/src/app.js 仓库源码已确认;P22 不应重复创建网络页面
路由与数据来源 #topology 读取 /api/network/topology;#alerts 读取 /api/alerts?scope=all;AI Boss 读取 /__agentmeshos/boss/v1 tools/console-site/src/app.js 仓库源码已确认;三者数据边界可继续统一
折叠/展开 导航没有组级折叠按钮、父子层级状态或当前路径自动展开逻辑;现有折叠主要位于页面内部 tools/console-site/src/index.html、tools/console-site/src/app.js 仓库源码已确认;属于 P22-5 实施缺口
页面主归属 当前导航按历史入口排列,不是按 Network、Platform、Alert、AI Boss 等职责域排列 tools/console-site/src/index.html、tools/console-site/src/app.js 仓库源码已确认;需由 P22-1 冻结后改造

🧪 探针、调度、业务目的与告警出口关系表

下表只列出本轮已在仓库中找到的正式探针或探针相关机制。直接接入告警表示源码中明确调用统一告警适配器或告警评估器;仅业务输出表示当前只发现快照、日志、退出码或专用接口,尚未证明会进入告警中心。

探针或机制 业务目的 调度/来源 当前输出 告警中心关系 当前状态
中国网络可达性 / Globalping 观察中国方向主机、入口和网络可达性 tools/network-probe/src/collector.py、agentmeshos-globalping-china-probe.py、网络采集部署脚本 网络可达性快照与配额台账 网络拓扑可在 --alert 时投影 network-topology;Globalping 采集器是否独立生成告警仍需生产回读 定义已确认,生产状态待核对
DERP 资格探测 根据可达性结果维护 Headscale DERP 资格/地图 tools/network-probe/src/derp_eligibility_probe.py、agentmeshos-derp-eligibility.py、对应 timer DERP 资格快照、Headscale 资格计划 本轮未确认其直接调用统一告警适配器;不能把“资格变化”自动等同于告警 定义已确认,告警关系待核对
Tailnet UDP 101/102 在同一套 Tailnet 网络中,由 101、102 两个观测点观察直连、Peer Relay/DERP 路径 tools/tailnet-udp-probe/src/probe.py 与两节点部署脚本,5 分钟一轮 tailnet-udp-v1.json、tailnet-udp-102-v1.json 本轮源码未确认其直接进入告警;网络页面读取统一快照,不能据此推断已产生告警 101、102 timer 均已回读为 active/enabled
R4 Proxy UDP 101/102 观察代理 UDP/QUIC 业务通道 tools/proxy-udp-probe/src/probe.py、两节点部署脚本 proxy-udp-v1.json、proxy-udp-102-v1.json 由 tools/probe-plan/src/alert_eval.py 统一评估,并经 agentmeshos-probe-alert.sh 使用 runtime-probe scope 101、102 timer 均已回读为 inactive/disabled;只能列为退役/人工诊断
R4 探测计划器与告警评估器 分配 101/102 探测槽位并根据合并结果形成告警 scripts/deploy/probe-plan/agentmeshos-probe-plan-deploy.sh;计划每 1 分钟刷新,告警评估每 5 分钟 计划文件、状态文件、告警去重状态 直接接入统一告警适配器 RR 已回读为已安装但 inactive/disabled;属于退役对象
探针陈旧检查 检查一组 timer/service 是否按周期触发 agentmeshos-probe-stale-check.py,5 分钟一轮 每个登记单元的年龄、缺失或启动异常结果 直接向 runtime-probe 发送 DEGRADED/HEALTHY 101 本机运行正常,但监测范围不完整
备份健康检查 检查备份服务、独立备份盘和最近成功时间 agentmeshos-backup-health-check.sh,5 分钟一轮 备份健康、磁盘挂载和容量结论 直接使用 Console 告警提交入口;恢复事件也由脚本发送 101 本机最近一次执行成功
OmniRoute 健康观察 记录迁移后的 OmniRoute 服务、边缘代理和官方健康事实 agentmeshos-omniroute-health-observation.py,15 分钟一轮 /srv/codex-hub-backup/agentmeshos/omniroute-health/observations/ 下的证据文件与退出码 本轮未找到直接调用统一告警适配器的源码证据;目前主要依赖 systemd 失败态和陈旧检查 101 本机连续以退出码 1 失败,需单独处理
Edge DNS 控制器 评估保存的 Globalping Edge 快照并执行受控 DNS 切换 agentmeshos-edge-dns-controller.py,30 秒一轮 Edge 候选、切换和 DNS 评估状态 直接使用 agentmeshos-probe-alert.sh 投影 runtime-probe 101 本机最近一次执行成功
Home Bridge 状态拉取 拉取 Home Codex Host Bridge 只读状态 agentmeshos-home-bridge-status-pull.sh,2 分钟一轮 Home Bridge 状态快照 直接使用统一告警适配器 101 本机最近一次执行成功
Runner 容量门禁 / 卡死看门狗 检查 GitHub Actions runner 容量、卡死和必要的受控恢复 runner-capacity-gate.sh、runner-stall-watchdog.sh,1/5 分钟一轮 runner 状态、日志和动作结果 直接使用统一告警适配器 101 本机 timer 运行,业务结果仍需独立核对
Android ADB 网络桥 读取 Android 设备网络计数并导入清洗快照 agentmeshos-android-adb-network-bridge.sh、agentmeshos-android-network-probe-import.sh,1 分钟一轮 Android 探针快照与 API 接收记录 直接使用统一告警适配器;业务数据另有 /api/android/probes/ingest 101 本机 timer 运行,设备业务状态待核对
ClawBot 状态探针 检查微信/ClawBot 绑定、通道和探测结果 agentmeshos-clawbot-status.py ClawBot 脱敏状态快照 直接使用 runtime-probe;支持 --no-alert,因此存在“只写快照不告警”的分支 定义已确认,实际启动参数待核对
日志与资源门禁 检查日志风暴、磁盘阈值与 OOM 签名 agentmeshos-log-guard.sh 资源台账与退出码 直接使用统一告警适配器 101 本机 timer 运行
SearXNG/搜索健康 检查搜索服务或外部搜索健康 searxng-google-health、searxng-endpoint-probe 单元 日志和健康结果 本轮未确认所有搜索检查都进入统一告警 需要逐单元核对

本表暴露出的核心缺口是:项目存在“探针注册表”,但还没有一份可供 Console 读取的统一探针目录。当前 agentmeshos-probe-stale-check.py 只登记 7 个单元,而 101 本机实际还存在 Android、Memory、Edge DNS、Home Bridge、SearXNG、备份、Tailnet UDP、项目副本等其他观察对象;其中 memory-probe-101.timer 在 101 本机回读为 enabled/active,但对应的仓库部署单元未在本轮限定的正式定义中找到,应标为“运行中、来源待确认”,不能据此删除,也不能继续作为无人负责的隐式探针。P22-2 必须先定义“正式探针目录”和“非告警业务观察”的边界,不能继续靠脚本列表和告警记录拼接。

🔔 告警发现、恢复、AI Boss 处理与关闭关系表

环节 当前源码行为 已确认依据 当前判断
故障发现 探针或 Runtime 通过 HMAC 签名提交 /api/alerts/ingest;同一去重键重复上报只刷新最近观测时间和次数 tools/api-gateway/src/main.py 的告警接收与去重逻辑 发现链路存在
恢复发现 severity=resolved 的恢复事件进入接收接口;link_recovery_alert() 按组件上下文关联活动告警 tools/api-gateway/src/main.py 恢复由来源探针报告,不等于 AI Boss 执行修复
自动变为已处理 API Gateway 初始化时会把 severity=resolved 的待处理记录改成 handling_status=completed;后续恢复事件也会把匹配活动告警标记为 completed initialize_alert_store()、link_recovery_alert() 这正是“没有人手工处理,但告警显示已处理”的代码原因
告警已读 Console 的 /read 只记录管理员查看和审计,不改变故障处置状态 tools/api-gateway/src/main.py、tools/console-site/src/app.js 已读与已恢复/已处理应继续分开
AI Boss 接收 Console 创建 Incident,Runtime 先写 processing,再调用 alerts.update_incident() tools/console-site/src/app.js、ai-runtime/src/main.py、ai-runtime/src/alerts.py AI Boss 接收链路存在
AI Boss 完成 当前多数告警类型进入 needs_benson_decision;没有已验证 Handler 时不会自动修复 ai-runtime/src/main.py 的 process_incident() AI Boss 处理与来源恢复是两条独立链路
历史关闭 旧 C2/C3 事件在 Gateway 初始化时按历史截止时间标记完成并写入 historical_closed tools/api-gateway/src/main.py 历史自动关闭必须在页面单独标明,不能进入当前告警
当前闭环是否完整 发现、恢复、告警投影和 AI Boss 处置对象都有;但探针目录、生产事件关联、恢复来源和跨节点数据库回读尚未统一 以上源码与 101 本机回读 当前只能判定为“源码闭环、运行态未冻结”

⚠️ 已确认冲突与根因候选

冲突 证据 根因判断 P22 后续处理
探针按时触发但业务失败仍被判健康 101 本机 OmniRoute 观察在 2026-11-03 01:32 至 03:02 多轮退出码 1;同一时段陈旧检查仍输出 HEALTHY probe-stale-check.py 有意只把 200/201/203/216/217/218/226 视为启动失败,普通退出码 1 被当成“探针确实运行”而不是“业务失败” P22-2/P22-4 明确区分“调度健康”“探针执行成功”“业务目标健康”三种状态
探针清单不完整 陈旧检查只登记 7 个单元;101 本机还存在未纳入该清单的 timer/service 没有统一探针注册目录,陈旧检查、告警适配器和 Console 各自维护部分列表 建立单一探针目录,明确每项是否纳入告警、谁负责恢复、谁只服务自身业务
Console 导航没有真正层级 三个平面 nav-label 下所有入口都是同级按钮,没有父组状态 页面增加速度快于职责域重构,导航按历史入口累积 P22-1 冻结归属后由 P22-5 统一改造
恢复事件会关闭原告警,但不代表修复动作存在 API Gateway 自动关联后续 resolved 事件,AI Boss 另有 Incident 生命周期 “来源已恢复”“AI Boss 已处置”“管理员已验证关闭”共用用户可见的“已处理”语义 P22-3 细化独立状态和页面文案,保留恢复来源与证据
101 本机存在独立失败业务 OmniRoute 观察连续失败;Project DD 副本在 2026-11-03 03:00 因 SSH 连接超时失败 这是实际业务探针失败,不等于告警中心整体失败 先在 P22-0 记录并在后续运维事件中单独处理,不在本计划中用导航改造掩盖

🧪 P22-0 当前阶段结论

本轮 P22-0 已达到“跨节点运行态取得多批证据、重大冲突已登记、告警语义决策已冻结、停用探针退役删除边界已确认、101/102/RR 当前探针分层已回读”,尚未达到“统一探针目录和全网告警关系冻结”。已完成的是:Console 现状、源码告警状态机、AI Boss 生命周期、主要探针类型、101/102 网络探针运行态、RR 集中探针运行态、101 业务探针分层、RR 告警数据库当前记录与动作分布、四台 VPS 本机职责边界、关键失败证据、同一套 Tailnet 的两个观测点定义,以及“已恢复”和“AI Boss 已处理”必须分开的用户决策。尚未完成的是:所有仓库探针与实际 timer/service、集中观察目标、页面投影和告警出口的逐项对齐,以及代表性生产告警的完整事件链回读。

下一步仍不进入代码实施。先完成“本机运行、集中观察、仅业务输出、已停用历史”四类探针目录,并从 RR 告警事件中按 producer、context、恢复来源和 AI Boss incident_id 回读代表性样本;用户已经确认的状态语义直接作为 P22-2/P22-3 的设计约束,不再重复等待同一决策。P22-0 只有在目录、事件链和页面投影逐项对齐后,才能标记为事实冻结。

🌐 跨节点只读回读(2026-11-03)

本轮从 101 按节点登记表显式解析地址、端口、用户和密钥,使用带墙钟、CPU、I/O 和输出上限的只读 SSH 回读;没有修改远端配置、服务或告警数据。回读结果说明:网络探测不是“五台 VPS 各自运行一套探针”,而是由 RR、101、102 集中运行不同职责的探针,再把结果投影到网络页面和告警中心。

节点 本轮确认的探针/调度事实 证据边界 对 P22 的影响
RR DERP 资格、网络拓扑、网络采集、Edge Endpoint、Home Bridge 等 timer 在运行;告警数据库存在 RR 本机 systemctl list-timers 与告警库只读聚合 RR 是网络与告警的主要集中采集点
101 Tailnet UDP 101、探针陈旧检查、备份、Edge DNS、Runner、Android ADB、OmniRoute 观察等在本机运行;OmniRoute 观察连续退出码 1 101 本机 systemd 与 journal 101 同时承担项目交付、探针观测和告警适配,不是单一业务角色
102 Tailnet UDP 102 timer 在运行 102 本机 systemd 只读回读 102 是第二 Tailnet 观测源,但本轮尚未完成其全部探针/告警关系核对
MM 本次限定的 systemd 筛选发现 Edge Endpoint timer MM 本机限定列表回读 MM 的 Edge 能力和集中式网络探测职责必须分开展示
d02 本次限定的 systemd 筛选未发现 AgentMeshOS 探针 timer d02 本机限定列表回读 不能把 d02 没有本地 timer 写成“d02 不参与网络状态”;还需核对 RR 集中探测结果
DD 本次限定的 systemd 筛选未发现 AgentMeshOS 探针 timer DD 本机限定列表回读 DD 的存储/Edge 业务状态与网络可达性由集中探针观察,不能按本机 timer 推断
dog-public 本次限定的 systemd 筛选未发现 AgentMeshOS 探针 timer dog 本机限定列表回读 dog 的正常状态来自集中观测和节点能力投影,不要求本机部署同一套探针

上一批 RR 告警数据库只读聚合(2026-11-03 早前回读)给出了闭环的关键事实:当时共 827 条记录,handling_status=completed 为 827 条,pending/processing/needs_benson_decision/failed 均为 0;其中 804 条 read_at 为空。按严重级别统计,resolved 758 条、critical 48 条、warning 21 条。来源最多的是发布控制器 722 条,其次是 101 探针 35 条、存储健康 19 条、AI Runtime 13 条。审计动作包含 recovery_linked 56 次、historical_closed 5 次、boss_completed 7 次、boss_processing 3 次、boss_needs_benson_decision 3 次,只有 3 条告警带有 incident_id。这些数字是带读取时间的历史快照,不应被页面当作永久总量。

这些数字直接确认三个问题。第一,告警中心不是没有“未读”,而是“未读”与“待处理”被分成两个统计口径:数据库仍有 804 条未读,但全部已经是 completed,所以页面的“待处理”会显示为 0。第二,当前大量“已处理”来自来源恢复关联、发布控制器或历史关闭,不等于 AI Boss 处理;真正进入 AI Boss Incident 的记录只有 3 条,不能用总完成数代表 AI Boss 处置量。第三,告警库已经记录了恢复和 Boss 动作,但没有形成可供用户直接理解的“恢复来源—是否执行动作—是否验证关闭”统一视图,这正是 P22-2/P22-3 的职责问题。

本轮跨节点回读仍不等于全网探针闭环完成。RR、101、102 的集中探针和告警关系已取得第一批证据;MM、d02、DD、dog 的本地 timer 只证明限定筛选下的本机调度,不证明它们在网络可达性中没有被集中探测。后续必须把“本机探针”“集中探针目标”“页面投影对象”三类关系写入统一探针目录,并为每条记录标注“本机运行、集中观察、仅业务输出或真正接入告警”。

🧪 第二批运行态回读:现行网络探针与过渡探针分离(2026-11-03)

本轮继续以只读方式回读 101、102、RR 及四台 VPS 的 systemd、快照和告警适配状态,没有执行手动探测、没有消耗 Globalping 额度,也没有启停或修改任何服务。结果已经足以冻结“哪些探针属于当前网络主口径”的第一版事实。

对象 实际回读结果 业务解释 当前判断
101 Tailnet 路径探针 agentmeshos-tailnet-udp-probe.timer 为 active;最新快照在本轮读取前约 1 分钟内生成,来源为 101 观察 101 到在线节点的真实 Tailnet 路径,区分直连、Peer Relay、DERP 和无响应 现行网络 UDP 主探针,非独立告警探针
102 Tailnet 路径探针 agentmeshos-tailnet-udp-probe-102.timer 为 active;最新快照与 101 相差约 1 分钟,来源为 102 提供第二观测源,用于路径对照和“任一来源直连即正常”的页面汇总 现行网络 UDP 主探针,非独立告警探针
101/102 代理 UDP 探针 两台 agentmeshos-proxy-udp-probe*.timer 均为 inactive/disabled;两份旧快照仍停留在 2026-11-01 这是 R4 Hysteria2 端到端过渡诊断,不再代表节点网络 UDP 代码仍存在、生产调度已停用,必须标为历史/过渡数据,不能继续作为当前网络状态
RR Globalping 主机与公网入口 agentmeshos-network-collector.timer active;本轮读取到新的 china-reachability-v1.json 负责五台公网节点的主机可达性和公网入口 TCP 443,不负责节点间 UDP 现行集中探针
RR DERP 资格探针 agentmeshos-derp-eligibility-probe.timer active;本轮已回读最近触发时间 依据公网入口证据维护 DERP 资格,不等于每条节点路径都正常 现行控制探针;是否形成独立用户告警仍需在 P22-2 冻结
RR 网络拓扑采集 agentmeshos-network-topology.timer active;本轮已回读最近触发时间 生成实时分布图、主机身份和业务链路投影,并可在冷连接金丝雀翻转时发 network-topology 告警 现行页面投影与特定告警出口
RR 旧代理探测计划 agentmeshos-probe-plan.timer inactive,运行目录中的计划文件不存在;RR 仍保留代理告警状态文件 计划器已经退出当前调度链,但旧状态文件仍可能被历史页面或告警统计读取 运行对象已停用,历史状态残留是 P22-0 必须登记的冲突
101 探针告警适配器 /var/lib/agentmeshos/probe-alert 当前有 14 个状态/升级文件,覆盖 Android ADB、Edge DNS、Home Bridge、日志、Memory、OmniRoute、Runner、SearXNG 等 这些是 101 上各业务探针自己的告警去重与升级状态,不是网络 UDP 快照本身 告警出口存在,但探针目录与告警目录仍未统一
四台 VPS 本机 MM 只有 Edge Endpoint timer;dog 有 Three Dogs 业务同步 timer;d02、DD 本轮限定筛选未发现 AgentMeshOS 网络探针 timer;四台均未发现本机网络快照 VPS 节点主要作为被观测目标、Edge/DERP/Peer Relay 或业务服务节点,不是每台各自运行一套网络探针 当前网络主口径来自 RR、101、102 集中探测,不能按 VPS 本机 timer 判断其网络状态

路径快照的实际结果也验证了现行汇总规则:本轮 101 与 102 都能看到 RR、d02、DD、dog 通过直连路径;MM 在两个观测点上都显示为经 DERP。两份快照分别来自同一套 Tailnet 网络中的 101、102,时间相差约 1 分钟,说明两个观测点在连续刷新;该结论只用于网络路径页面,不代表公网入口 TCP、业务网站或代理 UDP 端到端状态。

探针目标映射已经可以从正式代码冻结为三层关系。第一层,Globalping 常态采集器固定检查 RR、MM、d02、DD、dog 五个公网目标,Edge 候选为 MM、d02、DD、dog;每个目标输出主机状态、公网入口状态和独立时间。第二层,101/102 Tailnet 探针从登记表和在线节点发现目标,输出每个观测源到节点的路径和时间;两份结果由 API Gateway 合并,页面不应重新发起探测。第三层,代理 UDP 探针仍保留旧目标集合 RR、MM、d02、DD、dog,但调度已经停用,不能再投影为当前节点 UDP 状态。

告警关系的第二批核验进一步明确了“有快照不等于有告警”。Tailnet UDP 探针源码只负责 tailscale status、tailscale ping、原子写入快照和发布到 RR,没有调用统一告警适配器;因此当前 Tailnet UDP 结果进入网络页面,但没有被证明会直接在告警中心生成逐节点告警。Globalping 采集器同样主要写入可达性快照和额度台账;网络拓扑采集器只有在启用 --alert 且冷连接金丝雀发生状态翻转时,才向 network-topology 告警出口发送事件。代理 UDP 过渡链路则由 RR 的 alert_eval.py 合并 101、102 两个观测点产生的旧快照后调用 runtime-probe 告警适配器,但其生产 timer 已停用,旧告警状态不能代表当前网络探针仍在运行。

因此,P22-0 当前可以把探针分成四种可读类别:现行页面数据源、现行告警来源、仅业务观察、已停用但保留历史资料。同一探针可以同时属于前两类,也可能只属于其中一类;后续不能再用“文件存在”“timer 存在”或“告警库里曾出现过”推断它当前仍在运行。

🧭 第三批运行态回读:集中探针与本机业务探针分层(2026-11-03)

本轮于 2026-11-03 约 10:34 CST 继续只读回读 101、102 和 RR 的 timer、unit 文件及最近触发时间,没有启停服务、删除文件或修改配置。结果进一步确认:当前网络探测和业务探针分层运行,不能把所有 AgentMeshOS timer 都当成网络探针,也不能把“节点没有本机网络 timer”解释为该节点没有被集中观测。

节点 当前运行对象 已确认业务含义 状态分类
101 Tailnet UDP、Edge DNS、日志资源门禁、Memory、Android ADB、备份、Home Bridge、Runner、OmniRoute 观察、探针陈旧检查等 101 同时承担网络观测点、项目交付和业务健康观察 本机业务探针 + Tailnet 网络观测点
102 Tailnet UDP timer active/enabled;R4 代理 timer disabled 102 提供同一套 Tailnet 的第二观测点,不运行 R4 自动代理探测 Tailnet 网络观测点
RR 网络拓扑、Globalping 网络采集、DERP 资格、DERP 控制、Edge Endpoint、节点清单、Home Bridge 等;R4 计划器和代理告警 timer disabled RR 承担集中采集、网络控制和告警入口,不是节点 UDP 的观测点 集中网络探针 + 控制探针

当前状态的精确口径是:101、102 的 Tailnet 探针是现行网络路径数据源;RR 的 Globalping、网络拓扑和 DERP 资格是现行集中网络/控制数据源;101 的 Memory、Android、备份、Runner、OmniRoute 等服务于各自业务;R4 代理探测及计划器属于已停用退役对象。P22-2 的统一探针目录必须增加“网络观测点、集中采集、控制探针、业务探针、退役探针”分类,避免把不同业务混成一个健康总数。

此次回读同时确认了两个不同的治理事项。RR 上 agentmeshos-probe-plan.timer 和 agentmeshos-proxy-udp-alert.timer 仍是已安装 unit,但均 disabled/inactive,属于可以按 P22-4 退役删除的 R4 运行对象。101 上 agentmeshos-memory-probe.timer 则是 enabled/active,最近触发正常;其现场来源是 /etc/systemd/system/agentmeshos-memory-probe.service,执行 /usr/local/lib/agentmeshos/memory_probe.py,使用独立的 memory-probe.env,属于外部 Memory Server 业务探针,不是网络探针。它在仓库 deploy/systemd/ 和本轮限定部署脚本检索中没有找到对应正式来源,因此应标为“运行中、来源待确认”,在查清业务归属和部署责任前不得删除。该区别说明“停用就退役删除”不等于“仓库没找到就删除”。

🧩 仓库定义、部署生成与页面投影核对(2026-11-03)

本轮继续只读核对仓库正式定义,重点区分“静态提交在仓库里的 systemd 文件”“部署脚本运行时生成的 systemd 文件”“当前页面读取的快照”和“告警出口”。结果说明:探针运行对象并不由一个目录统一管理,P22-0 不能只依赖 deploy/systemd/ 或 agentmeshos-probe-stale-check.py 得出完整清单。

核对对象 本轮证据 冻结结论 后续影响
静态 systemd 目录 deploy/systemd/ 当前有 20 个 timer 文件 这些是仓库提交的部分运行定义,不包含全部网络探针 目录清单不能直接当作全项目探针注册表
网络 Globalping 与 DERP 资格 scripts/deploy/network-probe/agentmeshos-network-probe-deploy.sh 动态生成采集 timer 和 DERP 资格 timer;分别为 10 分钟和 15 分钟节奏 关键网络探针的运行定义由部署脚本生成 必须把“生成源”和“现场单元”作为同一对象登记
Tailnet UDP scripts/deploy/tailnet-udp-probe/agentmeshos-tailnet-udp-probe-deploy.sh 按 101/102 生成两个独立 timer,默认 5 分钟 101/102 是同一套 Tailnet 中的两个现行观测点 探针目录必须记录观测点、快照和发布目标,而不是把它描述成两套节点网络
R4 代理 UDP scripts/deploy/probe-plan/agentmeshos-probe-plan-deploy.sh 生成计划器和告警评估器;README 明确其为过渡组件 代码和部署入口仍存在,但业务定位已降为人工/历史诊断 运行态、页面引用和历史快照必须分开
陈旧检查器 scripts/maintenance/agentmeshos-probe-stale-check.py 只登记 7 个 ProbeUnit,且包含仓库静态目录中未出现的 memory-probe-101.timer;101 本机该 timer 为 enabled/active 陈旧检查器不是统一探针目录,且存在运行对象与仓库来源不一致 当前检查结果不能代表全项目探针完整性;Memory 探针需单独确认来源和业务归属
网络拓扑采集 scripts/deploy/api-gateway/agentmeshos-api-gateway-deploy.sh 动态生成每分钟运行的 agentmeshos-network-topology.service,带 --alert 拓扑页面与 network-topology 告警共享一个采集器,但告警只针对冷连接金丝雀翻转 节点级网络状态不能自动等同于逐节点告警
告警页面与 AI Boss Console 分别读取 /api/alerts?scope=all 和 /__agentmeshos/boss/v1;点击处理时才创建 AI Boss Incident 两个模块当前仍是两个数据入口,关联发生在人工操作路径 P22-3 必须把“未关联”作为正式页面状态

本轮还发现一个需要在 P22-4 冻结的代码级冲突:tools/api-gateway/src/network_topology.py 的 public_china_reachability() 会先读取同一套 Tailnet 网络中 101、102 两个观测点的快照;当 Tailnet 投影不是明确的 healthy 或 down 时,effective_udp_status 会回退到 proxy_status。而仓库 README 已将 R4 代理探针定义为“仅保留人工诊断”,P21 和本轮生产回读也已确认其 timer 停用、旧快照可能残留。由此得到的严格结论是:当前代码存在过渡探针回退路径。 本轮尚未据此断言生产页面当前已经被旧快照污染。

🗑️ 停用探针退役与删除清单

本轮生产只读回读已确认以下运行对象属于停用或过渡状态。按照本轮确认的规则,停用探针按正式退役删除处理:必须从生产运行路径、页面引用、API 当前状态读取和自动告警入口中清理;历史告警、历史快照和必要的审计证据另行归档,不得继续作为当前状态输入。本轮仍不直接删除,因为 P22 目前处于事实盘点阶段,删除动作要在映射、备份和回退点齐全后执行。

对象 已验证状态 当前是否仍参与现行网络主口径 正式处理
101 R4 代理 UDP timer inactive、disabled;service 为 loaded inactive static 否,Tailnet 路径探针已承担节点 UDP 主口径 退役删除生产 timer/service、旧状态和页面兼容引用;历史证据迁移后清理运行副本
102 R4 代理 UDP timer inactive、disabled 否 与 101 同步退役删除,不能只停一台
RR R4 计划器 timer loaded inactive、disabled 否 退役删除计划器运行单元、计划状态和告警评估运行入口
RR R4 代理告警 timer loaded inactive、disabled 否 退役删除自动告警评估入口,历史告警保留为历史记录
R4 代理快照 代码和 API 仍读取 proxy-udp-v1.json、proxy-udp-102-v1.json 不应参与当前节点 UDP 判定 先移除当前状态读取和回退,再归档并删除运行副本;人工诊断是否保留另行确认
101 memory-probe.timer 本机 enabled/active;service 执行 /usr/local/lib/agentmeshos/memory_probe.py,使用独立环境文件;仓库 deploy/systemd/ 未发现对应正式单元 外部 Memory Server 业务探针,不属于网络主口径 不得直接删除;先确认其正式部署来源、业务用途和告警关系
d02、MM、DD、dog 本机网络探针 本轮限定回读未发现 AgentMeshOS 网络探针 timer 否;由 RR、101、102 集中观测 不新增同类本机探针,避免重复探测和额度浪费

因此,本轮冻结三条规则:第一,停用探针不得继续作为当前页面的隐式回退数据源;第二,停用运行对象必须退役删除,历史告警和必要审计证据单独归档;第三,删除动作必须先完成页面引用、API 读取、告警出口和历史证据的反向检索,并提供回退点。

该冲突的正确处理顺序是:先在 P22-0 目录中记录 R4 的停用状态和所有仍被读取的路径,再由 P22-4 决定“Tailnet 主口径不可用时显示未验证/不可用”还是保留经过明确标记的兼容回退;在决定前不得用删除旧快照或硬编码绿色状态掩盖问题。

🔔 告警接口代表性回读(2026-11-03 03:51 CST)

本轮通过 RR 本机 API Gateway 的只读接口读取告警元数据,没有调用写接口、恢复接口或 AI Boss 处理入口。接口当前返回的计数为:总量 832、completed 832、未读 809,pending/processing/needs_benson_decision/failed 均为 0。最近返回的 100 条记录中,98 条来自发布控制器,2 条来自 101 探针;其中一条 101 探针异常样本为 runtime-probe / DEGRADED / critical / completed,没有 incident_id。这与上一批数据库聚合的 827 条不同,说明告警数量会随发布和探针事件继续增长,页面必须显示读取时间和统计口径。

这次代表性回读把“告警显示已完成但 AI Boss 没有处理”的机制证据进一步锁定为三层:告警事件已经被来源组件投递;恢复关联或其他自动收尾逻辑把 handling_status 变成 completed;AI Boss Incident 是否存在则由独立的 incident_id 决定。当前样本中,探针告警的 incident_id 为空,不能把它解释为 AI Boss 已接收、已分析或已完成。P22-2/P22-3 必须将“来源恢复”“系统自动收尾”“AI Boss 接收/处置”“管理员已验证关闭”拆成独立字段和页面状态。

📌 告警语义决策记录(2026-11-03)

本轮已经确认两条必须写入系统契约的业务规则。第一,探针确认目标恢复后,可以自动结束“活动故障”并显示“已恢复”;这表示故障观测已经消失,不表示有人执行过修复,也不表示 AI Boss 完成了处置。第二,“已处理”只允许表示 AI Boss 已经接收并完成了有证据的处置流程;来源恢复、系统自动收尾、人工查看和管理员验证关闭不得继续共用这个词。依据是告警接口回读中存在大量 completed、未读记录和空 incident_id 的探针样本,且用户已明确确认上述状态边界。影响是 P22-2/P22-3 必须以独立字段、状态和页面筛选实现,旧数据不能直接删除或批量改写为 AI Boss 已处理。

用户可见状态 触发者 能证明什么 不能证明什么
活动故障 探针提交故障事件且尚未收到真实恢复 当前仍有故障观测 不能证明 AI Boss 已接收或已执行动作
已恢复 同一组件上下文收到有效恢复观测 来源探针确认故障现象消失 不能证明谁修复、不能证明 AI Boss 处理完成
AI Boss 已接收 AI Boss 创建并关联有效 Incident AI Boss 已接收该告警 不能证明动作已完成或结果已验证
AI Boss 处理中 AI Boss/Runtime 有正在运行的处理事件 当前存在处置过程 不能证明系统已经恢复
等待人工 规则要求 Benson 决策或外部操作 系统明确停在人工门禁 不能显示为已处理或已关闭
已验证关闭 有独立验证人、验证时间和验证证据 人工或受控流程确认事件可以关闭 不能反推 AI Boss 一定参与
历史未读 记录尚未被查看,但事件已结束或归档 阅读状态 不能反推仍有活动故障

后续实现必须保留至少四条可独立追踪的关系:source_event(来源事件)、recovery_event(恢复证据)、incident_id(AI Boss 事件)和 closure_evidence(关闭验证证据)。如果其中任一关系不存在,页面必须如实显示“未关联”“未接收”或“未验证”,不得根据 completed 单字段补全。

🧱 P22-1 详细规格:模块与职责域重构

📌 工作包结论

P22-1 要把 P22-0 的事实转换为“谁负责什么、谁可以读什么、谁可以写什么、谁不能替代谁”的职责模型。它不是立即移动代码或拆服务,而是先冻结系统边界和跨域接口。依据是现行总体架构已经把 AI Boss、Runtime、Nomad、API Gateway、Console、Network、Storage 和 OmniRoute 分层,但当前计划仍缺少面向 Console 和告警闭环的完整职责矩阵。影响是没有 P22-1 的矩阵,P22-2、P22-3 和 P22-5 会继续围绕页面或事件局部打补丁。

🗺️ 目标职责域

职责域 负责什么 权威事实 可以暴露给谁 明确禁止
Network Tailnet、节点网络、路径、Edge、DERP、Peer Relay 和网络探针边界 网络状态快照与网络配置 Network 页面、相关告警和诊断 代替业务平台状态或代理业务状态
Agent 与节点 Agent、节点、任务运行、节点能力和节点生命周期 Agent Registry、节点清单和运行事实 Agent 页面、工作台 代替网络路径判断
Runtime Plan、Task、状态、预算、证据、验收和受控 Adapter Runtime SQLite 与结构化事件 AI Boss、Console、审计 代替 AI Boss 做语义决策
AI Boss 目标理解、规划、派工建议、审核、返工和汇总 AI Boss 事件与审核记录 AI Boss 页面、告警处置记录 把模型文本当系统动作或凭空宣称已处理
Alert 告警发现、通知、恢复、处置、关闭和审计投影 告警事件及其组件上下文 告警与处置页面、工作台摘要 自行执行未登记动作或把恢复当处置完成
Platform OA、AI 平台、存储与文件、搜索与外部服务 各平台正式健康和业务接口 平台服务页面 混入 Agent 状态或网络状态
Console 导航、页面投影、交互和人类可读呈现 API Gateway/Runtime 只读投影 Benson 保存权威状态、复制状态机或直接访问底层凭据
Storage Runtime 数据、Cloudreve 系统云盘和证据存储边界 SQLite、WebDAV 和证据引用 Runtime、成果和审计页面 由 Worker、Console 或网络节点绕过正式数据面

🔐 跨域契约

P22-1 必须为每个跨域关系写出“调用方向、数据类型、写入权、失败行为、证据和回退”。最低契约如下:

关系 允许方向 数据 失败时的正确表现
探针 → 告警 探针事件进入告警适配器 脱敏观测、组件上下文、去重键、时间 记录投递失败,不伪造告警已处理
探针 → 业务页面 探针结果投影到所属业务页面 业务结果、数据年龄、证据引用 页面显示未更新/过期,不另起一套探测
告警 → AI Boss 告警按明确动作交给 AI Boss 告警引用、上下文、处理权限、预算 显示未接收、等待人工或失败,不自动标记完成
AI Boss → Runtime AI Boss 提交结构化计划或固定动作 Plan、Action、审核和证据引用 Runtime 拒绝越权或不完整契约
Runtime → Console Console 读取只读聚合 状态、结果、时间、证据、下一步 显示真实错误和来源,不使用旧缓存冒充新结果
Console → Runtime 只调用已登记、幂等的交互 确认、重审、返工、受控动作 返回可读结果和审计引用,不直接写底层数据库

任何跨域契约都必须区分“事件已产生”“事件已接收”“动作已执行”“结果已验证”四个层次。只有真实验证完成,才允许页面显示“已处理”“已关闭”或“已完成”。

📊 P22-1 产物与验收

产物 内容 通过标准
职责域矩阵 领域、责任、权威源、读写边界、失败行为和禁止事项 每个现有模块只有一个主职责
跨域数据流图 探针、告警、AI Boss、Runtime、Gateway、Console 的方向和状态 不出现循环写入或隐式第二权威源
页面—职责映射 每个页面所属职责域、数据来源、操作边界和导航归属 页面不因历史名称放错一级菜单
冲突决策表 现行架构与运行态冲突的取舍依据 未决项明确保留,不用猜测关闭
负向规则清单 越权、重复探测、重复状态源、伪造恢复和错误归类案例 后续实施可以逐项写成回归测试

P22-1 只有在上述产物通过评审后才算“详细设计完成”;代码、部署和生产变更不属于本工作包的完成证据。

🧪 P22-1 评审工作步骤

  1. 以 P22-0 的事实清单为输入,逐项确认每个模块的业务目的、权威状态源和读写边界。
  2. 对同一事实存在多个来源的情况,建立“主来源、投影来源、历史来源”三层关系,不以页面当前显示结果直接决定权威性。
  3. 对 Network、Agent、Runtime、AI Boss、Alert、Platform、Console、Storage 八个职责域分别列出允许写入的对象和禁止代替的对象。
  4. 对告警恢复、AI Boss 处理、人工关闭和历史归档分别绘制事件方向,确认任何自动收尾都不会伪装成 AI Boss 动作。
  5. 将每条跨域关系转换为一个可测试的失败行为:超时、重复投递、无关联 ID、过期快照、权限不足和验证缺失都必须有明确页面结果。

P22-1 的评审出口不是“大家同意大致方向”,而是形成一份可以直接约束 P22-2、P22-3、P22-4 和 P22-5 的职责矩阵版本。若仍有一个模块既写权威状态又写页面投影,或一个状态由多个模块无条件关闭,P22-1 不得通过。

🧾 P22-1 当前评审输入矩阵

下表把已确认事实转换为评审问题。已冻结表示本轮证据足以作为设计约束;待决表示必须在职责评审中明确,不能由实现阶段自行猜测。

职责域 当前主责任 当前权威来源 已冻结边界 待决问题
Network Tailnet 路径、Globalping、DERP、Edge 和节点网络状态 Tailnet 快照、Globalping 快照、拓扑快照、DERP 资格快照 不负责 OA、AI 平台或代理业务健康;停用 R4 不得回灌网络主状态 DERP 资格异常是否单独进入告警中心
Agent 与节点 节点身份、角色、能力和任务运行 节点登记、Agent Registry、Runtime/Nomad 不根据网络路径替代节点生命周期状态 节点离线和网络不可达如何在工作台合并展示
Runtime 计划、任务、预算、证据、受控动作 Runtime 事件和任务状态 不把探针恢复或模型文本当作已完成动作 哪些告警动作可以进入固定 Handler
AI Boss 分析、决策、派工建议、审核和汇总 AI Boss Incident、处理事件、审核记录 不自动冒充恢复、验证关闭或执行成功 告警进入 AI Boss 的默认条件和人工门禁
Alert 发现、通知、恢复、处置状态和审计投影 Alert Store、来源事件、恢复事件 “已恢复”不等于“AI Boss 已处理” 旧 completed 数据如何在兼容层显示
Platform OA、AI、存储、搜索和外部服务 各平台业务健康接口 不归入 Agent 状态或网络状态 平台级故障是否需要工作台摘要
Console 导航、只读投影、人类可读交互 API Gateway/Runtime 聚合 不保存第二份权威状态,不重复发起探测 哪些页面允许受控写操作
Storage 告警、Runtime、证据和历史归档存储 SQLite、证据目录、WebDAV 边界 不因展示方便删除历史审计 R4 历史证据的正式归档位置

✅ P22-1 通过条件

P22-1 评审必须逐项回答以下问题后才能通过:每个状态只有一个写入权威;每个页面只有一个主职责归属;每个告警状态都能区分来源恢复、AI Boss 处理和人工验证;任何跨域失败都有页面可见结果;停用探针没有继续写入或被当前状态读取;Console 不通过第二次探测补齐数据。任一问题没有明确答案,状态保持“待评审”,不得进入代码实施。

🧪 P22-2 详细规格:探针业务与告警闭环

📌 工作包结论

P22-2 负责回答“每个探针为什么存在、服务哪个业务、是否进入告警、谁负责恢复、页面在哪里展示”。它不是把所有探针强行接入告警中心,而是把现有探针按业务目的重新登记,明确“只服务自身业务”和“同时进入告警”的合法差异。依据是 P22-0 已确认网络 Tailnet 探针、Globalping 采集器、代理 UDP 过渡探针和 101 本机业务探针并不共享同一条告警出口。影响是没有 P22-2,告警中心无法解释为什么某些探针有快照却没有告警,也无法解释某些历史告警对应的探针是否还在运行。

🧭 探针分类与最小注册字段

探针类别 主要目的 是否必须进入告警 页面归属 关闭依据
网络可达性探针 观察主机、入口和节点间网络路径 仅在定义了用户影响和告警阈值时进入 网络态势 对应来源恢复观测或人工验证
控制探针 维护 DERP 资格、Edge 切换或网络控制状态 进入控制域告警,不等于普通节点故障 网络态势/系统维护 控制状态恢复并完成资格复核
业务健康探针 观察 OA、存储、搜索、代理等业务 按业务影响进入告警 平台服务或对应业务页 业务探针的真实恢复证据
调度陈旧探针 判断 timer/service 是否按期运行 进入运行检查和告警 系统维护 调度恢复且下一轮业务结果成功
仅业务观察 记录指标、日志或证据,不承担故障通知 默认不进入告警 所属业务详情 由业务页面保留观察记录
已停用/历史探针 兼容旧快照和历史审计 不得生成新告警 系统证据/历史告警 明确标记退役,不参与当前状态

每个正式探针必须登记:人类可读名称、唯一标识、业务目的、责任域、运行节点、调度方式、输入、输出、当前状态、是否进入告警、告警组件上下文、恢复事件格式、页面归属、数据保留期、停用方式和证据路径。登记缺失时,探针只能被标记为“未纳管”,不能自动计入健康总数。

📋 P22-2 首版探针目录样表

下表是基于本轮仓库与生产只读回读形成的首版目录,不是最终注册表。最终注册表必须在 P22-0 完成全量对齐后冻结。

人类可读名称 当前类别 运行位置 当前状态 当前页面/告警关系 目录处理
Tailnet 节点路径观测(101) 网络观测点 101 active/enabled 网络态势数据源;未证明逐节点直接告警 正式纳管
Tailnet 节点路径观测(102) 网络观测点 102 active/enabled 网络态势数据源;未证明逐节点直接告警 正式纳管
中国方向主机与公网入口观测 集中网络采集 RR active/enabled 网络可达性、额度和 Edge 依据 正式纳管
DERP 资格观测 控制探针 RR active/enabled 维护 DERP 资格;是否独立告警待决 正式纳管,告警关系待评审
网络拓扑与冷连接检查 集中网络采集/控制 RR active/enabled 实时分布图;冷连接状态变化进入网络告警 正式纳管
R4 代理 UDP 探针 退役探针 101、102 inactive/disabled 不得进入当前节点 UDP 状态 退役删除,历史归档
R4 计划器与代理告警评估 退役控制探针 RR inactive/disabled 不得生成新计划或新告警 退役删除,历史归档
Memory Server 业务探针 业务健康探针 101 active/enabled,来源待确认 服务 Memory Server 业务,不属于网络态势 正式来源待追溯后纳管
OmniRoute 健康观察 业务观察 101 timer 运行,曾有业务失败 服务 OmniRoute 迁移后健康观察 纳入业务探针,区分调度与业务结果
探针陈旧检查 调度陈旧探针 101 active/enabled 统一发送运行态告警,但当前只覆盖部分对象 扩展为目录驱动
Edge DNS 控制器 控制探针 101 active/enabled Edge 切换和恢复事件 正式纳管
备份、Android、Runner、日志等业务检查 业务健康探针 101 多项 active/enabled 各自业务告警,不属于网络 UDP 按业务拆分登记

目录冻结前必须补齐每项的 producer、context_id、恢复方式、是否需要 AI Boss、页面主归属和历史保留策略。没有这些字段的对象只能显示“未纳管”,不能进入“系统健康总数”。

🔗 探针到告警的闭环规则

环节 必须记录 通过条件 失败时页面显示
探针执行 调度时间、执行结果、目标、错误类别 能区分未运行、执行失败、业务失败 未运行/执行失败/业务失败
告警投递 事件 ID、去重键、组件上下文、投递结果 事件能回指原始观测 告警未投递或关联缺失
故障保持 活动事件和最近观测 重复故障不会生成无限重复告警 当前活动故障与最近观测
恢复发现 恢复事件、来源、时间、验证内容 只关闭同一组件上下文的活动故障 已恢复,显示恢复来源
处置关联 AI Boss Incident 或人工操作引用 告警和处置能双向回查 未接收/等待人工
关闭验证 验证人、时间、证据和回退 关闭不是由单一 completed 字段推断 未验证关闭

P22-2 必须产出一份“探针—业务—告警目录”和一份“已停用/历史探针清理映射”。前者供 Console 和告警中心读取,后者用于防止旧快照、旧状态文件和历史告警继续被误认为当前运行态。不得通过删除历史记录来解决重复或混乱。

✅ P22-2 验收标准

验收项 必须证明 证据
目录完整 现行、仅业务、已停用和未纳管探针均有记录 注册目录、timer/service 回读、部署清单
业务目的明确 每个探针都有业务目的和责任域 目录字段与所属页面
告警关系真实 每个告警来源能回指探针或明确为系统事件 事件样本、组件上下文和去重键
恢复不冒充处置 恢复事件只改变恢复状态,不生成 AI Boss 完成记录 负向回归和审计记录
旧数据隔离 停用探针不再产生新告警,历史数据仍可查询 停用标记、历史查询和新事件窗口
页面可解释 用户能看懂探针是否运行、是否告警、最后更新时间 Console 页面与过期状态证据

🔔 P22-3 详细规格:告警与 AI Boss 联动模型

📌 工作包结论

P22-3 负责把告警中心和 AI Boss 变成两个有明确边界、可以互相引用的模块。告警中心是错误和恢复事件的统一输出渠道;AI Boss 是可选的分析、决策和受控处置渠道;两者不能因为同一条记录存在就互相冒充。依据是当前告警接口已经出现 completed 但 incident_id 为空的探针样本。影响是 P22-3 必须在数据模型、页面文案、自动收尾和审计中同时分离“恢复”和“处理”。

🔄 状态机与允许转换

当前状态 触发事件 允许的下一状态 禁止的隐式转换
活动故障 有效恢复观测 已恢复 不得直接变成 AI Boss 已处理
活动故障 AI Boss 接收 AI Boss 已接收/处理中 不得因创建 Incident 就显示已处理
AI Boss 处理中 动作执行成功 待验证或已恢复 不得把动作返回成功当成业务恢复
AI Boss 处理中 需要 Benson 决定 等待人工 不得自动跳过人工门禁
已恢复 独立验证通过 已验证关闭 不得只因恢复事件自动变成已验证关闭
任意活动状态 外部投递失败 保持原状态并记录失败 不得静默标记 completed
历史记录 用户查看 历史已读 不得改变故障处置状态

🧾 AI Boss 处理记录的最低字段

AI Boss 关联记录必须至少包含告警引用、接收时间、处理目标、上下文快照、决策或动作类型、执行结果、证据引用、是否需要人工、完成时间和失败/回退信息。incident_id 为空时,页面必须明确显示“AI Boss 未接收”;只有存在有效处理事件、结果证据和适用的验证条件时,才可以显示“AI Boss 已处理”。

🖥️ 页面与人类可读表达

页面区域 必须显示 不得显示
当前告警 当前故障、影响范围、最近观测和恢复状态 把历史未读当成当前故障
历史告警 已恢复、已验证关闭、历史未读和来源 把所有 completed 统一翻译为已处理
AI Boss 处理记录 是否接收、处理阶段、动作、结果和证据 只显示一个完成数量
恢复与审计 谁报告恢复、何时恢复、是否验证关闭 把自动恢复写成 AI Boss 动作
工作台摘要 当前需关注事项和待人工事项 用未读数量代替活动故障数量

✅ P22-3 验收标准

验收项 必须证明 证据
自动恢复 探针恢复后活动故障变为已恢复 恢复事件、关联键和状态回读
AI Boss 分离 无 incident_id 的告警不会显示 AI Boss 已处理 负向样本和页面截图
人工门禁 需要 Benson 决策的事件停在等待人工 Runtime 事件和页面状态
关闭可验证 已验证关闭有独立验证证据 验证记录、时间和操作者
历史可读 历史未读不污染当前告警 筛选、计数和页面状态
投递失败可见 告警或 AI Boss 入口失败不会静默完成 错误日志、失败状态和重试记录

P22-3 的实施前置是先完成 P22-2 探针目录和事件关系,不允许先改页面文案再猜告警来源。现有历史数据按兼容层读取,不能在没有迁移映射和回退方案的情况下批量重写。

🧊 P22-4 详细规格:权威数据与状态源统一

📌 工作包结论

P22-4 负责冻结每个页面的唯一权威数据源、更新时间、过期规则和禁止回退路径,并清理已经停用的 R4 代理探针对当前网络状态的影响。依据是本轮反向引用核对发现:R4 快照仍被 API Gateway、API Gateway 部署环境、即时刷新 Worker、旧计划器、旧告警评估器和测试契约引用;仅停用 timer 不能阻止旧快照继续被读取。影响是 P22-4 必须先切断当前状态读取,再执行运行对象退役,最后清理代码、测试和历史副本。

🗂️ 当前数据源与目标数据源

页面或功能 当前主数据 当前风险 目标权威数据
网络可达性主机/IP Globalping 主机快照 采集周期、入口时间和主机时间容易混淆 Globalping 主机快照,主机时间与入口时间分开显示
网络可达性节点 UDP Tailnet 101、102 两个观测点快照 Tailnet 不明确时可能回退到 R4 代理快照 仅使用 Tailnet 路径快照;无有效结果显示未验证
节点路径视图 网络拓扑 + Tailnet 路径快照 页面可能把过渡代理字段当作节点 UDP 只读取节点路径字段和观测点明细
即时刷新 node_udp 与旧 proxy 两类刷新入口 用户仍可请求已退役的 proxy 类型 保留主机、入口和 node_udp;删除 proxy 自动刷新入口
DERP 资格 独立公网 TCP 443 资格快照 不应受 Tailnet 或 R4 代理结果影响 继续使用 DERP 资格专用快照
历史 R4 诊断 旧代理快照和旧告警 历史数据可能污染当前状态 仅归档查询,不进入当前状态聚合

🔍 已确认的 R4 反向引用

引用位置 当前用途 退役动作
tools/api-gateway/src/network_topology.py 读取两份 R4 快照,并在 Tailnet 状态不明确时回退 删除当前状态回退和代理投影字段
scripts/deploy/api-gateway/agentmeshos-api-gateway-deploy.sh 向 API Gateway 容器注入 R4 快照路径 删除 R4 环境变量和对应挂载/目录声明
tools/reachability-refresh/src/worker.py 接受 proxy 刷新请求并远程执行 R4 探针 删除 proxy 类型、命令和结果路径
scripts/deploy/reachability-refresh/agentmeshos-reachability-refresh-deploy.sh 部署 R4 快照路径 删除 R4 运行目录配置
tools/probe-plan/src/planner.py、alert_eval.py 读取旧快照,生成计划或告警 退役运行入口;代码和测试迁移后删除
scripts/deploy/probe-plan/agentmeshos-probe-plan-deploy.sh 生成旧计划器和告警 timer 删除部署入口及其卸载兼容分支
tools/console-site/src/app.js 保留 proxy 刷新状态和代理状态兼容显示 删除代理刷新按钮和当前页面兼容字段
相关测试与 README 验证 R4 运行链路 转为历史归档测试或删除,不得继续作为当前生产门禁

🔁 退役删除批次

  1. 批次一:切断当前状态影响。 API Gateway 只保留 Tailnet 节点 UDP 投影;Tailnet 快照缺失、过期或格式错误时显示“未验证/数据不可用”,禁止回退到 R4。即时刷新只保留主机、入口和 node_udp。
  2. 批次二:运行对象退役。 在 101、102、RR 上删除 R4 timer、计划器 timer、告警 timer、旧服务单元、计划状态和运行目录;回读确认没有新的 R4 快照或 R4 告警事件产生。
  3. 批次三:部署与代码清理。 删除 API Gateway 的 R4 环境注入、Worker 的 proxy 分支、旧部署入口和当前页面代理字段;保留必要的历史读取器时必须明确标记为归档,不得被当前 API 调用。
  4. 批次四:历史归档和负向回归。 保存 R4 旧快照、旧告警和必要测试证据到正式历史位置;构造“Tailnet 快照缺失但 R4 旧快照存在”的负向场景,确认页面仍显示未验证,不显示代理结果或默认绿色。

✅ P22-4 验收标准

验收项 必须证明 证据
唯一数据源 节点 UDP 当前状态只来自 Tailnet 观测点 API 回读、字段映射和代码测试
无隐式回退 Tailnet 缺失时不会读取 R4 旧快照 负向夹具和页面结果
刷新边界 页面不能再提交已退役的 proxy 刷新请求 浏览器契约和 API 负向回归
运行对象清理 101、102、RR 没有 R4 自动 timer 或告警 timer systemd 只读回读
状态文件隔离 旧 R4 文件不再进入当前运行目录 目录、挂载和容器环境回读
额度不增加 节点路径视图和双节点诊断不新增 Globalping 调用 调用链审计和额度台账
历史可追溯 旧 R4 告警和诊断证据仍可查询,但标记为历史 归档索引和页面筛选

P22-4 不允许通过直接删除快照来“修绿”页面;必须先移除读取关系,再归档和删除运行副本。任何一批删除前都必须保存 last-known-good、执行记录和回退步骤。

🧪 P22 核心实现回归记录(2026-11-03)

本轮已在仓库落地 P22 核心行为并完成本地回归。网络聚合不再把停用 R4 代理快照作为 Tailnet 结果缺失时的当前状态回退;手动刷新仅保留主机、入口和 Tailnet 节点路径,不再接受 proxy 类型;告警恢复新增独立 recovery_status,恢复事件不会再自动伪装成 AI Boss completed;Console 导航改为一级职责域分组、可折叠/展开、当前路径自动展开。

实现面 本地证据 当前状态
API Gateway 网络聚合 tools/api-gateway/tests/test_network_topology.py PASS;R4 缺失时保持未验证,不回退决定节点状态
告警状态机 tools/api-gateway/tests/test_alerts.py PASS;恢复状态与 AI Boss 处置状态分离
手动刷新边界 tools/api-gateway/tests/test_reachability_refresh.py、tools/reachability-refresh/tests/test_worker.py PASS;R4 proxy 刷新被移除
部署契约 API Gateway、Reachability Refresh 部署契约 PASS
Console 导航与页面 tools/console-site/tests/browser-contract.sh、网络拓扑浏览器契约 PASS;桌面/移动端和折叠交互通过
完整本地测试 scripts/ci/run-local-tests.sh 主体测试通过;现有节点指标不可达输出和 MkDocs 非阻断链接警告仍需在部署后区分处理

这条记录只证明仓库实现和本地契约已通过,不代表生产服务已经部署。生产部署、R4 现场运行对象退役、Memory 探针来源追溯和最终生产 API/页面回读仍是 P22-8 收口证据。

🧭 P22-5 详细规格:Console 导航与页面归属

📌 工作包结论

P22-5 的目标不是把菜单换个名字,而是让用户能够从导航层级直接理解“这是哪个系统领域、当前在哪个功能组、页面显示什么事实、下一步能做什么”。依据是当前 Console 已有分级菜单,但一级、二级和页面入口视觉差异不足,同时告警中心、OA、AI 平台等职责域被错误地放入 Agent 状态。影响是导航必须先按 P22-1 的职责矩阵归属,再设计折叠展开;不能先画 UI 再反推系统边界。

🗂️ 目标导航树与页面归属

一级方向 二级功能组 页面/入口 页面主问题 权威来源
工作台 当前问题 当前异常、影响范围、下一步 现在最需要关注什么 Alert/Runtime 聚合
工作台 待处理事项 待处理告警、待审核、待决策 哪些事项需要 Benson 处理 Alert/AI Boss/Acceptance
工作台 系统总览 系统健康、阶段状态、关键变化 系统总体处于什么状态 多域只读聚合
Agent 与节点 Agent 状态 Agent 在线、运行、版本和能力 Agent 当前是否可用 Agent Registry
Agent 与节点 节点管理 节点身份、角色、能力和生命周期 节点承担什么职责 节点清单
Agent 与节点 任务运行 计划、任务、Allocation 和结果 任务运行到哪一步 Runtime/Nomad
Agent 与节点 节点能力 能力注册、版本、可用性和限制 能做什么、为什么不能做 Capability Registry
网络态势 实时分布图 节点、路径、主机和业务链路 谁与谁通过什么路径连接 网络快照
网络态势 网络可达性 主机 IP、TCP、UDP、Globalping 和 Tailnet 从不同来源能否到达 网络探针快照
网络态势 节点路径视图 选定节点之间的路径和原因 这条链路为何直连/中继/失败 同一套 Tailnet 的 101、102 两个观测点路径快照
网络态势 双节点诊断 起点、终点、逐层诊断和证据 如何一次性解释一条链路 诊断结果与证据
平台服务 OA 平台 OA 服务状态和业务入口 OA 服务是否可用 OA 健康接口
平台服务 AI 平台 AI Runtime、模型和调用概览 AI 平台是否可用 Runtime/OmniRoute 只读投影
平台服务 存储与文件 Cloudreve、私人硬盘和文件服务 文件服务是否可用 Storage 健康接口
平台服务 搜索与外部服务 搜索、Fetch 和外部依赖 外部能力是否可用 Web 能力路由快照
告警与处置 当前告警 活动故障、待处理和影响 当前有哪些真实问题 Alert Store
告警与处置 历史告警 已恢复、已验证关闭、历史未读 过去发生过什么 Alert Store/审计
告警与处置 AI Boss 处理记录 接收、分析、动作、结果和证据 AI Boss 是否真正处理过 AI Boss 事件
告警与处置 恢复与审计 恢复来源、验证、关闭和操作历史 谁在什么时候做了什么 Alert/Runtime 审计
系统维护 发布与部署 版本、Actions、发布、回滚和健康 当前版本是否完整发布 CI/CD 与部署证据
系统维护 运行检查 服务、依赖、数据年龄和门禁 系统是否满足运行条件 检查器与实时回读
系统维护 变更记录 变更、影响、回退和操作者 最近改了什么 Change Store
系统维护 系统证据 原始证据、哈希、时间和引用 结论依据在哪里 Evidence Store

页面可以在多个工作台摘要中被引用,但只能有一个主归属。摘要页只显示摘要和跳转,不复制该页面的状态机、写入动作或第二份数据。

🧱 导航视觉与折叠行为

规则 桌面端要求 移动端要求 验收证据
一级菜单 固定显示,使用明显的视觉分组、图标和区域标题 抽屉中固定显示,不能与页面标题混淆 截图与 DOM/可访问树
二级菜单 稳定缩进、字号、颜色和左侧轨道,与一级明显区分 以组标题或折叠行显示,点击后展开 展开前后截图和交互记录
三级/页面入口 进一步缩进,使用页面级选中态,不伪装成一级功能 组内纵向列表,长标题可换行 当前路径和选中元素证据
当前路径 一级、二级、当前页面同时高亮,面包屑或等价路径可见 抽屉关闭后仍显示当前页面和所属组 路由切换回读
折叠组 显示真实展开/收起图标和状态;当前组默认展开 支持触摸展开、收起和返回 状态属性和点击结果
刷新恢复 刷新后按当前路由自动展开所属组,保留用户手动收起的非当前组 返回页面后不丢失当前组,不产生空白导航 刷新/返回测试
状态角标 角标只表示该组真实可见状态,不把历史未读伪装成活动故障 角标不挤压文本,不造成横向溢出 数据映射与移动截图
权限隐藏 无权限页面和空组不展示;直接访问时返回可读的无权限状态 抽屉不保留空标题或错误计数 权限负向测试
技术详情 原始 ID、端口、哈希和日志默认放在可展开技术详情 技术详情纵向展开,不覆盖主内容 展开/收起和折行测试

“折叠”只改变可见性,不改变路由、数据源或权限;“展开”不能触发探测、刷新或写操作。导航状态可以是页面局部 UI 状态,但当前页面和权限必须由路由与服务端投影决定,不能由浏览器本地缓存伪造。

🧪 P22-5 验收矩阵

验收类别 测试场景 必须通过的条件
结构 展开六个一级方向并逐组检查 每个页面只在一个主归属下出现,层级无跳级
路由 直接打开二级和三级页面 自动展开完整父级路径,当前页高亮正确
折叠 手动展开、收起当前组和非当前组 当前组不会被错误隐藏;收起不改变页面内容
刷新 在三级页面刷新、前进、后退 路由、当前路径、展开状态和页面数据来源一致
数据 从网络可达性进入节点路径视图 复用同一网络快照,不额外触发探测或消耗额度
状态 活动告警、历史未读、AI Boss 处理中分别存在 三者显示不同状态和入口,不互相冒充
响应式 桌面 1440x900、移动 390x844 无页面级横向滚动,文字、角标和按钮不重叠
键盘 Tab、Enter、Space、Escape 操作导航 焦点可见,组可展开/收起,Escape 可关闭移动抽屉
触摸 移动端点击组标题、页面入口和返回 点击目标稳定,不误触,不触发重复请求
权限 隐藏一个页面权限后重新加载 不出现空组、错误角标或可访问但不可用的入口
负向 模拟过期快照、后端失败和未知状态 页面显示“过期/未验证/不可用”,不显示默认绿色
视觉 对比一级、二级、三级以及当前态 不依赖颜色单一差异;缩进、字号、轨道和图标至少有两种稳定区别

P22-5 的完成证据必须同时包括:导航树与页面归属表、桌面和移动端真实页面证据、键盘/触摸交互记录、权限负向测试、数据源映射和“无额外探测”的调用证据。仅提交截图或仅通过前端单测,都不能作为完成依据。

🔍 现状事实与根因假设

现象 当前判断 需要验证的根因
探针数量和业务目的不完整可见 已确认存在探针与告警中心脱节 是否存在未登记、已停用、退役但仍被引用的探针
告警可能自动变成已处理 已确认恢复事件和处置状态曾被混用 恢复事件是否被错误写成 AI Boss 处置完成
AI Boss 处理记录不清晰 已确认 AI Boss 与告警中心是两个渠道 是否存在事件关联 ID、处理动作和真实验收证据
Console 菜单职责混杂 已确认部分平台模块归类不合理 当前菜单是否按历史实现而不是系统职责组织
页面之间可能重复读取或重复探测 P21 已证明统一快照可避免重复消耗 其他模块是否仍自行触发探测或维护第二份状态
过渡探针仍可能被兼容回退读取 API 的网络投影在 Tailnet 结果不明确时仍可读取 R4 代理快照;P21 已将 R4 定位为停用/人工诊断 P22-4 必须冻结回退规则,避免历史快照影响当前节点状态
文档和实际部署可能漂移 架构文档存在旧阶段状态和窄化的 P22 标题 哪些文档属于权威、哪些只是历史记录、哪些需要更正

这些内容在 P22-0 事实冻结阶段统一验证,不在计划建立阶段直接假设为已修复。

🧱 数据、状态与职责契约

P22 后续实现必须建立以下对象关系,具体字段在 P22-0 和 P22-1 评审后冻结:

对象 权威来源 必须记录
探针 探针注册表或正式配置 业务目的、负责人、运行状态、调度、输入、输出、告警出口
探针观测 探针运行产物 观测时间、来源、目标、结果、错误类别、证据引用
告警事件 告警数据库 发现事件、组件上下文、去重键、当前状态、恢复事件
AI Boss 处理 AI Boss/Runtime 事件 是否接收、分析、执行、等待人工、完成或失败
处理动作 Runtime 或固定系统动作审计 动作 ID、目标、前置检查、结果、回滚和操作者
恢复事件 同一组件上下文的真实恢复观测 恢复时间、来源、验证结果、关联活动告警
Console 投影 API Gateway 只读聚合 页面来源、快照时间、过期状态和详情引用

状态必须至少区分:发现、已通知、AI Boss 已接收、处理中、等待人工、已恢复、已验证关闭、历史未读。其中“已恢复”只能由真实恢复观测触发,“已验证关闭”不能由恢复事件自动冒充,“AI Boss 已接收”不能冒充“AI Boss 已处理”。

🛠️ 工作包总表

编号 工作包 目标 依赖 计划状态
P22-0 范围冻结与事实盘点 固定系统边界、权威资料和禁止事项;产出事实清单、页面归属初表、探针—告警—AI Boss 关系表和冲突清单 P21 收口 已完成并归档
P22-1 模块与职责域重构 建立职责域矩阵、跨域数据流、页面—职责映射和负向规则清单 P22-0 已完成并归档
P22-2 探针业务与告警闭环 建立探针目录,区分页面数据源、告警来源、仅业务观察和历史探针 P22-0、P22-1 核心分类完成;运行时注册表和完整验收转入 P23
P22-3 告警与 AI Boss 联动模型 区分发现、通知、接收、处理、恢复、验证关闭和历史未读 P22-2 语义分层完成;严格不变量和验证关闭转入 P23
P22-4 权威数据与状态源统一 统一快照、更新时间、证据、过期和投影规则,并切断停用 R4 对当前状态的影响 P22-1、P22-2 已完成并归档;R4 运行对象已全部移除
P22-5 Console 信息架构与导航重构 按六个一级方向重组菜单、页面入口、层级视觉、折叠/展开交互和桌面/移动端验收 P22-1、P22-4 已完成并归档
P22-6 架构基座与文档统一 根据已确认职责修订架构原文和计划导航 P22-1 至 P22-5 已完成并归档
P22-7 兼容、迁移与回退设计 明确旧页面、旧接口、旧告警、历史对象的兼容边界 P22-4、P22-5 核心边界完成;历史告警迁移转入 P23
P22-8 分批实施与验收 为后续代码、部署和生产验收建立批次门 P22-6、P22-7 核心发布完成;告警端到端负向回归转入 P23

工作包不是按编号自动执行。每个工作包开始前必须重新确认目标、证据、写入范围和回退方式。

🧪 验收与证据要求

验收层 必须证明的事实 证据
文档层 P22 范围、分支和边界一致 计划页、历史记录、计划门禁
架构层 每个模块只有一个明确职责和权威状态源 架构矩阵、数据流图、职责表
探针层 每个探针有业务目的、运行状态和告警出口 注册表、timer/service、运行快照
告警层 发现、恢复、处置、关闭状态可区分 API 返回、数据库记录、负向回归
AI Boss 层 AI Boss 是否接收和是否完成处理可以独立证明 调用事件、处理记录、审核结果
Console 层 菜单归类、权限、数据来源和过期提示正确 浏览器契约、桌面验收、移动端验收
发布层 代码、文档、生产版本和远端 Action 一致 提交 SHA、远端 SHA、Action、生产回读

任何页面显示“正常”“已处理”“已恢复”时,必须能够追溯到真实证据。不能通过前端硬编码、默认绿色或旧快照制造正常状态。

P22-5 还必须增加导航专属验收:一级、二级、三级层级在桌面和移动端均可区分;折叠组显示真实展开状态;当前页面的完整路径清楚可见;切换页面不会把用户带到错误层级;键盘和触摸操作均能展开、收起和返回;页面权限隐藏菜单时不会留下空组或错误计数。

🧭 计划细化后的执行顺序(历史)

以下顺序已按门禁执行完毕,保留为复盘基线:

  1. P22-0 只读盘点:冻结现状事实、权威来源、页面清单和冲突项。
  2. P22-1 职责评审:确认 Network、Agent、Runtime、AI Boss、Alert、Platform、Console、Storage 的边界和跨域契约。
  3. P22-2/P22-3 业务闭环评审:依据本计划已写入的状态机、探针目录字段和用户确认语义,完成探针、告警、恢复、AI Boss 处理和关闭状态的逐项关系核对。
  4. P22-4 数据源冻结:确定每个页面的唯一数据源、快照复用、更新时间、过期标识、禁止重复探测规则,以及 Tailnet 主口径失效时是否允许读取 R4 过渡快照。
  5. P22-5 导航与页面设计:根据 P22-1 和 P22-4 的结果定稿导航树、页面归属、折叠行为和验收矩阵。
  6. P22-6/P22-7/P22-8:最后统一修订架构基座、兼容边界、实施批次、回退和发布验收。

每个工作包都必须经过“计划细化 → 用户确认 → 只读事实或设计验收 → 才能进入实施”的门禁。P22 已按该顺序完成并归档;最终生产证据见已完成归档。

🧪 P22-8 收口现场证据补充(2026-11-03)

101 的无线网络永久关闭和重启持久性复验已经完成。重启后的启动时间为 2026-11-03 17:58:06 CST;重启后 Wi-Fi 仍为 disabled/unmanaged,默认 IPv4 路由只保留有线接口,DNS 默认路由只保留有线接口;Tailscale BackendState=Running,101、RR、102、MM、d02、DD、dog 等主要节点恢复在线,外部 API 健康请求返回 HTTP 200。依据是 101 本机重启后的 nmcli、ip route、resolvectl、tailscale status --json 和 HTTPS 健康回读。

该复验确认“双网卡争抢默认路由/DNS”已通过机制层配置关闭,而不是继续依赖路由 metric。当前仍存在的 systemd-networkd-wait-online.service 失败、Android ADB 无设备和 OmniRoute 观察失败,分别属于未使用的 networkd 等待门禁、设备业务探针和既有业务观察失败,不能重新归因到本次网络掉线。

生产收口过程中还发现并修复了两个发布边界问题:第一,文档站尚未发布 Reachability Refresh 部署脚本,HTTP 404 不能作为部署成功依据;第二,手动刷新部署脚本在 R4 退役后仍残留 PROXY_SNAPSHOT 状态字段,现场安装的核心服务已启用但状态命令失败。修正版已重新部署,RR 上 /usr/local/lib/agentmeshos/reachability-refresh/worker.py 的 SHA256 与仓库提交 64003785 一致,执行器 path 单元为 active/enabled。

🔌 分布式底座接入声明

P22 实施期间不接入分布式执行底座。 本阶段完成的是职责域、告警语义、Console 导航、网络数据源和 R4 退役,未提交 Nomad Job、未运行 Worker、未写入 Cloudreve;Runtime、API Gateway、Console 和节点网络只做已声明的部署与回读。

层 本阶段处理
Network 不接入;只记录网络职责边界,不改网络
Nomad 不接入;不提交任务
Compute 不接入;不分发脚本或构建产物
Storage 不接入;计划正文写入 Git,不写 Cloudreve
Observability 仅引用已有证据,不增加探针
Adapter 不适用;不调用 NomadAdapter、StorageAdapter 或 ToolAdapter
凭据 不读取或分发生产凭据

后续进入实施工作包后,若需要采集、解析、迁移或运行验证,必须在对应工作包中重新声明底座接入、数据路径、凭据边界和验收证据。

🔁 回退与兼容原则

计划阶段的回退方式是保留现有 P21、P19、P20 和架构文档,不改变当前生产状态。后续实现阶段必须采用批次化发布、旧接口兼容、last-known-good 配置和可回退页面入口。

旧告警、旧探针、旧菜单和历史状态不能直接删除。只有完成对象映射、历史读取和负向回归后,才允许退役;历史审计记录必须保留,不能用删除数据解决展示混乱。

⚠️ 风险与未决项 / 需要用户决策

未决项 当前状态 需要确认的内容
P22 是否正式切为当前阶段 已完成并归档 state.json 已滚动到 P23 占位阶段
P19 是否在 P22 内重新启动 尚未决定 当前只审查其职责,不自动恢复 P19
告警中心与 AI Boss 的最终关系 已有方向,契约未冻结 确认 AI Boss 是处置执行者、分析者,还是可选处理渠道
六类 Console 导航 用户暂时接受 后续需要按真实页面清单逐项归类
导航视觉和折叠细节 目标已明确,具体样式未冻结 P22-0 盘点现有菜单,P22-5 提交线框、交互规则和桌面/移动端验收矩阵
架构基座更新时间漂移 已发现 P22-6 统一修订,不在计划创建阶段直接改写
网络迁移和整套重建 已取消/暂停 如未来重新启动,必须另立计划

🔜 下一步

P22 已归档,不再继续追加实施范围。Memory Server 业务探针的正式部署来源、职责归属和告警出口转入 P23 后续治理评审;在 P23 完成范围冻结前,不删除仍在运行的 Memory 探针,也不把它当成网络探针。