diff --git a/benchmark/compaction/README.md b/benchmark/compaction/README.md
index 83df4579..fa299346 100644
--- a/benchmark/compaction/README.md
+++ b/benchmark/compaction/README.md
@@ -1,5 +1,7 @@
# Context compaction: fixed summary + selected evidence
+**English** | [简体中文](./README_ZH.md)
+
A **14-query fixture panel** with predefined answers and rule scoring: four primary tasks and ten short/query-only
controls. See [queries, answers and frozen settings](./STUDY.md) and [measured results](./RESULTS.md).
diff --git a/benchmark/compaction/README_ZH.md b/benchmark/compaction/README_ZH.md
new file mode 100644
index 00000000..9abcc66e
--- /dev/null
+++ b/benchmark/compaction/README_ZH.md
@@ -0,0 +1,72 @@
+# 上下文压缩:固定摘要与原文证据选择
+
+[English](./README.md) | **简体中文**
+
+本实验使用 **14 个预设 query/answer 的合成任务模板**,按固定规则评分:4 个主任务,另有 10 个短任务或仅依赖问题的对照。
+参见[任务、标准答案和固定规则](./STUDY_ZH.md)与[实验结果](./RESULTS_ZH.md)。
+
+Hermes 通过实际 `read_file` 调用采集轨迹。随后比较 Full context、固定的通用 Qwen 摘要 S,以及
+**Hermes 上下文压缩摘要 H(小预算版)**;S、H 分别追加 Jev Top 0~5 原文。评分时直接调用 Qwen,
+没有恢复 Hermes 的工具循环或从归档中取回原文。生产功能 `compact_context` 与本实验独立。
+
+模型、框架与运行环境版本、请求参数、产物哈希和离线复核要求见[实验设置与复现说明](./SETTINGS_ZH.md)。
+
+## 运行
+
+使用 ReMe 开发环境并安装可选依赖 `tokenizers`。轨迹采集和 Hermes 摘要生成需要独立的 Hermes 环境,
+该环境也必须能导入 `tokenizers`。凭证从 ReMe 的 `.env` 读取:
+`LLM_API_KEY`、`LLM_BASE_URL`、`DECISION_MODEL_API_KEY`,以及可选的
+`DECISION_MODEL_NAME`、`DECISION_MODEL_BASE_URL`。
+所有命令均需显式传入 `--live`;输出必须使用仓库外的新目录。
+
+```bash
+# 固定全部任务与标准答案,再采集 13 条新的只读轨迹。
+# 复用固定的原始支付轨迹,作为第 14 个来源。
+python -m benchmark.compaction.suite_collect --live \
+ --hermes /path/to/hermes-agent \
+ --hermes-python /path/to/hermes-environment/bin/python \
+ --payment-trajectory /path/to/original/trajectory.full.json \
+ --output /path/outside/repository/corpus
+
+# 固定摘要 S 和 Jev 排名,再运行普通摘要的七组 Top-N 对照。
+python -m benchmark.compaction.suite_run --live \
+ --corpus /path/outside/repository/corpus/corpus.json \
+ --tokenizer /path/to/cached/qwen/tokenizer.json \
+ --output /path/outside/repository/evaluation
+
+# 生成小预算设置下的 Hermes 上下文压缩摘要。
+# 若 --native 已是完整目录,则复用其中全部固定摘要。
+python -m benchmark.compaction.suite_native --live \
+ --corpus /path/outside/repository/corpus/corpus.json \
+ --evaluation /path/outside/repository/evaluation \
+ --native /path/outside/repository/native-generations \
+ --hermes /path/to/hermes-agent \
+ --hermes-python /path/to/hermes-environment/bin/python \
+ --tokenizer /path/to/cached/qwen/tokenizer.json \
+ --output /path/outside/repository/combined-results
+
+# 复用全部固定摘要、排名和 672 次回答,仅补充 H + Top 1~5。
+python -m benchmark.compaction.suite_fusion --live \
+ --corpus /path/outside/repository/corpus/corpus.json \
+ --evaluation /path/outside/repository/evaluation \
+ --combined /path/outside/repository/combined-results \
+ --native /path/outside/repository/native-generations \
+ --tokenizer /path/to/cached/qwen/tokenizer.json \
+ --output /path/outside/repository/dual-summary-results
+```
+
+任务定义来自 Hermes commit `30463589eb54fa0f48724594cc0e98e6b995729b`(MIT 许可)。本次使用
+`qwen3.8-max`,每个任务请求 3 轮摘要/排名,每个上下文回答 2 次:13 种方法共 **546 个上下文、1092 次回答**。
+模型请求最多同时运行 4 个。原始文件、会话、API 请求/响应、代码快照和逐字段评分均保留在 Git 仓库外,已有运行不会被覆盖。
+
+S、H 在各自五种融合条件中逐字不变,两种机制使用相同的 Jev 选择结果。Top N 是按概率严格降序选出的前 N 块,
+不设置概率阈值,不跳过候选块,也不截断块;入选块按来源顺序排列。若可用块少于 N,则全部保留,
+并用 `actual_n` 记录实际数量。原支付轨迹有 10 块,最多 Top 10;本实验测试 Top 1~5,各任务的块数不同。
+
+H 复用 Hermes 的上下文压缩摘要生成流程,并采用小预算设置:`legacy` 模板、与 S 相同的正文预算上限、
+额外字数约束、原生来源校验,以及统一的摘要正文封装。实验直接生成摘要,绕过自动触发和首尾窗口选择,
+且**必须实际缩短输入**。具体设置与预检记录说明见[实验方案](./STUDY_ZH.md)。
+
+本次曾修正评测问题的格式说明,而 Hermes 摘要使用修正前的来源文件。因此扩展该次运行时,需额外传入
+`--native-evaluation /path/to/pre-amendment/evaluation`。扩展程序会校验来源哈希,且只允许保留用于评分的
+`exam` 字段不同;摘要生成器不会接收这个字段。
diff --git a/benchmark/compaction/RESULTS.md b/benchmark/compaction/RESULTS.md
index a52596d1..cdaea44a 100644
--- a/benchmark/compaction/RESULTS.md
+++ b/benchmark/compaction/RESULTS.md
@@ -1,5 +1,7 @@
# Jev across two summary strategies
+**English** | [简体中文](./RESULTS_ZH.md)
+
2026-10-16 · Qwen `qwen3.8-max` · Jev `jev-1.13.0`.
One **13-method experiment**: Full context, generic summary **S + Top 0–5**, and Hermes compaction summary (small-budget setting)
diff --git a/benchmark/compaction/RESULTS_ZH.md b/benchmark/compaction/RESULTS_ZH.md
new file mode 100644
index 00000000..61e499d5
--- /dev/null
+++ b/benchmark/compaction/RESULTS_ZH.md
@@ -0,0 +1,94 @@
+# 两种摘要机制下的 Jev 增益
+
+[English](./RESULTS.md) | **简体中文**
+
+2026-10-16 · Qwen `qwen3.8-max` · Jev `jev-1.13.0`。
+
+一个 **13 组对照实验**:Full context、通用摘要 **S + Top 0~5**、Hermes 上下文压缩摘要(小预算版)
+**H + Top 0~5**。Top 0 表示纯摘要。两条曲线使用相同的原始证据与固定 Jev 排名;每轮摘要在其六种条件中逐字不变。
+
+## 四个主任务
+
+| 方法 | 字段正确率 | Qwen 回答输入 tokens |
+| --- | ---: | ---: |
+| Full context | 100.0% | 4,014 |
+| S | 82.0% | 2,480 |
+| S + Jev Top 1 | 83.0% | 2,753 |
+| S + Jev Top 2 | 94.5% | 2,974 |
+| S + Jev Top 3 | 99.5% | 3,241 |
+| S + Jev Top 4 | 98.1% | 3,496 |
+| S + Jev Top 5 | 97.4% | 3,660 |
+| H(Hermes,小预算版) | 79.4% | 2,432 |
+| H + Jev Top 1 | 85.3% | 2,705 |
+| H + Jev Top 2 | 92.9% | 2,927 |
+| H + Jev Top 3 | 97.9% | 3,193 |
+| H + Jev Top 4 | 96.9% | 3,448 |
+| H + Jev Top 5 | 96.9% | 3,613 |
+
+
+
+本组任务中两种摘要均能从追加原文中获益:Top 3 将 S 从 **82.0% 提升至 99.5%**,将 H 从
+**79.4% 提升至 97.9%**。Top 3 的平均回答输入分别为 **3241/3193 tokens**,Full 为 **4014 tokens**,
+对应减少 **19.3%/20.4%**。Top 4~5 未提高这些点估计。这是四个合成任务模板上的探索结果,
+不代表通用的最优 N、与 Full 统计等价,也不证明 Jev 优于其他等预算选择器。
+
+回答输入使用下游 Qwen API 的实际 usage,包含原始 system/任务、压缩历史与评测问题,
+不包含摘要生成或 Jev 排名请求。图中仅报告严格字段正确率和下游上下文长度。
+
+## 设置与适用边界
+
+[任务、标准答案与评分](./STUDY_ZH.md) · [实验设置与复现](./SETTINGS_ZH.md) · [运行命令](./README_ZH.md)。
+
+共 **14 个任务模板**:1 条已有支付轨迹,加上基于上游合成任务只读改写、实际运行 Hermes 采集的 13 条轨迹。
+4 个主任务在采集前按来源长度确定;10 个短任务/仅依赖问题的对照单独报告。每个任务 3 轮摘要/排名,
+每种条件回答 2 次,共 **546 个上下文、1092 次回答**。扩展实验复用全部 42 份 H 摘要、排名及已有 672 次回答,
+只新增 420 次回答,没有新增摘要或 Jev 调用。全部 1092 次评分均已对照保存的请求/响应离线重算。
+
+评分使用预设的递归、类型严格的 JSON 字段规则,没有 LLM judge。评测问题、标准答案和采集结束时的最终报告
+均不进入摘要或决策输入。回答阶段直接调用 Qwen,不继续 Hermes 工具循环,也不恢复原文。
+S、H 的摘要正文上限均为 64~256 tokens,但提示词及实际长度不同。
+H 复用 Hermes 的摘要生成流程,采用 `tail_mode=legacy`、较小的摘要预算及附加长度约束;
+直接调用生成器,绕过自动触发和首尾窗口选择。全部 42 个纯 H 上下文严格短于 Full,未接受原文回退。
+
+Top N 追加完整证据块,不截断;可用块不足 N 时保留全部。支付来源有 10 块,最多 Top 10;本实验测试 Top 1~5。
+沿用原有按任务预设的完整输入上限,不按回答结果调整。本比较逐步追加原文,**并非等长比较**。
+全部条件满足其上限,但 Top 3~5 每种方法只有 **9/12 个主任务上下文**短于配对 Full。
+新增 H 融合组有 172/210 个上下文实现缩短,其余 38 个包括 9 个主任务上下文和 29 个对照上下文。
+全部保留评分,平均节省不代表每个样例都节省。
+
+
+十个短任务/仅依赖问题的对照
+
+| 方法 | 字段正确率 | Qwen 回答输入 tokens |
+| --- | ---: | ---: |
+| Full context | 100.0% | 2,727 |
+| S | 67.1% | 2,315 |
+| S + Jev Top 1 | 84.7% | 2,493 |
+| S + Jev Top 2 | 87.5% | 2,573 |
+| S + Jev Top 3 | 92.9% | 2,687 |
+| S + Jev Top 4 | 92.9% | 2,722 |
+| S + Jev Top 5 | 92.5% | 2,722 |
+| H(Hermes,小预算版) | 73.2% | 2,308 |
+| H + Jev Top 1 | 80.1% | 2,486 |
+| H + Jev Top 2 | 92.5% | 2,566 |
+| H + Jev Top 3 | 99.2% | 2,680 |
+| H + Jev Top 4 | 99.2% | 2,715 |
+| H + Jev Top 5 | 98.8% | 2,715 |
+
+这些对照不能视为额外十个长上下文任务。来源块数较少时,Top N 会达到可用数量上限。
+
+
+
+
+审计与产物位置
+
+审计校验来源哈希、固定 S/H、完全一致且嵌套的 Top-N 原文、实际请求输入、全部 1092 次评分、
+实际 token 上限、原有结果未变和配置密钥未泄露。全部 546 种条件有效。
+早期回答格式修正和 Hermes 长度预检的记录说明保留在[实验方案](./STUDY_ZH.md)。
+
+以下产物位于 `/Users/yuli/workspace/trajectory-runs/`,不进入 Git:
+`hermes-fixture14-20261016/`(语料)、`compaction-fixture14-20261016-v2/`(S/排名)、
+`compaction-fixture14-hermes-adapted-20261016/`(H)、`compaction-fixture14-final-20261016/`(原八组结果),
+以及 `compaction-fixture14-dual-summary-20261016/`(当前 13 组结果、usage 与审计)。
+
+
diff --git a/benchmark/compaction/SETTINGS.md b/benchmark/compaction/SETTINGS.md
index b7814f7d..6ebf0134 100644
--- a/benchmark/compaction/SETTINGS.md
+++ b/benchmark/compaction/SETTINGS.md
@@ -1,5 +1,7 @@
# Experiment settings and reproducibility
+**English** | [简体中文](./SETTINGS_ZH.md)
+
This describes the **13-method comparison** reported in [RESULTS.md](./RESULTS.md): Full context, generic summary S
and Hermes compaction summary H, each with Jev Top 0–5. Top 0 means summary only.
[STUDY.md](./STUDY.md) defines the queries, fixed answers, scoring rules and protocol amendments.
@@ -153,4 +155,4 @@ The bundle's `corpus/`, `evaluation/`, `native/`, `native-source/`, `combined/`
Fresh runs require `.env` entries `LLM_API_KEY`, `LLM_BASE_URL`, `DECISION_MODEL_API_KEY`, optional
`DECISION_MODEL_BASE_URL`, and `DECISION_MODEL_NAME=jev-1.13.0` to request the recorded Jev version when available.
Use isolated Python environments, the versions above, the pinned Hermes checkout and tokenizer, and new output directories.
-Do not commit `.env`, raw records or the bundle. No fresh paid inference is needed for frozen replay.
+Do not commit `.env`, raw records or the bundle. No fresh model inference is needed for frozen replay.
diff --git a/benchmark/compaction/SETTINGS_ZH.md b/benchmark/compaction/SETTINGS_ZH.md
new file mode 100644
index 00000000..19365813
--- /dev/null
+++ b/benchmark/compaction/SETTINGS_ZH.md
@@ -0,0 +1,149 @@
+# 实验设置与复现说明
+
+[English](./SETTINGS.md) | **简体中文**
+
+本文说明[结果页](./RESULTS_ZH.md)中的 **13 组对照**:Full context、通用摘要 S,以及 Hermes 上下文压缩摘要 H;
+S、H 分别搭配 Jev Top 0~5。Top 0 表示纯摘要。[实验方案](./STUDY_ZH.md)列出问题、固定答案、评分规则及协议修正。
+
+## 模型与 agent 框架
+
+| 角色 | 实际记录的设置 |
+| --- | --- |
+| 轨迹采集 | Hermes Agent `AIAgent`,commit `30463589eb54fa0f48724594cc0e98e6b995729b` |
+| 采集模型 | `qwen3.8-max`,自定义 OpenAI 兼容 Chat Completions 接口 |
+| 通用摘要 S | 直接调用 `qwen3.8-max`,使用 [`cases.py`](./cases.py) 中的任务交接提示词 |
+| Hermes 摘要 H | 同样使用 `qwen3.8-max`,调用 Hermes `ContextCompressor._generate_summary`,`tail_mode=legacy` |
+| 决策/排名 | Jev,响应中实际解析出的版本为 **`jev-1.13.0`**,经 AgentScope/TypeSafe 调用 |
+| 回答 | 直接调用 `qwen3.8-max`,不恢复 agent/工具循环 |
+| 评分 | 确定性的递归、类型严格 JSON 字段规则,不使用 LLM judge |
+| 实验实现 | ReMe commit `50c2c806446c7ae6acc66217afd6e5edc2114046` |
+
+H 是**小预算设置下的 Hermes 上下文压缩摘要**,复用 Hermes 的序列化、结构化检查点提示词、敏感信息遮蔽和来源校验。
+实验覆盖摘要预算并附加总字数上限,再用 Hermes 的辅助函数移除控制前缀。它直接生成摘要,不调用完整的 `compress()`:
+自动触发、首尾窗口选择和压缩后的会话修复不在本次比较范围内。因此不能笼统称为整个 Hermes 上下文管理的修改版本。
+
+请求与保存的回答响应仅标识 Qwen 别名,没有提供不可变的服务端权重版本。即使温度为 0,服务端更新和非确定性
+仍可能改变新运行的结果。尽量使用同一 `LLM_BASE_URL` 服务;接口及密钥通过私有 `.env` 提供。
+本次接口已核实为中国北京地域的公开 DashScope 接口,API Key 不公开。
+
+## 运行环境依赖
+
+使用两个独立 Python 环境。下表版本是**实验结束后从保留环境中核实的版本**,不是运行前固定的锁文件;
+可作为复现参考,但不能证明环境已被完整锁定。本地使用 Python **3.13.3**、macOS arm64;推理由外部服务执行,不使用本地 GPU。
+
+| 包 | ReMe 评测环境 | Hermes 采集/摘要环境 |
+| --- | --- | --- |
+| `openai` | 2.53.0 | 3.31.0 |
+| `agentscope` | 2.0.10 | — |
+| `typesafe-sdk` | 0.7.5 | — |
+| `httpx` | 0.28.1 | 0.28.1 |
+| `httpx2` | — | 2.13.1 |
+| `python-dotenv` | 1.2.2 | 1.2.4 |
+| `pydantic` | 2.13.4 | 2.14.1 |
+| `tokenizers` | 0.23.3 | 0.23.3 |
+
+`tokenizers` 来自 `PYTHONPATH` 中的独立包目录,未安装进这两个 venv。新环境可分别安装该精确版本。
+本地产物包包含实验结束后记录的两个环境的发行包元数据,不包含凭证或虚拟环境二进制文件。
+
+预算计数使用 `Qwen/Qwen3.5-9B` 的 **`tokenizer.json`**,revision 为
+`c202236235762e1c871ad0ccb60c8ee5ba337b9a`,SHA-256 为
+`5f9e4d4901a92b997e463c1f46055088b6cca5ca61a6522d1b9f64c4bb81cb42`。
+这是**预算估算代理**,不表示 Qwen 3.8 使用该 tokenizer;下游输入的报告值来自 API 的实际 usage。
+
+## 请求参数
+
+| 阶段 | 采样/输出参数 | 执行限制 |
+| --- | --- | --- |
+| Hermes 采集 | `max_tokens=1024`;`reasoning_effort=none`、`enable_thinking=false`;未显式设置温度或 seed | 最多 12 次 agent 迭代,运行预算 240 秒;4 个 worker;子进程超时 360 秒 |
+| S 生成 | `temperature=0`、`max_tokens=4096`;关闭 thinking;无 seed | OpenAI 客户端超时 90 秒,`max_retries=1` |
+| H 生成 | `temperature=0`;未显式设置 API `max_tokens`;关闭 thinking;无 seed | 同样为 90 秒客户端超时、1 次 SDK 重试;4 个 worker;子进程超时 600 秒 |
+| Jev 排名 | 每个证据块一个二元概率问题,每批 10 块 | 适配器超时 45 秒,`max_retries=2`,重试间隔 0.5 秒 |
+| 回答 | `temperature=0`、`max_tokens=2400`、`response_format={"type":"json_object"}`;关闭 thinking;无 seed | 客户端超时 90 秒,`max_retries=1`;4 种条件并发,每种依次回答 2 次 |
+
+直接 Qwen 请求通过 `reasoning_effort="none"` 和 `extra_body={"enable_thinking":false}` 关闭 thinking。
+采集阶段的实际网络请求在顶层携带 `enable_thinking=false`。H 的 API 输出限制与摘要正文上限不同:
+是否接受摘要由本地正文 token 检查决定。实际运行的请求参数以保存的请求正文为准。
+
+采集仅开放白名单内的 `read_file`,来源工作区只读;关闭自动压缩与 micro compaction,跳过记忆文件、
+上下文文件和后台 review。每个 worker 使用独立 `HERMES_HOME`、工作区和会话数据库。
+实现见 [`hermes_worker.py`](./hermes_worker.py)。
+
+## 数据、配对与预算
+
+- **14 个任务模板**:1 条复用的合成支付轨迹,以及在上游任务只读改写上实际运行 Hermes 的 13 条轨迹。
+ 长来源采用确定性的原文开头/匹配行视图,不人为增加噪声。
+- 四个主任务为 `payment`、`checkout_504`、`server_error`、`build_token`;另有十个短任务/仅依赖问题的对照。
+ 分组在采集前按来源长度固定,不依据结果选择。
+- 每个任务独立请求 3 轮摘要/排名,每种条件回答 2 次:**14 × 3 × 13 = 546 个上下文,1092 次回答**。
+ 重复回答不等于独立任务样本。
+- S、H 在各自 Top 0~5 中逐字相同,两种机制使用完全一致的 Jev 分数与来源块。
+ 排名依据原任务,不以摘要为条件。严格按分数降序选择,相同分数按块 ID 排序,再恢复来源顺序。
+ 不设阈值,不跳过块,也不截断块;实际 N 为 `min(N, available units)`。
+- 摘要正文预算为 `max(64, min(256, int(0.2 * evidence_tokens)))`。
+ S 最多进行 3 次长度检查尝试,字数目标为 `max(12, int(allowance * 0.4 * 0.8**attempt))`。
+- H 最多进行 3 次长度检查尝试。请求预算为 `max(12, int(allowance * 0.8**attempt))`,
+ 附加字数上限为 `max(18, int(requested_budget * 0.35))`。
+ 保留原生 Historical Task Snapshot/无用户消息标记和 Critical Context,允许省略其他章节。
+- 回答前根据受保护提示、最大的五个完整证据块、摘要预算及 96 tokens 预留/封装空间计算完整输入上限。
+ 若序列化后的 S 需要更多空间,则先提高上限。它不是统一的 1000/2000-token 上限,也不是等长比较。
+ 计算见 [`suite_run.py`](./suite_run.py)。
+- 保留原始 system/任务,排除采集结束时的最终报告和内部元数据。评测问题与标准答案不会进入采集、
+ 摘要或决策请求。精确的后续问题构造见 [`suite.py`](./suite.py)。
+
+以下主任务预算取自格式说明修正后的**最终评分记录**:
+
+| 任务 | 证据块数 | 摘要正文上限 | 完整输入上限 |
+| --- | ---: | ---: | ---: |
+| payment | 10 | 256 | 4,496 |
+| checkout_504 | 5 | 256 | 5,246 |
+| server_error | 41 | 256 | 3,185 |
+| build_token | 8 | 256 | 3,859 |
+
+保留的支付任务早期 `budget.json` 记录为 4459;最终问题需要额外 37 tokens,最终 `results.json` 中的记录为 4496,
+评分对照以此为准。冻结产物保留原貌,不回写修改。所有条件均满足其上限;纯 H 的 42 个上下文都短于 Full。
+Top 3~5 每种机制的每组只有 9/12 个主任务上下文缩短。全部样例保留评分,平均节省不代表每个样例都节省。
+
+## 评分
+
+每次回答返回 `{"facts": {...}}`。字段按递归的精确类型和值规则检查,只有支付任务的 HTTP 状态码顺序可以忽略。
+缺失、格式错误或计划中的失败条件记零分。先平均回答内字段,再平均同一轮次回答、同一任务轮次,
+最后对任务等权平均。主任务和对照任务分别报告。
+
+回答输入采用回答 API 实际返回的 `prompt_tokens`,包含 system/任务、压缩历史和后续评测问题。
+摘要生成和 Jev 排名属于独立请求,不加入该指标。
+
+## 复现层次与产物可用性
+
+1. **冻结结果离线复核**:核验精确文件哈希、模型请求/响应和全部 1092 次评分,不调用任何模型 API。
+2. **固定输入扩展/重跑**:`suite_fusion` 复用轨迹、摘要和排名,重新回答 H + Top 1~5,并保留其他八组。
+ 新分数可能变化;该命令不会重新回答全部十三组。
+3. **重新采集并运行**:使用固定 Hermes 素材及 [README 命令](./README_ZH.md)。新的 agent 调用可能形成不同轨迹,
+ 因而复现的是协议,不保证结果逐字一致。
+
+公开 Git 包含实验代码、任务定义、规则与整理后的结果,**不提交**原始支付轨迹、冻结语料及实际 API 记录。
+精确复核需要本地产物包,目前不属于公开的一条命令即可复现的实验。不能替换为另一条支付轨迹,预期 SHA-256 为
+`0f37e6510ffafd920d088452d8719026b00fd4e74f87f7dd1a42a85c8287e6f1`。
+
+产物包位于 Git 仓库外:
+`/Users/yuli/workspace/trajectory-runs/compaction-dual-summary-reproduction-20261016.tar.gz`。
+其 SHA-256 为 `40ee93c9117dfe59cf0b4dc8887ba4b2c62fa16f3bc97f2dac6d536343f942a3`。
+其中含 3187 个文件、相对路径 SHA-256 清单、环境元数据和 `verify.py`。
+安装 ReMe 开发环境后,在 ReMe 仓库中运行:
+
+```bash
+# 在仓库外解压,替换为实际存放归档文件的目录。
+export REPRO_DIR=/path/outside/repository
+shasum -a 256 "$REPRO_DIR/compaction-dual-summary-reproduction-20261016.tar.gz"
+tar -xzf "$REPRO_DIR/compaction-dual-summary-reproduction-20261016.tar.gz" -C "$REPRO_DIR"
+PYTHONPATH="$PWD${PYTHONPATH:+:$PYTHONPATH}" python \
+ "$REPRO_DIR/compaction-dual-summary-reproduction-20261016/verify.py"
+```
+
+预期结果:**核验 3187 个产物哈希、546 个上下文和 1092 次评分;零 API 调用**。
+产物包内的 `corpus/`、`evaluation/`、`native/`、`native-source/`、`combined/`、`final/` 对应
+[README 中的运行阶段](./README_ZH.md)。复用其中 H 摘要时传入 `--native-evaluation /native-source`。
+
+新运行需要在 `.env` 中配置 `LLM_API_KEY`、`LLM_BASE_URL`、`DECISION_MODEL_API_KEY`、可选的
+`DECISION_MODEL_BASE_URL`,并在服务可用时设置 `DECISION_MODEL_NAME=jev-1.13.0` 以请求记录中的 Jev 版本。
+使用独立 Python 环境、上表依赖版本、固定 Hermes checkout 与 tokenizer,以及新的输出目录。
+不要提交 `.env`、原始记录或产物包。冻结结果离线复核不需要新的模型推理。
diff --git a/benchmark/compaction/STUDY.md b/benchmark/compaction/STUDY.md
index 022084c7..415f51f1 100644
--- a/benchmark/compaction/STUDY.md
+++ b/benchmark/compaction/STUDY.md
@@ -1,5 +1,7 @@
# Fourteen-task study: frozen queries, answers and rules
+**English** | [简体中文](./STUDY_ZH.md)
+
Model/framework versions, exact parameters and artifact requirements are in [experiment settings](./SETTINGS.md).
The initial task panel was frozen before collection. Explicit format corrections and native additions are recorded below.
@@ -18,7 +20,7 @@ The follow-up and expected values never enter collection or compression requests
| payment | Investigate the original payment retry incident. | `{"incident_id": "PAY-4827", "invoice_id": "INV-731", "successful_charge_id": "CH-991", "amount_minor": 12900, "attempt_keys": ["pay-a", "pay-b"], "first_attempt_committed": true, "max_attempts": 3, "no_retry_http_statuses": [402, 422], "key_generation_line": 5, "regression_attempt_counts": {"timeout_then_success": 2, "validation_422": 1, "three_timeouts": 3}}` | Primary candidate |
| backup | A while back I told you one of my repos needed nightly backups — find which repo that was in our past conversations (do not guess). Then: write backup.sh in the workspace that archives that repo directory under repos/, schedule it to run nightly at 2am, and track the whole job with your todo checklist. Report back which repo it was and what you set up. | `{"repo": "sparks-data", "ignored_repo": "toybox", "data_text": "important"}` | Control: short_fixture |
| refactor | In src/, every requests call uses timeout=30. Bump them all to timeout=45, add a CHANGELOG.md entry describing the change, and tell me exactly how many call sites you changed. | `{"old_timeout": 30, "call_sites": 3, "functions": ["fetch_a", "fetch_b", "fetch_c"], "methods": ["get", "post", "head"], "old_version": "1.0"}` | Control: short_fixture |
-| three_files | This is a multi-step job — track it with your todo checklist tool and keep it updated as you go, marking each step completed when verified. Steps: (1) create greet.py containing a greet(name) function that returns 'hello '; (2) create data/rows.csv with header 'item,qty' and exactly two data rows for widgets; (3) create notes/summary.md stating how many files you created. Finish only when all three are done and checked off. | `{"file_count": 3, "header": "item,qty", "data_rows": 2}` | Control: query_only |
+| three_files | This is a multi-step job — track it with your todo checklist tool and keep it updated as you go, marking each step completed when verified. Steps: (1) create greet.py containing a greet(name) function that returns `'hello '`; (2) create data/rows.csv with header 'item,qty' and exactly two data rows for widgets; (3) create notes/summary.md stating how many files you created. Finish only when all three are done and checked off. | `{"file_count": 3, "header": "item,qty", "data_rows": 2}` | Control: query_only |
| active_config | Search this workspace for wherever the retry_limit setting is configured and tell me its current value. | `{"retry_limit": 7, "backoff": 2, "active_file": "conf/app.ini", "old_file": "conf/old.ini"}` | Control: short_fixture |
| checkout_504 | Investigate the checkout 504 incident: distinguish the failed rollback, root cause and final database fix. | `{"setting": "statement_timeout", "value_seconds": 45, "index_mode": "CONCURRENTLY", "root_cause": "CREATE INDEX without CONCURRENTLY", "rolled_back_version": "v2.30.2", "rollback_fixed": false, "deployed_version": "v2.31.0", "initial_error_percent": 8}` | Primary candidate |
| dependency_version | What exact left-pad version is pinned, and which file declares the test script? Record the package scripts for a handoff. | `{"version": "1.3.0", "declaration": "package.json", "test": "vitest run", "build": "tsc -p .", "package_version": "4.2.1"}` | Control: short_fixture |
@@ -84,9 +86,9 @@ and appends a total word limit (35% of the token target, at least 18 words) allo
The Historical Task Snapshot/no-user sentinel and Critical Context sections remain. Native validation is retained.
Strip the native control prefix with Hermes' own helper before using the same downstream `Summary:` carrier as S.
-This compares generated summary bodies without charging Hermes twice for handoff framing. No model response is edited
+This compares generated summary bodies without duplicating handoff framing. No model response is edited
for factual content. The native call sees only the pre-final evidence history and the original task as its focus;
-no exam or gold. Allow at most three length-only retries, reducing the requested target by 0.8, without answer feedback.
+no exam or gold. Allow at most three length-check attempts, reducing the requested target by 0.8, without answer feedback.
Three summaries × two answers × fourteen tasks add **42 contexts and 84 planned answers**: **336 contexts and 672 planned
answers** across eight methods. Keep the same original system/task and exact scoring follow-up as other methods.
diff --git a/benchmark/compaction/STUDY_ZH.md b/benchmark/compaction/STUDY_ZH.md
new file mode 100644
index 00000000..e89f7c0e
--- /dev/null
+++ b/benchmark/compaction/STUDY_ZH.md
@@ -0,0 +1,110 @@
+# 十四任务实验:固定问题、标准答案与评分规则
+
+[English](./STUDY.md) | **简体中文**
+
+模型/框架版本、精确参数及产物要求见[实验设置](./SETTINGS_ZH.md)。
+
+初始任务集合在采集前已固定;后续明确修正的格式说明与 Hermes 对照扩展在下文记录。
+实验评估 **14 个不同的任务/答案模板**:1 条已有支付轨迹,以及 13 条新采集、基于 Hermes 任务素材只读改写的轨迹。
+原本要求执行操作的任务被改为调查证据和提出行动建议,不修改文件,也不创建定时任务。
+Hermes 对不可变来源快照实际调用 `read_file`;评分随后直接调用 Qwen,不恢复 Hermes 的工具循环。
+
+## 问题与标准答案
+
+下表给出初始 query 的**中文释义**;英文原文保留在[英文版](./STUDY.md#queries-and-expected-answers),
+实际发送的 query、只读采集改写和评测问题以 `suite.py` 及冻结请求为准,中文释义不参与模型调用。
+初始 query 提供采集目标;后续评测要求返回答案列中的 JSON 字段,字段说明来自 `suite.py`。
+评测问题和标准答案不进入采集或压缩请求。每项是一个任务加一个后续问题,不是两个独立样本。
+标准答案的字段名、类型和英文字符串保持原样,以便精确评分。
+
+| ID | 初始 query 的中文释义 | 标准事实 | 分组 |
+| --- | --- | --- | --- |
+| payment | 调查原始支付重试事件。 | `{"incident_id": "PAY-4827", "invoice_id": "INV-731", "successful_charge_id": "CH-991", "amount_minor": 12900, "attempt_keys": ["pay-a", "pay-b"], "first_attempt_committed": true, "max_attempts": 3, "no_retry_http_statuses": [402, 422], "key_generation_line": 5, "regression_attempt_counts": {"timeout_then_success": 2, "validation_422": 1, "three_timeouts": 3}}` | 主任务候选 |
+| backup | 从历史对话确认哪个仓库需要每晚备份,不要猜测;在工作区编写 backup.sh,将 repos/ 下该仓库归档,安排每天凌晨 2 点运行,用待办清单跟踪,并报告仓库与设置。 | `{"repo": "sparks-data", "ignored_repo": "toybox", "data_text": "important"}` | 对照:短来源 |
+| refactor | 把 src/ 中所有 requests 调用的 timeout=30 改为 timeout=45,在 CHANGELOG.md 记录变更,并报告实际修改的调用点数量。 | `{"old_timeout": 30, "call_sites": 3, "functions": ["fetch_a", "fetch_b", "fetch_c"], "methods": ["get", "post", "head"], "old_version": "1.0"}` | 对照:短来源 |
+| three_files | 用待办清单跟踪并核验:创建含 greet(name)、返回 `'hello '` 的 greet.py;创建表头为 item,qty、含两行 widgets 数据的 data/rows.csv;创建说明新建文件数量的 notes/summary.md。完成并检查三项后再结束。 | `{"file_count": 3, "header": "item,qty", "data_rows": 2}` | 对照:仅依赖问题 |
+| active_config | 在工作区查找 retry_limit 配置,并报告当前值。 | `{"retry_limit": 7, "backoff": 2, "active_file": "conf/app.ini", "old_file": "conf/old.ini"}` | 对照:短来源 |
+| checkout_504 | 调查 checkout 504 事件,区分未奏效的回滚、根因及最终数据库修复。 | `{"setting": "statement_timeout", "value_seconds": 45, "index_mode": "CONCURRENTLY", "root_cause": "CREATE INDEX without CONCURRENTLY", "rolled_back_version": "v2.30.2", "rollback_fixed": false, "deployed_version": "v2.31.0", "initial_error_percent": 8}` | 主任务候选 |
+| dependency_version | 确认固定的 left-pad 精确版本,以及哪个文件声明测试脚本;为任务交接记录 package 脚本。 | `{"version": "1.3.0", "declaration": "package.json", "test": "vitest run", "build": "tsc -p .", "package_version": "4.2.1"}` | 对照:短来源 |
+| retry_backoff | 查找 src/ 中的重试延迟函数,解释基数、增长方式、上限与随机抖动。 | `{"base_ms": 250, "cap_ms": 30000, "growth_factor": 2, "jitter": "uniform_integer_below_bound", "function": "retryDelay"}` | 对照:短来源 |
+| server_error | 定位服务器日志中唯一的 ERROR,保留精确请求标识、时间戳、上游和连接失败信息。 | `{"request_id": "req-7f3d9", "timestamp": "2026-08-08T23:41:17Z", "status": 502, "upstream": "payments", "error": "ECONNREFUSED", "address": "10.0.4.17:8443"}` | 主任务候选 |
+| meeting_notes | 读取会议记录,准确报告第三条要点,并保留其他已商定行动。 | `{"third": "rotate the API keys quarterly", "first": "ship the payments retry fix", "second": "audit the staging TLS certs", "fourth": "close out the Q3 incident review"}` | 对照:短来源 |
+| targeted_edit | 在 ./handlers.py 的三处 timeout = 10 中,仅将 slow_handler 内的一处用 patch 工具改为 timeout = 60;随后在当前目录运行 python3 check_handlers.py 并回复输出。 | `{"target": "slow_handler", "original_timeouts": {"fast_handler": 10, "slow_handler": 10, "medium_handler": 10}, "required_timeouts": {"fast_handler": 10, "slow_handler": 60, "medium_handler": 10}, "success_marker": "HANDLERS_OK_552"}` | 对照:短来源 |
+| build_token | 运行输出很长的 python3 ./noisy_build.py,找出中间唯一以 UNIQUE_TOKEN= 开头的行,回复完整 token 值。 | `{"token": "tok_9f31c_middle", "step": 2000, "total_steps": 4000, "prefix": "UNIQUE_TOKEN="}` | 主任务候选 |
+| package_versions | 依次读取 pkg_a、pkg_b、pkg_c 中的 version.txt,将 a,b,c 顺序的版本以逗号连接写入 ./versions.txt,回复 DONE 和连接后的字符串。 | `{"versions": {"pkg_a": "1.4.2", "pkg_b": "0.9.7", "pkg_c": "3.2.1"}, "joined": "1.4.2,0.9.7,3.2.1"}` | 对照:短来源 |
+| checksum_anomaly | 用 read_file 而非 terminal 查找 ./records.log 中唯一以 ANOMALY: 开头的行,并回复该行全文。 | `{"line": "ANOMALY: checksum drift detected in shard 7 (code X99Q)", "code": "X99Q", "shard": 7, "line_number": 4201}` | 对照:短来源 |
+
+## 评分
+
+**不使用 LLM judge。** 模型必须返回 `{"facts": {...}}`,每个预期字段按递归、类型严格的 JSON 等值规则检查。
+整数不同于布尔值与浮点数;字符串和有序数组必须精确一致。缺失或格式错误的字段记零分。
+只有支付任务的 `no_retry_http_statuses` 忽略数组顺序。评分后不添加答案别名、改写或重试。
+主指标先平均同一回答中的字段,再平均同一固定轮次的回答、同一任务的轮次,最后对任务等权平均。
+另报告全部字段均正确的比例和下游 API 实际输入 tokens。计划中的失败条件仍留在分母中,计零分。
+这些是证据保留指标,本轮对照不执行建议补丁,也不衡量任务完成率。
+
+## 采集前固定分组
+
+主任务候选要求来源快照至少 2000 个字符,且事实依赖证据。原始支付来源单独固定。
+该结构性规则确定 **4 个主任务候选**:payment、checkout_504、server_error、build_token。
+
+其余 10 项为短来源或仅依赖问题的对照,单独报告。全部 14 项均采集/评估,不因某种方法表现好而挑选任务。
+每个计划任务都记录来源覆盖、工具调用配对与采集失败情况。
+
+## 配对实验
+
+- 模型为 `qwen3.8-max`;同一任务各方法保留相同的实际 system 提示、原任务和评测问题,排除采集结束时的最终报告。
+- 每个任务独立请求 3 轮摘要/排名,每个上下文回答 2 次,温度为 0,关闭 thinking。
+- 初始方法为 Full context、S、S + Jev Top 1、2、3、4、5,计划 **294 个上下文、588 次回答**。
+- S 对全部观察到的来源块进行摘要,在五种融合方法中逐字不变。
+- Jev 只接收初始任务和来源证据。不同 N 共用分数,不设置概率阈值。
+- 严格选择分数排序的前 N 块,再按来源顺序排列。可用块不足 N 时保留全部,并报告实际数量。
+- 摘要正文上限为本地 Qwen tokenizer 估算的 64~256 tokens,即渲染后证据 tokens 的 20%,再限制到该范围;根据来源长度预先固定。
+- 回答前按任务计算完整输入上限,以容纳受保护提示、固定摘要预算、最大的五个完整块、64 tokens 预留及额外 32 tokens 封装空间。
+ 若序列化后的 S 需要更多空间,则在回答前提高上限。该纯长度规则允许完整 N 对照,不修改 S、不截断证据;报告实际长度,不强制等长。
+- 报告融合相对 Full 的输入减少比例。短任务融合后可能使用更多输入 tokens,不能据此认定成功压缩。
+- 在仓库外保存实验协议、来源哈希、代码快照、请求/响应、嵌套选择和逐字段评分;不从归档恢复原文。
+- 早期仅支付任务的表属于开发结果;支付任务已经使用过,因此这个新任务集合不是独立留出验证。
+
+任务素材来自 Hermes commit `30463589eb54fa0f48724594cc0e98e6b995729b`,采用 MIT 许可。
+长日志/构建输出使用确定性的原始来源视图(开头和匹配行附近),不包含上游工作区每一个字节。
+没有人为添加噪声或替换标识符。这是已有任务的改写,不是维护者私有的生产轨迹语料。
+
+## 最终对照前的格式校验
+
+第一次回答暴露了两处问题格式不够明确:支付测试次数被返回为数组,会议要点保留了列表标记。
+标准答案和严格评分器保持不变。支付问题现已明确要求指定名称的 JSON 映射;会议记录要求只返回要点文字、不含列表标记。
+这两个任务的全部七种方法使用同样的固定 S/排名重新回答;初始 84 次回答作为格式预检保留,不计入最终指标。
+其他 12 个任务保留原有 504 次回答,问题保持一致。修正没有改变分组、证据、答案值、排名或摘要。
+
+## Hermes 上下文压缩摘要:小预算设置
+
+H 是**小预算设置下的 Hermes 上下文压缩摘要**,实际调用
+`agent.context_compressor.ContextCompressor._generate_summary`,保留原生序列化、检查点模板、敏感信息遮蔽和来源校验。
+采用内置 `tail_mode=legacy`,不使用 lean 模式额外的 4000-token 会话日志及确定性附录。
+实验子类把摘要预算设为与 S 相同的每任务 64~256 tokens,并附加总字数上限(目标 token 数的 35%,至少 18 个单词),
+允许省略非必要章节。保留 Historical Task Snapshot/无用户消息标记和 Critical Context 章节,以及原生校验。
+
+用 Hermes 自己的辅助函数去掉控制前缀,再与 S 使用相同的下游 `Summary:` 封装,避免重复加入交接提示。
+不改写模型输出中的事实。原生生成器仅接收最终报告前的证据历史,以原任务作为关注主题,不接收评测问题或标准答案。
+最多进行 3 次长度检查尝试,每次把请求目标乘以 0.8,不使用回答反馈。
+
+14 个任务各 3 份摘要、每份 2 次回答,新增 **42 个上下文、84 次计划回答**,累计八种方法
+**336 个上下文、672 次计划回答**。与其他方法保持相同的原始 system/任务和精确评测问题。
+有效 H 条件必须满足摘要正文预算、每任务完整输入上限,且实际 API 输入少于 Full。
+失败计零分,不接受原始历史回退。
+
+未适配的原生生成与长度校准记录仍在仓库外。第一次强制原生对照包含较长控制前缀,40/42 个上下文输入超过 Full;
+该结果作为集成预检保留,没有被当作成功压缩。上述正文封装和字数预算设置均在新的评分回答前固定,
+没有改变标准答案、分组、Jev 排名或已有 S。
+
+## 当前对照:两种固定摘要机制
+
+当前统一为 13 组:Full、S + Jev Top 0~5、H + Jev Top 0~5。Top 0 表示纯摘要,H 使用上述小预算设置。
+扩展复用已有全部 S/H、排名、入选块和评分回答,不重新生成摘要、不调用 Jev、不采集轨迹。
+新增 210 个上下文、420 次回答,总计 546 个上下文、1092 次回答;全部新增输入在回答前固定。
+同一任务/轮次/N 的 S、H 使用相同原文块,并按来源顺序排列,不允许根据回答结果重新排名。
+
+扩展沿用已有每任务上限,单独报告是否严格短于 Full,不筛掉或删除条件。
+Top 3~5 每种机制的每组均有 9/12 个主任务上下文缩短。H 融合组共有 172/210 个上下文缩短,
+其中主任务 51/60、对照 121/150;纯 H 仍为 42/42。