跳转至

阶段十二:102 节点纳管一次性最终验收

计划 ID:phase-12-pcdell-102-final-acceptance

阶段状态:已完成并归档

计划状态:已完成

当前工作包:无;P12-0 已完成并归档

权威边界:P12 只做 102 节点纳管的最终验收;必需项通过后正式关闭“102 节点纳管”。OmniRoute 迁移由后续 P13 阶段承接,不属于 P12 工作包、验收出口或关闭前置条件。本文件路径是历史稳定 URL,不再表示 P12 包含 OmniRoute 迁移。

📌 结论摘要

P11 已正式冻结归档,用户已于 2026-10-01 明确授权开始 P12-0。唯一工作包已完成现场验收和最终受控重启复核,8 项验收全部通过,“102 节点纳管”正式关闭。依据是用户授权记录、P11 完成归档、docs/plans/state.json、本页“2026-10-01 P12-0 现场验收结果”和 P12 完成归档。

P12 不再保存 OmniRoute 的目标版本、安装步骤、版本差异、数据恢复、MM 回源和切换细节。后续迁移统一进入 P13 OmniRoute latest stable 原生迁移。P12 只定义正式移交接口:P12 关闭后,才允许把机器状态切换为 P13;后续 P13-0 至 P13-4、P13-B 和 P13-C 已完成版本冻结、102 安装、隔离恢复、生产切换、公网直连和 RR omni 全量退役。

P12-0 全部验收通过,102 节点纳管已关闭。 P13 已完成并归档,P13 完成生产迁移、公网直连与 RR omni 全量退役,102 3.8.51 是唯一生产权威。

🗂️ 目录

🧾 计划状态

项目 当前值 依据
当前阶段 P12 docs/plans/state.json
阶段状态 已完成并归档 P12-0 的 8 项验收全部具备现场证据
计划状态 已完成 P12 的 102 验收边界和 P12→P13 移交接口已经收口
当前工作包 无;P12-0 已完成并归档 本阶段只有这一个工作包,已完成
权威记录 本文件 102 纳管关闭以本计划的 8 项验收为唯一清单
验收进度 8 项全部通过 本页“2026-10-01 P12-0 现场验收结果”和最终重启复核
后续迁移 P13 已完成并归档 迁移、公网直连和 RR 全量退役均已完成;不改变 P12 关闭结论

P10、P11 均已完成归档。ThreeDogs、DERP、Claude 和微信 ClawBot 继续冻结,不从 P11 自动派生任务,也不进入 P12。

🎯 目标、成果与验收契约

P12 的唯一目标是一次性验证 102 纳管是否满足全部必需条件。验收只覆盖主机身份、SSH 与身份、基础服务、RR 遥测、三个管理入口、系统卫生、条件性重启持久性和 OmniRoute 边界确认;完成后只产出验收证据、残余风险和关闭结论。

契约项 内容 依据
阶段目标 一次性核对用户确认的 8 项验收要求,通过后关闭“102 节点纳管” 用户验收清单
阶段成果 P12-0 逐项证据、条件项状态、残余风险和最终关闭结论 本文件“P12-0 唯一验收清单”
完成口径 必需项 1 至 6 和第 8 项边界确认通过;第 7 项按窗口执行或记录残余风险 本文件“验收规则与关闭条件”
非目标 不迁移 OmniRoute,不新增子工作包,不触发无关网络、服务或历史阶段整改 用户要求迁移独立,以及 P12/P13 单阶段边界

P12 不把 102 纳管拆成 P12-1、P12-2 等零散工作包,不进行全系统网络整改或无关服务优化,不重新打开 ThreeDogs、DERP、Claude、微信 ClawBot 或 P11 历史事项,也不通过 Git、聊天、日志或普通回复传递 Provider、OAuth、API Key 或 SSH 私钥。

🧪 P12-0 唯一验收清单

验收项只有以下 8 项。任何新条件都必须先由用户明确修改本清单,不得在实施中自行增加子任务。

编号 验收项 必需或条件 通过证据
1 主机名、有线地址、WiFi 地址、Tailnet 地址和别名一致 必需 102 本机 hostname、链路地址和 Tailnet 地址;与 docs/node-aliases.md 登记逐项一致
2 SSH 10222、公钥登录、root 自动化身份和 hhtbing 本地应急身份一致 必需 从允许来源使用明确 IP、端口、用户和 IdentityFile 登录;分别核对 root 自动化与 hhtbing 应急身份
3 Tailscale、Docker、Nomad Client、node_exporter 均为 enabled、active、healthy 必需 逐项 systemd/Docker/Nomad 状态、健康检查和重启策略;四项缺一不可
4 RR 能正常采集 102 的 9100/metrics 必需 从 RR 直连和回读 102 的 9100/metrics,确认 HTTP 成功、内容非空且指标归属为 102
5 RR、101、Home 三个管理入口均能管理 102 必需 三个来源分别按登记身份直连 102 并回读主机名、用户和 Tailnet 地址
6 无 failed unit、无重复 exporter、无错误 UFW 来源规则 必需 102 上执行只读 systemctl --failed、exporter 实例清单和 UFW 规则核对
7 窗口允许时完成一次重启持久性复核 条件 窗口允许时执行受控重启,随后复核身份、SSH、四项服务、9100 遥测、三管理入口和 UFW
8 不要求把 OmniRoute 迁移进 102,迁移仍是独立事项 边界确认 P12 验收和关闭结论不得以 OmniRoute 迁移、容量、数据恢复或 P13 进度为前置条件

