feat-chv-to10:往 10 分方向提升(类型/lint 清零、worker 适配抽取、审计落盘、lockfile 生成脚本、前端四态与统一文案、就绪清单 §13)
This commit is contained in:
1 parent
df8c64bd64
commit
2f3ff8b3ec
22 files changed
+1400
-282
No files matched your search
@@ -459,3 +459,116 @@
|
||||
本 PR 顺序合并 → KVM 宿主 + 防火墙清单 → 镜像构建发布
|
||||
→ §11.5 + 本节真机清单全过 → 默认关闭下单租户/受信项目
|
||||
灰度 → 全量多租户(须另行决策,不在本轨内默认开启)。
|
||||
|
||||
## 13. to10 提升轨 feat-chv-to10(堆叠于 #257 之上)
|
||||
|
||||
本节是准备工作,不是启用结论:代码侧的 to10 项已做,
|
||||
生产就绪与动态安全仍未到 10 分(见 §13.4 外部关卡)。
|
||||
|
||||
### 13.1 合并前 diff 复核清单(以当前 main 头预填)
|
||||
|
||||
- 当前 main 头(本轨核查时):`aebc6238a613066316ec18796b83ea8fc2d8835e`
|
||||
(Merge PR #201)。链上 10 个 PR 在核查时全部
|
||||
OPEN / MERGEABLE(#216 base main,#221→#257 依次堆叠,
|
||||
本 PR base 为 feat-chv-arch-maint-fe)。合并时必须重新
|
||||
核查:main 头若已前进,整条链须逐个 rebase 并重跑测试,
|
||||
绝不直接合并旧基底。
|
||||
- 逐项复核点(合并执行者逐项打勾,任一项不符即停):
|
||||
1. server 任务创建白名单含 `cloud-hypervisor`,环境创建
|
||||
白名单为 local/docker/cloud-hypervisor(不含 cloud),
|
||||
两处白名单差异仍在前端文案里写清。
|
||||
2. worker 断点分支:Local 原路径不变,CHV 经
|
||||
`worker_adapter.call_goal_resume_breakpoint`(薄包装名
|
||||
`_call_goal_resume_breakpoint` 仍在 worker.py,旧测试
|
||||
导入点不变)。
|
||||
3. sandbox re-export:`cloud/chv` 不再 export WarmPool
|
||||
(#257 已移实验模块),`cloud/sandbox.py` 的 CHV
|
||||
re-export 与 `cloud/chv/__init__.py` 一致。
|
||||
4. 前端产物:`cloud/console.html` 与 `dist/index.html`
|
||||
的 sha256 一致(本轨:`269820d1…f389`,353163 字节),
|
||||
产物内含新文案(“无法判断 VM 状态”1 处、
|
||||
“CHV worker 在线数未知”3 处);合并时重建后复核,
|
||||
不直接沿用本轨哈希。
|
||||
5. `package.json` 的 vitest 测试脚本与 lockfile 增量只含
|
||||
vitest 新条目,无旧包版本变动。
|
||||
6. 本轨新增文件:`cloud/chv/worker_adapter.py`、
|
||||
`cloud/tests/test_chv_to10.py`、
|
||||
`chv-guest/generate_lockfile.py`;本轨改动文件:
|
||||
`cloud/worker.py`(薄包装 + 删多余 `inspect` import)、
|
||||
`cloud/chv/executor.py`(审计落盘 + 两函数抽 helper)、
|
||||
`cloud/chv/config.py`、`disk.py`、`hardening.py`、
|
||||
`hostkeys.py`、`ssh_transport.py`、`experimental_pool.py`、
|
||||
`compat215.py`(类型注解 + ruff 整理)、前端 6 文件。
|
||||
7. CI:链上全部 PR 的 `verify` 仍是账单故障秒级失败模式
|
||||
(本轨核查时 #257 等均为 UNSTABLE,非代码失败);
|
||||
CI 变绿前不合并,绝不改 CI 配置绕过。
|
||||
8. 旧链 #199→#205→#207 与 #209–#215 仍全部 OPEN:
|
||||
合并前复核它们与本链的交集(server 白名单、worker
|
||||
断点分支、sandbox re-export),有冲突先解决冲突方,
|
||||
不静默覆盖。
|
||||
|
||||
### 13.2 真机验证清单(用例与验收标准细化)
|
||||
|
||||
以下用例全部待 KVM 宿主,验收标准是“通过才算”,不是
|
||||
“跑过就算”;任一用例未跑即记为未验证,不写进已验。
|
||||
|
||||
- V-1 冷启动:CHV worker 在 KVM 宿主上起 VM → guest
|
||||
SSH 就绪(钉死 known_hosts,provisioned 模式)→ 跑通
|
||||
一个真实任务(host.py 在客机内执行)→ 任务完成且 VM
|
||||
已销毁、任务盘已删。验收:任务状态 completed,宿主
|
||||
state_dir 无该任务残留盘与 seed。
|
||||
- V-2 seed 首启时序:provisioned 模式下客机 cloud-init
|
||||
在 sshd 启动前应用 seed(host key 不再生、客内密钥文件
|
||||
0600)。验收:`sshd -T` 显示 PasswordAuthentication no
|
||||
等加固项,known_hosts 钉死校验通过,非 TOFU 回落。
|
||||
- V-3 快照恢复:任务中途 hibernate(pause + snapshot +
|
||||
shutdown)→ restore 后显式 resume → 断点续跑完成。
|
||||
验收:恢复后 known_hosts 不变(不重预置),快照文件
|
||||
落盘非空且经 `snapshot_not_persisted` 校验。
|
||||
- V-4 网关真实任务:sub2api 网关任务在 CHV 上跑通,
|
||||
密钥只走 seed 客内文件,宿主 `ps` / `/proc/*/cmdline`
|
||||
里看不到密钥值。验收:任务完成 + 宿主进程表抽查无密钥。
|
||||
- V-5 取消与配额真杀:同步 SSH 阻塞中取消任务、配额超限
|
||||
时,看门狗调 `cancel_vm` 真关 VM。验收:VM 进程消失,
|
||||
任务状态 interrupted 且原因写回正确。
|
||||
- V-6 审计落盘:DB 审计回调失败时,`chv-audit-spill.jsonl`
|
||||
里有该事件行、`audit_failure_count` +1、任务不中断。
|
||||
验收:落盘行 event/task_id/detail 与丢失事件一致。
|
||||
- V-7 动态安全负向:客机 root unset 代理后直连(应被
|
||||
tap/防火墙挡住)、跨 VM 探活与 IP 冒用(SSH 钉死应拒)、
|
||||
崩溃注入后残留扫描(私钥/seed/盘应被清理或脏标记拒起)。
|
||||
验收:每一项都有“被挡住”的证据,不是有代码就过。
|
||||
- V-8 负载:4 VM 并发(`CHV_MAX_VMS` 默认值)下容量门
|
||||
计数含重启后残留 socket 扫描,死 socket 不占名额、活
|
||||
VM 不被超发。验收:并发任务全部完成或明确排队拒绝,
|
||||
无静默降级到 Docker/Local。
|
||||
- V-9 供应链清单:`generate_lockfile.py` 在构建宿主上跑
|
||||
出真实 lockfile,`--verify` 通过且 unresolved 为空;
|
||||
再用 `check_lockfile.py` 对 BUILDINFO.versions 复核。
|
||||
验收:lockfile 由构建宿主产出,不是本轨合成数据。
|
||||
|
||||
### 13.3 灰度启用清单
|
||||
|
||||
- 阶段 0(合并后、默认关闭):合并整条链,CHV 仍默认
|
||||
关闭,不进生产任务路由;先跑 §13.2 的 V-1~V-9。
|
||||
- 阶段 1(单租户可信项目):只对明确指定的单租户项目
|
||||
开 CHV(`CHV_REUSE_SINGLE_TENANT_EXPERIMENT` 与
|
||||
`CHV_SINGLE_TENANT_PROJECT` 的声明口径不变,复用
|
||||
实验仍需同时声明,两者缺一即 preflight 拒绝)。
|
||||
- 阶段 2(受限多租户):放开到受邀项目,监控 VM 残留盘、
|
||||
审计落盘、容量门与快照配额三项指标一周无异常。
|
||||
- 阶段 3(全量多租户):仅在阶段 2 指标干净 + 动态安全
|
||||
审计结论由 No-Go 改为有条件启用后,才可讨论;绝不
|
||||
从阶段 0 直跳全量。
|
||||
|
||||
### 13.4 外部关卡(本轨代码做不到,逐项列出)
|
||||
|
||||
1. CI 账单恢复变绿(硬门禁,合并前提)。
|
||||
2. 链上 10 个 PR 按顺序合并 + 本 PR 合并(需先过 §13.1)。
|
||||
3. 用户侧 provision KVM 宿主(裸金属或嵌套虚拟化实例,
|
||||
须见 `/dev/kvm`;生产宿主与本 VM 均无 KVM,无法替代)。
|
||||
4. 客机镜像真实构建与发布(`build.sh` 全量跑通 + V-9)。
|
||||
5. §13.2 真机验证全部通过(含 V-7 动态安全负向)。
|
||||
6. 负载测试(V-8)与安全审计结论更新(No-Go → 有条件启用)。
|
||||
7. 前端 live 点击验证(用户侧 live browser 检查清单见
|
||||
本 PR 描述;回环地址限制下浏览器任务无法代劳)。
|
||||
Reference in new issue
Block a user