feat(chv): 架构与代码质量提升——WarmPool 定案、长函数提取、严格测试替身、Docker 同步守卫、配置统一校验、类型注解与 ADR

堆叠于 #246(feat-chv-secfix),只到 PR OPEN,未合并、未部署。
安全语义不变:egress、key seed 投递、磁盘删除、默认 provisioned、
tap 校验一律保留;前端零改动。
- WarmPool 定案为实验性(ADR-5):dispatch 永远冷启动,
  wired_to_dispatch 恒 False,acquire/resume 只保留实验接口,
  worker 仍调 reconcile_orphans 清理残留。
- 长函数提取:preflight 126→31、wake_vm 135→36、__init__ 69→31、
  build_chv_config 159→58;错误文案逐字不变。
- 严格测试替身:fake API 校验 VmConfig(任务盘+seed 盘、net
  无重复),fake SSH 校验 known_hosts 钉死;新增 5 项测试。
- Docker 同步守卫:8 个真实标记用例下 Docker 内联版与正典
  parse_goal_result 状态全等,改分叉即 fail。
- 配置统一校验:preflight 以 config_invalid 统一兜底端口/配额/
  超时/快照/host-key 模式(构造时已校验正常值,preflight 兜底
  事后改写);CHV_NET 与 CHV_NET_JSON 双设仍警告不硬拒。
- 类型与 lint:chv 叶子模块公开 API 补类型注解;stdlib 扫描
  揪出 executor 内 1 个真死 import(host_key_paths)并删除。
- ADR:docs/chv-architecture.md(ADR-1 至 ADR-7)。
测试:CHV 163 项全过;cloud 全量 1593 项三跑结果为 8 errors
(首跑详细日志因 tail 截断丢失)、全过、1 失败(浏览器代理
时序测试,与 CHV 无关),全量本身存在时序偶发,CHV 套件
确定性全过。
This commit is contained in:
host committed 2026-10-31 05:50:56 +00:00
1 parent baf26beb78
commit c908a0147a
12 files changed
+725 -239

No files matched your search

+6 -6
View File
@@ -20,7 +20,7 @@ from cloud.chv.errors import ChvFailure
_NET_FIELDS = frozenset({"tap", "mac", "ip", "mask"})
def ensure_secure_state_dir(state_dir):
def ensure_secure_state_dir(state_dir: str) -> None:
"""建 state_dir 并保证 0700(H6):目录不存在即按 0700
建;已存在但组/其它位可访时 chmod 0700;失败即
ChvFailure(state_dir_insecure),绝不带着 /tmp 式
@@ -48,7 +48,7 @@ def ensure_secure_state_dir(state_dir):
return state_dir
def socket_is_live(socket_path):
def socket_is_live(socket_path: str) -> bool:
"""VMM api-socket 是否真有监听者(M7):能连通才算活。
普通文件、空文件、已死 VMM 的残留 socket 一律算死——
容量计数不再被残留文件占满。连接失败的任何异常都算
@@ -69,7 +69,7 @@ def socket_is_live(socket_path):
return False
def parse_net_entries(net_json):
def parse_net_entries(net_json: str) -> list:
"""解析 CHV_NET_JSON 为条目 list(非法 JSON / 非
list/dict 即 net_config_invalid)。"""
if not net_json:
@@ -86,7 +86,7 @@ def parse_net_entries(net_json):
return entries
def validate_net_entries(entries, existing_entries):
def validate_net_entries(entries: list, existing_entries: list) -> list:
"""net 条目隔离校验(H7 + L4):
- 字段白名单:未知字段即 net_config_invalid;
@@ -139,7 +139,7 @@ def validate_net_entries(entries, existing_entries):
return normalized
def validate_egress_proxy(egress_proxy):
def validate_egress_proxy(egress_proxy: str) -> None:
"""egress 代理地址校验(H1 代码门的一部分):须为
http/https URL 且带主机名;否则 net_config_invalid…
实际 kind 用 config_invalid(preflight 的配置类失败)。
@@ -167,7 +167,7 @@ def _is_within(directory, path):
return path == directory or path.startswith(directory + os.sep)
def validate_snapshot_url(snapshot_url, state_dir, snapshot_dir=None,
def validate_snapshot_url(snapshot_url: str, state_dir: str, snapshot_dir=None,
allow_remote=False):
"""快照 URL 白名单(L2):