第 7 项只有在维护窗口允许时才执行。窗口不允许时不得写成“已通过”,必须明确记录“未执行重启持久性复核”的残余风险,并由用户决定是否接受该风险后关闭,或等待窗口后补做同一条验收。

🧾 2026-10-01 P12-0 现场验收结果

本轮从 pcdell-101 作为执行主机,于 2026-10-01 对 102 执行只读验收。除受控 SSH 探测和路由/服务状态读取外,没有修改 102 的主机配置、服务、数据、UFW、Nomad Job 或 OmniRoute 状态。

编号 结果 关键证据 判定与下一步
1 ✅ 通过 102 返回 hostname=pcdell-102;有线 enp0s31f6=192.168.50.102、WiFi wlp2s0=192.168.50.202、Tailnet 100.64.0.4;360T7 DHCP 预留名称、MAC 和 IP 与节点实际值一致 身份、地址和别名一致,无需处理
2 ✅ 通过 sshd -T 返回 port 10222、pubkeyauthentication yes、passwordauthentication no;101 分别以 root 和 hhtbing 通过 Tailnet 与局域网地址登录;root 密码锁定,hhtbing 已设置本地密码并具备 sudo 权限 自动化与本地应急身份边界清楚,无需处理
3 ✅ 通过 Tailscale 1.102.4 为 enabled/active、BackendState=Running、Health=[];Docker enabled/active、NRestarts=0;Nomad enabled/active,RR 端显示 pcdell-102 为 ready/eligible,Docker/exec 驱动均为 Healthy;官方 node_exporter:v1.9.1 容器 running、restart=always,来源守卫 enabled/active 四项服务达到验收口径;exporter 的可选 thermal_zone 日志提示列为非阻断残余风险
4 ✅ 通过 RR 从 100.64.0.1 直接读取 http://100.64.0.4:9100/metrics,HTTP 200、约 88,847 bytes;返回 node_cpu_seconds_total 和 node_uname_info{nodename="pcdell-102"} RR 采集链路与指标归属均正确,无需处理
5 ✅ 通过 101 使用 agentmeshos-101-to-102、RR 使用 agentmeshos-rr-management、Home 使用 administrator@Home 对应私钥,均从各自管理入口直连 100.64.0.4:10222 并回读 pcdell-102、root、100.64.0.4 三个管理入口一致,无需处理
6 ✅ 通过 systemctl --failed 为空;exporter 容器、进程和 9100 监听均为 1 个;UFW 只允许 RR 100.64.0.1 访问 102 的 9100,从 101 访问同一端口被拒绝;10222 来源规则与 Tailnet 管理边界一致 无 failed unit、重复 exporter 或错误来源规则;无需处理
7 ✅ 通过 用户在维护窗口先完成一次重启;现场发现并修复无 IPMI 硬件上的 openipmi 失败单元和 ts-input 旁路问题后,又完成最终受控重启。新 boot_id=bd3d4e88-5118-4805-b1d6-f8766c8a4a6b,uptime_seconds=26 时回读身份、双网地址、Tailscale、Docker、Nomad、唯一 node_exporter、RR 遥测、RR/101/Home 三入口、UFW 和 systemctl --failed 均为预期状态 重启持久性通过,102 纳管关闭
8 ✅ 通过 command -v omniroute 返回未安装,agentmeshos-omniroute.service 不存在;本轮未安装、恢复、迁移或切换 OmniRoute 迁移仍由 P13 独立承接,不阻塞 102 纳管

本轮额外发现但不属于 P12 验收改写项:101 的 /root/.ssh/known_hosts 中存在一条旧的 100.64.0.4 主机记录。Tailnet 直连管理仍通过,且有线与 Tailnet 的 ED25519 指纹均为 SHA256:0E60z8bMJx1gLcgzIJLhXmnDlnt4qYtJtpf6vRQO5Sw;该旧记录未在本轮删除,以免超出 P12 只读边界。

重启后根因修复与负向回归

最终重启暴露了两个可复现的启动问题,均已在关闭 P12 前修复并做过启动回归:

