V5.0.17 — Hermes v0.23.0 兼容
English
针对 #497,本版为精确 Hermes v0.23.0 2bd378ed1b8d6bf2192cb26e0a55ff3091e6bd19 增加兼容。未知源码继续拒绝;卡片样式与配置默认值不变。
范围
- 精确识别 completion wrapper 新增的同步
_note_bot_reply(source)条件分支;保留原有三语句 wrapper 契约,条件、调用方式或顺序发生未知变化仍拒绝。卡片抑制原生文本时,通过已确认回执补足原有 bot-loop 记账,不伪造delivered或改写agent_result。 - 核验 admission 的 SessionActor 与
session_settlement_recovery/session_runtime_workers的结算、独立 Task 与 shield 等待依赖,登记完整源码 cohort 和运行时绑定;保留原生归属与终局一次性确认。 - 新增 v0.23.0 PM writer/launch family,包含配置 writer、PM admission、后端证明与平台路径的精确核对,不按版本字符串放行。
- CI 增加固定源码与官方镜像 preserved/cleared 验收,保留旧版矩阵。
验收记录
发布提交为 d1bd76d5fcdd76cba810ca3b4ede6e1dba0fd877。PR #498 完整 CI 59/59、主线精确提交 CI 59/59、annotated tag 门禁 61/61 均通过;CodeQL 通过。支持的 Python、平台、旧上游与 8 个官方镜像场景均保留。PR 末轮曾因 macOS 报告上传 DNS 错误失败,保留原记录后在同一提交单项重跑通过。
普通非 editable wheel 在精确 v0.23.0 的私有环境中完成 install → repair → repeat install → doctor → restore,1 项事务测试通过(70.49 秒),源码与配置恢复逐字节一致。160 个包资源(158 个 Python 文件)与提交、wheel 和安装结果一致。匿名公开 Git tag 安装也通过:版本 5.0.17、direct_url.json 的 commit/tag、资源字节和 console --help 均符合预期。
公开后的四个资产匿名下载均为 HTTP 200,SHA-256 与 draft 核验副本一致,随后再次通过归档与实际解压检查。
三平台归档校验和、单一顶层目录及 9 文件清单通过。macOS 实际解压至 0700 / 1777 目标时,目录 inode/uid/gid/mode、哨兵和文件字节保持正确;Linux GNU tar 的 root/非 root 验收由 CI 覆盖。
源码与独立审查覆盖 31 来源漂移拒绝、loaded binding/default、多个 owner、重复与迟到回执,以及真实 settlement Task 的正常/取消/unknown 轨迹。本地冷校验约 0.44–0.58 秒,四次热校验约 0.07–0.08 秒;这是校验路径微基准,不是 Gateway/model 或客户端端到端延迟。原有来源拒绝和超时门禁未放宽,详细修正与失败记录见 #498。
报告者 Linux / PM / systemd user / split HOME 现场、真实 Gateway/model 与飞书客户端尚未复测。发布后应通过正常安装器刷新受管 hook,由原服务管理方重启 Gateway,再核对 /health 的新版本、generation 和 runtime readiness;不要手改 Hermes 源码或删除保护记录。
贡献
感谢 Lite-G 提供 #497 的精确源码定位、三层缺口与复测方案。问题证据与代码作者分开记录,历史贡献与提交作者保留。
English
This release addresses #497 for exact Hermes v0.23.0 commit 2bd378ed1b8d6bf2192cb26e0a55ff3091e6bd19. Unknown sources remain refused; card layout and configuration defaults are unchanged.
Scope
- Recognize the exact synchronous
_note_bot_reply(source)conditional in the completion wrapper, retain the earlier three-statement contract and refuse unknown conditions, invocation forms or ordering. When confirmed card delivery suppresses native text, preserve native bot-loop bookkeeping without fabricatingdeliveredor changingagent_result. - Verify SessionActor and the extracted
session_settlement_recovery/session_runtime_workerssettlement, separate-Task and shield-wait dependencies with a whole-source admission cohort and runtime bindings. Preserve native ownership and single-use completion acknowledgement. - Add an exact v0.23.0 PM writer/launch family, including config writers, PM admission, backend proof and platform-specific paths. Version strings do not authorize unknown source.
- Add pinned-source and official-image preserved/cleared acceptance to CI while retaining older matrices.
Acceptance record
Release commit: d1bd76d5fcdd76cba810ca3b4ede6e1dba0fd877. PR #498 full CI passed 59/59 jobs, exact main-commit CI passed 59/59, and the annotated-tag gate passed 61/61. CodeQL passed. Supported Python/platform coverage, earlier upstream contracts and all eight official-image cases were retained. A macOS report upload encountered a DNS failure in the final PR run; the failure was preserved and the affected job passed on the same commit after a targeted infrastructure rerun.
The ordinary noneditable wheel completed install → repair → repeat install → doctor → restore against exact v0.23.0 in a private environment: one transaction test passed in 70.49 seconds, with byte-for-byte source/configuration restoration. All 160 package resources (158 Python files) match the commit, wheel and installed files. Anonymous public Git-tag installation also passed: version 5.0.17, the direct_url.json commit/tag, resource bytes and console --help were verified.
After publication, all four assets returned HTTP 200 without authentication and matched the draft copies by SHA-256; archive and actual-extraction checks passed again.
All three platform archives passed checksums, the single top-level directory and nine-file inventory checks. Actual macOS extraction into 0700 / 1777 targets preserved parent inode/uid/gid/mode, the sentinel and file bytes; Linux GNU tar root/non-root extraction was covered by CI.
Source tests and independent review cover 31-source drift refusal, loaded bindings/defaults, multiple owners, duplicate/late receipts, and actual settlement Task normal/cancel/unknown traces. Local cold checks took about 0.44–0.58 seconds and four warm checks about 0.07–0.08 seconds. These are verifier microbenchmarks, not Gateway/model or client end-to-end latency. Source refusal and timeout gates were not relaxed; #498 records the corrections and earlier failures.
The reporter's Linux / PM / systemd user / split-HOME environment, real Gateway/model execution and Feishu clients have not been retested. After publication, refresh managed hooks with the normal installer, restart Gateway through its service owner, and verify the new package version, generation and runtime readiness in /health. Do not hand-edit Hermes or delete protection records.
Credits
Thanks to Lite-G for the exact-source analysis, three-layer diagnosis and retest plan in #497. Issue evidence is separate from code authorship; historical credits and commit authors are preserved.