问题 根因 修复与证据
openipmi.service 在 102 启动后为 failed Dell OptiPlex 7050 的 SMBIOS 没有 IPMI Management Controller,openipmi 包仍把无硬件消费者的 SysV 服务设为开机启动 记录原状态后执行 systemctl disable、systemctl mask 和 reset-failed;最终启动后为 inactive/dead/masked,systemctl --failed 为空
101 可绕过 UFW 读取 100.64.0.4:9100 v0.2.2 守卫只向 filter INPUT 插入规则,Tailscale 随后把 ts-input 重新放到链首并接受其他 Tailnet 来源 仓库脚本升级到 v0.2.3,将允许 RR 和拒绝其他来源的规则前置到 raw PREROUTING;102 安装哈希 13c702a781f7e424350c1ddb02bf11b14101458fecdf24bac40debcf13366f5c,最终启动后 101 超时、RR HTTP 200

最终重启后的服务证据为:Tailscale BackendState=Running、Health=[]、RouteAll=false、ExitNodeID=""、CorpDNS=false;Docker、Nomad、来源守卫均 enabled/active;Nomad 在 RR 端为 ready/eligible,Docker/exec 驱动为 Healthy;node_exporter:v1.9.1 容器 running、restart=always、进程和 9100 监听各 1 个;RR 采集返回 HTTP 200、87,619 bytes 和 node_uname_info{nodename="pcdell-102"}。RR、101、Home 三个入口回读到的 boot_id 与 102 本机一致。

✅ 验收规则与关闭条件

  1. P12-0 是一次性验收,不新增子工作包,不为每个验收项创建平行计划。
  2. 必需项 1 至 6 和第 8 项边界确认全部通过后,P12-0 才具备关闭 102 纳管的条件。
  3. 第 7 项窗口允许时必须执行;未执行时只能记录残余风险,不能伪造通过。
  4. 任何验收失败都留在 P12-0 内记录和收敛,不拆成新的阶段任务;超出本清单的修复必须另行获得用户授权。
  5. 关闭“102 节点纳管”必须同时具备逐项命令结果、关键输出、时间、节点身份和执行者信息。
  6. 无真实证据、只有历史记录或模型推断的结果,不得作为通过依据。
  7. P12 关闭和 P13 启动是两个连续状态记录,不得在同一提交中伪装成同一个已完成阶段。

🔀 P12 到 P13 的正式移交契约

P12 与 P13 的关系固定为前后阶段,不是两个并列计划。P12 负责证明 102 的纳管能力和边界;P13 负责在后续独立授权后把 RR 的 OmniRoute 生产迁入 102。两者通过 docs/plans/state.json、计划历史、完成归档和同一 Git 主线串联。

环节 P12 责任 P13 责任 禁止边界
当前阶段 保持 P12 为唯一当前阶段 P12 关闭前只保存草案 P13 不得提前取得当前阶段或生产执行授权
节点能力 验证 102 身份、SSH、服务、遥测和管理入口 复用已验证的 102 节点能力做目标环境预检 P12 不安装 OmniRoute,不恢复 RR 数据
生产写入 全部验收以只读为主 冻结 RR 作为生产源,设计受控切换 任意时刻不得出现 RR 与 102 双 SQLite 写者
版本与差异 不保存 Omni 版本或升级细节 执行时重新查询官方 latest stable 并完成差异报告 不得把当前草案中的示例版本直接当成执行时目标
数据与配置 只确认 P13 有正式入口 使用官方备份/快照、恢复 SQLite,并单独处理包外配置 不得只复制 .env 就宣称迁移完成
切换与回退 不修改 MM 回源、RR 服务或调用方配置 完成最终快照、切换和全链路验收;P13-B/P13-C 再完成公网直连和 RR 退役 P13 全链路通过前,RR 仍是权威和回退点;通过后按 P13-C 记录退役
状态切换 P12 通过并归档后写入关闭记录 下一条状态记录才允许把 current_phase 切换为 13 P12 未关闭时不得修改当前阶段指针

移交产物至少包括:P12-0 的 8 项验收证据、102 节点身份与入口摘要、已确认可用的服务基线、最终重启复核结果、P13 计划链接和用户授权记录。移交记录不包含任何密钥、Provider 内容、SQLite 原文或 OmniRoute 数据。

🧱 技术栈与架构选型

102 最终验收沿用现有 Headscale/Tailscale 控制网络、systemd、Docker、Nomad Client、node_exporter 和 UFW,不引入新的服务或调度面。验收方式以只读状态核对为主,不通过一次成功 HTTP 响应替代节点身份、服务状态、指标来源和多来源管理验证。

候选方式 可维护性 风险 当前判断
在 P12 中同时验收 102 并迁移 OmniRoute 低,两个目标共享失败和回退边界 高,节点关闭被迁移状态绑定 禁止
P12 只验收 102,P13 独立迁移 高,职责和回退边界清楚 可控,需要正式移交记录 采用
放弃 102 纳管验收,直接迁移 低,节点能力没有统一证据 高,目标环境不可信 禁止

选择前后阶段串联的依据是:102 是否合格应由稳定节点验收判断,OmniRoute 是否可迁移应由版本、数据、协议和切换验收判断。把两者放在同一完成口径会导致目标漂移和互相阻塞。

🔌 架构、数据与接口契约

102 纳管验收只读取 102、RR、101 和 Home 的必要状态,不改变 Runtime、Bridge、Gateway、Nomad、Docker、UFW、MM Nginx 或网络配置。P12 不创建 Nomad Job,不修改生产数据库,不停止 RR OmniRoute,也不更换调用方地址。

节点身份统一以 docs/node-aliases.md 为核对入口。验收命令输出只保留主机名、地址、服务状态、HTTP 状态、非空指标摘要和必要错误原文;SSH 私钥、Provider、OAuth、API Key 和 Runtime Key 不进入 Git、日志或模型上下文。

🧩 分布式底座接入声明

接入结论:P12-0 只读接入 Network、Compute 和 Observability 做节点验收;Storage 不参与数据迁移;OmniRoute 迁移不接入本阶段。

使用层 P12 用途 不适用范围
Network SSH、Tailscale、UFW、三管理入口和节点身份回读 不改变路由、ACL 或防火墙规则
Compute Docker、Nomad Client、systemd 服务和健康状态 不提交任务、不重装服务
Storage 不适用 不迁移 Provider、SQLite、日志或长期数据
Observability node_exporter、RR 9100 采集和 failed unit 不新增 exporter 或告警规则
Nomad 只核对 Client 状态 不作为迁移执行器
  • Adapter 归属:不新增 Adapter;P13 如启动,仍使用官方 OmniRoute CLI/API 和宿主 systemd 集成。
  • 执行映射:P12-0 由当前执行主机发起,读取 102、RR、101 和 Home;不提交 Nomad Job。
  • 数据路径:验收摘要进入计划证据,完整数据不经过 Tailnet;未来迁移按 P13 的数据面设计执行。
  • 凭据路径:SSH 私钥和所有模型凭据保持在 root-only 环境,不进入 P12 证据。
  • 生命周期:P12-0 通过后关闭 102 纳管;重启窗口未执行时保留明确残余风险。
  • 验收证据:主机身份、地址、服务状态、RR metrics、三来源登录、failed unit、exporter 清单、UFW 规则和可用的重启结果。

✅ 进入执行条件

  1. 用户 review 并确认本计划。
  2. 用户明确授权开始 P12-0。
  3. 102 当前在线且登记入口可用;若不可达,先记录网络事实,不伪造验收。
  4. 重启持久性窗口可用时,提前确认窗口;不可用时明确记录条件项。
  5. P13 是否具备版本差异或执行条件,不影响 P12-0;P12 也不为 P13 预执行任何生产动作。

截至 2026-10-01,条件 1 至 4 均已满足;P12-0 的 8 项验收全部通过,阶段已完成并归档。

🔁 回退方案

102 最终验收以只读为主,不计划修改系统配置,因此不存在常规部署回退。若某项检查失败,P12-0 停在失败证据处,不把失败项写成通过,也不自动拆出新计划。

任何为避免验收中断而提出的配置修复都必须先说明目标、变更文件、备份、回退命令和验证方式,并获得用户授权。P13 的回退边界、RR 生产保留和 SQLite 单写者要求由 P13 迁移计划单独定义。

⚠️ 未决项 / 需要用户决策

事项 当前事实 下一步
P12 关闭 P12-0 的 8 项验收全部通过并已归档 无需继续 P12 工作;后续不得从 P12 拆出零散任务
重启持久性 最终受控重启后身份、SSH、服务、遥测、三入口、UFW 和 failed unit 均通过 已关闭,后续仅在外部版本、网络或服务发生漂移时重新验证
101 known_hosts 存在旧 100.64.0.4 记录,但当前 Tailnet 管理可用且主机指纹已复核 如需清理,需要在 P12 之外单独授权并先备份
P13 生产状态 P13-4、P13-B 和 P13-C 已完成切换、公网直连、全链路验收、真实回退、再次切换和 RR omni 全量退役;102 3.8.51 是唯一生产权威 P13-6 完成健康观察迁移、最终验收、Git 提交和 CI 门禁
P13 目标版本 执行版本为 Node 22.23.0 与 OmniRoute 3.8.51,RR omni 数据和回退路径已删除 不在 P12 内改写版本;后续上游漂移必须回到 P13 重新评审