独立实验评估基础设施(experimental evaluation infrastructure),用于在 Habitat-MAS / EMOS 等外部系统与 RoboGuide 之间进行可复现、可追溯的对比实验。 当前是第一版骨架:实验编排 + 进程边界 + 可复现结果基础设施,并以 E1(Habitat-MAS Mobility,EMOS vs RoboGuide)作为第一条 workload。
E1 的收尾条件、配置记录、已实现启动门禁与待核验项见 E1 收尾计划与配置核验。各类别冻结真实 config/dataset 与代码身份;普通任务失败纳入结果,配置或证据漂移才暂停批量。
e1-pair 为 e1-batch 提供通用的原生 EMOS/生产 B1 配对入口。
准确 episode 在原生环境构造前选定;模型响应、真实 reset、源码和归档完整性独立核对。
入口不注入历史计划、不修改原生策略或 benchmark,也不按结果筛选 population。
Formal B1 的 provenance、failure owner 和 population 规则见
Evaluation Evidence Validity。Formal population
只由有效 provenance 与显式 external-infrastructure failure 决定;benchmark population
另外要求官方 Habitat pddl_success 可用。verify-b1.py 与 Harness 共用 canonical
admission,Harness 消费并核对已持久化 verdict。自定义 B1 启动 wrapper 须显式配置
ROBOGUIDE_EVAL_PROTOCOL=B1,使缺少 artifacts 时仍执行 B1 gate。
场景脚本在 EXIT trap 中、停止本次子进程之前调用 b1_artifacts。事件采集复用
GET /v1/events?after=<sequence>&limit=100,按实际末尾 sequence 前进;合法序号间隔
不会补造事件。短页也继续读取,在相同游标得到两次空页后才结束;期间若出现新事件,
继续分页并重新确认尾部。采集前后必须读到身份一致、状态不变的终态 Mission
(Completed / Failed / Cancelled)。
Controller HTTP 读取复用应用的 event write gate,等待当前 SQLite batch 提交或回滚后 读取已持久化页;等待在 blocking worker 中进行,不持有 gate 执行 HTTP 写出。 日志或 gate 不可用时返回带 JSON 错误的 HTTP 503,不返回伪造空页或未提交事件。 采集器对 503 仍按归档失败保存原始响应并 fail closed;此机制不提供跨页 snapshot token。
现有 API 没有 snapshot token 或全局高水位。这里确认的是 终态 Mission 的已持久化
事件前缀(terminal_durable_prefix),不保证未来无心跳或迟到事件,也不宣称全局一致
快照。Running、终态无法确认、持续写入导致预算耗尽,都显式归档为 incomplete。
MI 提交前的已记录失败及 Controller 启动失败按既有协议处理,无需伪造空事件快照。
默认最多 256 个事件页、单次响应 8 MiB、累计响应 64 MiB、采集预算 30 秒,单次
socket 等待至多 2 秒;大小探测最多额外保留一个字节。每次尝试在
controller-event-pages/attempt-*/ 保留原始响应字节、HTTP 元数据和结果。
只有完整采集才原子发布 events.json;失败不覆盖已有事件文件。
controller-event-archive.json(v0.1)记录完整性、边界、游标与 events digest。
缺失、损坏、未完成的本轮状态或不匹配的 digest 使 evidence gate 失败;保留既有文件
不能掩盖失败重采集。无此 sidecar 和采集目录的历史归档仍走原有 verifier。
归档异常记为 context.event_archive_error,CLI 返回 2,不改写 run-failure.json
中的 SUT failure owner。Formal admission、semantic goal diagnostic 与官方 benchmark
判定规则保持不变;完整分页仍不能使缺少真实任务注册事件的归档通过 provenance。
启用物理诊断的新 B1 运行会在 evidence/diagnostics-terminal.json v0.4 中只读记录
本次实际 PDDL robot_at_thresh。自动归档额外写出
evidence/goal-geometry-diagnostic.json:对冻结 goal 中可表达的 any_at 谓词,
使用终态目标位置与所有 agent 的 PDDL 参考位置,计算完整三维距离和忽略世界 Y
坐标后的 X/Z 距离。两个谓词都在同一个终态成立才得到联合反事实 true;并不要求
两个不同机器人。计算支持任意已记录的 agent 数量。
结果以 Habitat 原始 pddl_success 为官方值;三维重建必须与它一致,否则对照
标记 unavailable。源摘要、终态 episode/scene/step、机器人集合、阈值、目标或 provenance 缺失/不匹配
也标记 unavailable。X/Z 结果仅为诊断性的假设重算,不是另一套官方评分,不能进入
Formal/benchmark population 或替代 Mission satisfaction。旧版 v0.3 终态诊断没有直接
记录阈值,因此不会被自动伪装成 v0.4 对照。需要离线重算时可运行
uv run python -m roboguide_eval.b1_goal_geometry <run-dir> --output <new-output-path>,
输出应放在新目录以保留原始归档。
- Eval Harness 不属于 RoboGuide Core、Runtime、Control Plane、State & Memory Plane 或任何 Local EAIOS;它不修改 Proposal / Commit / Binding / Runtime 语义。
- Harness 不 import、不复制、不重实现 EMOS / Habitat-MAS / RoboGuide 的内部 逻辑;外部系统只通过进程边界(subprocess)访问。
- 不把 Habitat/EMOS 依赖加入 RoboGuide Python 环境;Harness 与 EMOS 各自 保留独立环境。
RoboGuideRunner只接纳真实 Controller / Node Protocol / Runtime / Local EAIOS production-path evidence,不允许绕过 RoboGuide 直接调用 Habitat skill。- Harness 不定义 Habitat-MAS 如何判定 task success;各系统 runner 只把各自 原始输出转换为 canonical metrics,并保留 raw evidence。
- 真实 results、本机
local.yaml、数据集与模型文件不提交 Git。
evaluation/
├── specs/e1/mobility-smoke.yaml # E1 smoke 实验定义(可移植、无机器信息)
├── e1/controlled-workload-v0.1.yaml # Formal E1 candidate + fail-closed admission
├── e1/PREFLIGHT-CLOSURE.md # preflight checks + exact remaining blocker
├── local.yaml.example # 本机配置模板(复制为 local.yaml,不入库)
├── src/roboguide_eval/
│ ├── models.py # ExperimentSpec 领域模型与 canonical 序列化
│ ├── config.py # spec 加载/校验、digest、本机配置、ProcessSpec 解析
│ ├── metrics.py # canonical metric 注册表与 MetricsPayload 合同
│ ├── process.py # 进程管理器(argv、env、timeout、terminate/kill)
│ ├── runner.py # SystemRunner 生命周期与实验编排
│ ├── results.py # RunManifest、run 目录、trace、汇总
│ ├── cli.py # doctor / run / summarize
│ └── systems/ # emos.py / roboguide.py 命名 runner
└── tests/ # 离线、确定性测试(fixture 子进程)
- ExperimentSpec(
specs/**/*.yaml,roboguide-eval.experiment-spec/v0.1): 描述实验本身 —— experiment id、benchmark、task、episode 选择、systems under test、LLM provider/model/reasoning、seeds、metrics、timeout、数据集身份与 机器人上下文元数据。canonical JSON 序列化产出稳定 digest,写入每次 run 的 manifest。 - EnvironmentSpec / ProcessSpec:spec 只携带可移植期望(期望产物、超时、
metrics 来源路径);工作目录、可执行文件、参数、Conda 环境、凭据全部来自
evaluation/local.yaml或ROBOGUIDE_EVAL_*环境变量,解析时合并 (spec < local config < 环境变量)为最终 ProcessSpec。配置了 Conda 环境时, argv 自动包装为conda run --no-capture-output -n <env> ...,不需要交互式conda activate。 - SystemRunner:统一生命周期
prepare -> run_episode -> collect_result -> cleanup。EmosRunner启动官方 EMOS entry point;RoboGuideRunner启动POST /v1/missions -> Control -> Node -> Local EAIOSproduction scenario 并归约 其持久证据。两者均只跨进程观察,不 import 对方运行时。 - RunManifest(
roboguide-eval.run-manifest/v0.1):每个 run 的唯一完整 身份 —— experiment/system/benchmark/task/episode/seed、LLM 配置 (含预留的reported_model,用于记录 API 实际返回的 model identifier)、 run id、RoboGuide git SHA、外部系统版本、数据集身份/digest、config digest、 起止时间、完整命令、退出状态、失败原因与环境信息。 - Canonical metrics(
roboguide-eval.metrics/v0.3):注册表当前包含 E1 核心指标(success、subgoal_success_rate、simulation_steps、token_usage、 wall_time、coordination_latency)与预留指标(assignment 三项、scheduling/ recovery latency、resource conflicts、deadline miss、state freshness、 control-plane overhead),并独立表达 benchmark success、local skill completion、 episode termination、RoboGuide Mission completion、global/local calls/tokens、 physical dispatch、message activity 与 failure categories。runner 产出的metrics.json保留 raw evidence 引用;未知指标名拒绝入库。v0.2 历史证据仍可读, 新输出使用 v0.3。v0.1 → v0.2 迁移(尚无正式论文数据):subgoal_success(boolean)改为subgoal_success_rate(number,[0,1], 带范围校验)——布尔无法表达部分 subgoal 完成;invalid_assignment_count移除,由 reserved 的 assignment 三指标替代(定义见下)。
E1 是 paired comparison:同一个 Habitat-MAS episode 必须分别由 EMOS 和
RoboGuide 执行。因此 manifest 的 episode_selection 区分两层:
- selector:spec 的 episode 标签(如
seed-pinned-sample)+ seed —— 描述"如何选取",不是 episode id; - resolution:从官方输出解析出的真实身份——
resolved_episode_id、resolved_scene_id、dataset_index、dataset_record、evidence_source列表与status(resolved/multiple-episodes/unresolved+ reason)。
回答"EMOS run X 和 RoboGuide run Y 是否同一 benchmark episode"看
resolved_episode_id + dataset_record(配合 spec 的 dataset digest)。
不伪造:解析不到就 unresolved/partial 并记录原因。
相同 episode 仍不足以形成 paired workload。两侧还必须覆盖同一 semantic goal
predicates。当前 episode 51 的官方任务要求两个 any_at 谓词在联合终态
成立;每个谓词都允许任意机器人满足,不要求两个不同机器人分别执行。
Habitat adapter 会把完整的 joint terminal-state goal 冻结进 Mission
Grounding Context。最终 MissionPlan 是否覆盖全部谓词由 MI Reviewer/Repairer 和
provenance diagnostic 记录;遗漏谓词属于 RoboGuide/model outcome,不会伪造成
provenance invalid,也不会把该次观察从 Formal population 中静默排除。只有官方
pddl_success 可用时,run 才能进入 benchmark population。
Authoritative semantic evidence v0.2 在中立 identity 字段中保留
episode_id、dataset_revision、dataset_sha256,场景来自
world_context.scene_id。Habitat adapter 从已加载 dataset 对象的实际配置解析
data_path(含 split),沿用当前部署的 .json.gz 文件名去后缀作为 revision,
对 gzip 原始字节计算 SHA-256;不从 B1 输入复制身份。此路径要求部署数据在加载和
采集期间保持不可变,只支持当前单文件 dataset;缺失来源、scene shards、无法识别的
episode/scene 均失败。v0.1 缺少 dataset 身份,读取时拒绝,不自动补齐或升级。
Evaluation 将这四个字段逐项与 b1-input-used.json 严格交叉绑定,任一字段缺失、
类型错误或不匹配都使 provenance invalid;重新计算外层 digest 也不能绕过。
Request 的每条 review_history(包括 repair 前后及 early failure 前已产生的 review)
还必须保留格式正确且等于最终 frozen grounding_context.context_digest 的
grounding_context_digest;缺失、跨 snapshot 或 stale review 使 provenance invalid。
该检查复用现有 request record,不改变 Mission Request HTTP API。
scene/index 的来源(pinned dataset resolver):在 local.yaml 为系统配置
dataset_path 指向 pinned episodes 文件后,runner 只读解析(gzip+JSON,不
import Habitat/EMOS),并先校验文件 SHA-256 与 spec 的 dataset digest 一致;
episode id 在 dataset 内唯一时给出 resolved_scene_id / dataset_index /
dataset_record,digest 不匹配、id 缺失或重复时给出显式 dataset_status
(digest-mismatch / not-found / ambiguous),不猜。未配置 dataset_path
时 dataset_status: not-configured,scene 保持 null。
| canonical metric | 官方来源 | 说明 |
|---|---|---|
| success | evaluator 摘要 Average episode pddl_success:(stderr,logger 格式) |
stdout+stderr 双流合并解析;仅单 episode run 映射为布尔(均值≥0.5);批次保留均值在 details,不布尔化 |
| subgoal_success_rate | 官方 pddl_stage_goals.<stage>_success 聚合的均值 |
mobility 的 stage-goal measurement(经 composite_stage_goals 配置节点注册)在 evaluator 摘要中输出 per-stage 成功率;其均值为 rate,原始 stage 值保留在 details.emos_stage_goal_success |
| simulation_steps | stdout Episode ID: <id>, Num Steps: <n> 官方横幅 |
habitat Env.log_episode_steps 在 env reset 时打印 |
| token_usage | chat_history_output/<date>/<config>/<ablation>/<episode_id>/token_usage.json |
EMOS 自带 per-agent 实际 usage total(MultiLLMPolicy.act 构造的嵌套布局,默认开启);按 prepare 快照差异定位本次新写的文件,复制进 run 目录 raw-evidence/ 并记录 source path |
| wall_time | Harness 实测进程时长 | details.wall_time_source = harness_process_duration 标注来源 |
evaluator 摘要在 stderr:habitat-baselines 的聚合摘要走 Python
logging(默认 stderr,带时间戳前缀),横幅走
token 成本细分是 harness 侧记账职责:EMOS 只记录 per-agent
total_tokens;input/output/cached/reasoning 的细分由 EMOS 侧最小记账 插桩提供——habitat_mas/utils/models.py中每个 LLM 调用通过_record_usage把完整usage对象 + 时间戳 + 延迟追加写入 episode 目录 的token_usage_details.jsonl(instrumentation only:不触碰 task assignment / reflection / execution 任何算法路径,且 RoboGuide 臂将来复用 同一 CrabAgent 栈时测量自动对称)。EmosRunner 按快照差异定位本次新写的 明细文件,复制进 run 目录raw-evidence/并记录 source path,聚合成 canonical 细分(token_input_usage/token_output_usage直接可得;cached_prompt_tokens/reasoning_tokens在上游 usage 携带明细时可得, 否则 unavailable 并说明原因)。本地记账代理(
roboguide-eval proxy)保留为诊断工具:不改 baseline 的透明转发 + 落盘,用于排查中转问题或交叉核对——--upstream必须是不带/v1的根地址,OPENAI_BASE_URL指向http://127.0.0.1:<port>/v1。 MI Responses 可通过同一个代理的/responses;两臂须固定是否经过代理。--run-id <public-id>要求新的 log path,并分别记录requested_model与真实response_model/response_id/system_fingerprint及非敏感推理参数。 返回身份缺失、非 JSON、流式或超过 4 MiB 的 metadata parsing budget 时保持 unavailable, 不能从请求模型名补造。只记录已知 numeric usage 字段,不记录 Prompt、输出文本、 headers、URL query 或凭据。默认最多 10000 条、每条 64 KiB;预算或落盘失败 不改变转发的响应。旁路<log>.status.json区分记录丢失和 in-flight 请求,只有 graceful close 且所有已进入代理的请求已归档,才会给出complete=true。 消费者必须校验 run_id、顺序、记录数、sidecar 和每次返回身份;此状态不证明 绕过代理的请求不存在,也不证明 relay 内部实际模型权重身份。 TTFT 在 baseline 非流式调用下不可观测,如实不记录(插桩记录的是每次调用 的请求/响应时间戳与总延迟)。成本分析语义(
cached ⊆ input):上游语义中cached_tokens是prompt_tokens的子集(canonicaltoken_input_usage包含缓存命中 部分)。有效输入成本 =(input − cached) + cached × 缓存单价;直接拿token_input_usage乘全价会重复计费缓存部分。实测参考:mobility smoke 一次 run 的 input 41436 中 18432(44.5%)为缓存命中——两臂/多 run 对比 时必须披露缓存命中差异或按有效成本归一。批次 run(一次进程跑多个 episode)的 per-episode token 归因暂缓,五个 token 字段显式 unavailable。
episode identity 的解析顺序:stdout 官方横幅(首选)→ episode_log/**/ *_steps_log.json 相对上一 run 后刷新的 baseline 的新增记录(回退,每个 run
只归属自己新增的记录)→ scene/index 由 digest 校验后的 pinned dataset 补全。
横幅时机已对源码验证:habitat VectorEnv 默认 auto_reset_done=True,
episode done 的那次 step 自动 reset 并打印刚结束 episode 的横幅——包括
最后一个/唯一一个 episode;回退路径保留作非标准执行栈的纵深防御。
token 定位防串场:同一 episode id 的历史 token 记录(不同日期目录)永远 不作为本次证据——只有相对 prepare 快照新建或变更的文件才算,多于一处变 更时显式 ambiguous,找不到时 unavailable 并说明原因。
可用性策略:没有可靠官方来源的 metric 一律缺失,不填 0、不猜测,原因
记录在 details.unavailable_metrics。此外 runner 写入前强制执行 canonical
合同校验(名称/类型/bounds):违反合同的 payload 不会落盘为不可读数据,而是
降级为空 values + details.metrics_validation_error + trace metrics_invalid
事件,run 的 manifest/日志/证据全部保留。
E1 controlled comparison 的协调延迟只测量全局协调阶段:
- EMOS:从开始 global coordination / group discussion 到 final assignment 确定;
- RoboGuide:从一个已 ready 的 Task/Role requirements 进入全局协调,到 assignment 完成 Commit。
不计入:simulator reset、本地机器人执行、navigation、Habitat skill runtime。 Mission Intelligence 是否计入该指标未决——正式采集前必须先冻结协议; 在此之前该 metric 保持 unavailable(runner 自动标注)。
原 invalid_assignment_count 定义过模糊,已移除。替代三项均为 reserved,
在能可靠提取事件前不采集:
initial_infeasible_assignment_count:初始 coordinator proposal 中被目标 robot/local agent 判定 capability-infeasible 的 assignment 数;final_infeasible_assignment_count:最终进入执行但 capability 上不可执行 的 assignment 数;reassignment_count:因 assignment 拒绝 / feasibility conflict 发生的重新 分配次数。
测量要求:需要从 EMOS 的 Leader Assignment → Agent Reflection → Reject/Reassign 环节可靠提取带 identity 的结构化事件。当前审计结论:这些 环节没有结构化日志输出(仅散落在对话文本中),无法可靠提取——若要采集, 需要在 benchmark integration 层加最小 instrumentation(带 assignment id 与 拒绝原因的事件输出),且不得改动 EMOS 算法逻辑。
每次 run 生成独立目录(真实 results 不提交 Git):
results/<experiment-id>/<run-id>/
├── manifest.json # 完整可复现身份
├── metrics.json # canonical metrics + raw evidence 引用
├── trace.jsonl # 结构化事件轨迹
├── stdout.log # 外部进程 stdout(失败也保留)
└── stderr.log # 外部进程 stderr(失败也保留)
外部进程失败(非零退出、超时、无法启动)不会销毁证据:manifest 记录退出码与 failure_reason,stdout/stderr 持久化,metrics 允许为空。
# 环境体检(不运行 episode;含 ${VAR} 凭据可解析性检查)
uv run roboguide-eval doctor --spec evaluation/specs/e1/mobility-smoke.yaml
# 运行一个系统(命令映射由本机配置提供)
uv run roboguide-eval run --spec evaluation/specs/e1/mobility-smoke.yaml --system emos
# 覆盖 episode / seed
uv run roboguide-eval run --spec ... --system emos --episode seed-pinned-sample --seed 7
# 汇总
uv run roboguide-eval summarize --results evaluation/results
uv run roboguide-eval summarize --results evaluation/results --jsoncp evaluation/local.yaml.example evaluation/local.yaml(模板已按 emos-baseline 交接文档填好结构:workdir、habitat环境、GPU 1、中转 endpoint、EMOS_LLM_MODEL: "{model}"跟随 spec);- 运行前导出凭据:
set -a; source /data/workspace/code/emos-baseline/emos.env; set +a(或在 shell 中 exportOPENAI_API_KEY);doctor 会提前发现缺失的引用; - 凭据使用
${OPENAI_API_KEY}引用,spawn 时从环境解析,manifest 只保留 占位符,不会写入真实 key; - 也可用环境变量临时覆盖:
ROBOGUIDE_EVAL_EMOS_WORKDIR/ROBOGUIDE_EVAL_EMOS_EXECUTABLE/ROBOGUIDE_EVAL_EMOS_CONDA_ENV。
当前 habitat-lab 版本没有 episode_ids 过滤,确定性来自两个手段:
habitat.seed={seed}+habitat.environment.iterator_options.num_episode_sample=1——固定 seed 确定性地采样出恰好一个 episode(注意 seed 必须非零,iterator 忽略 seed 0);这是 smoke spec 的默认映射,episode 多样性来自 seed 网格;habitat.dataset.content_scenes=["<scene_id>"]——场景级过滤,一个进程跑该 场景的全部 episodes 作为一批。
一个 EMOS 评估进程总是跑完整个(过滤后的)episode 集合,所以 harness 的
episode 字段语义是"确定性选择方案的标签"(selector);run 实际执行的
episode 身份由 EmosRunner 从官方输出解析后写入 manifest 的
episode_selection.resolution(见上文 Episode identity 一节)。EMOS 的
pddl_success 由 EmosRunner 从 stdout 的 Average episode ... 日志行转换
(仅单 episode run 映射为布尔,均值 ≥ 0.5;批次不布尔化),其余 EMOS 指标
原样保留在 details;wall_time 在系统未自报时由 harness 用实测进程时长
回填,并在 details.wall_time_source 标注来源。metric 来源总表见上文
"EMOS 官方输出与 metric 来源"。
✅ 数据就绪(2026-09-09 验证):MP3D ToU 已批复、90 栋全量场景在位 (21GB,habitat 仅需 glb 子集),mobility 99 集引用的 18 个场景全部 就绪(目录 + glb 双确认),
mp3d.scene_dataset_config.json在位; smoke 已实际跑通 episode 20。robot 配置说明:robot_configs/mp3d/ mobility_episodes_1.json为手工补的 alias(作者包只有 9 集,alias 补至 10 集,其余 89 集无条目)。已对源码确认其影响:mobility 配置randomize_agent_start: 1,agent 每集由 simulator RNG(受habitat.seed驱动)随机放置——缺失条目不会崩溃(直接索引分支在 randomize 分支的 else 里,不会到达),配置条目仅影响 LLM 的场景文字 描述;同 seed 可复现同一初始状态,两臂同 seed 对比不受影响。
roboguide-eval mission-front 用生产适配器(真实模型 + Capability Catalog v0.3 +
真实审批策略)驱动 Dialogue → Interpreter → Planner → Validator → Reviewer →
Repair 链路,按 semantic invariants(非 exact DAG)评测并落盘完整证据
(instruction / dialogue / assessment / plan / review-repair 历史 / token /
延迟 / 失败原因)。两种运行模式:
- context-free(默认):engine 使用 Empty grounding reader——即
mission-front --cases ...的原有行为; - fixture-grounded:
--grounding evaluation/mission_front_grounding/canaries.yaml运行 Grounding A/B canaries——每个场景按pair分为 context_free / fixture_grounded 两臂;grounded 臂通过FixtureGroundingReader注入官方GroundingContextSnapshot契约对象(fresh/conflict/stale/no-evidence/ MetadataOnly/gap-only 七组场景),快照按当前 dialogue revision 动态绑定 digest, 不另造任何 grounding 语义。
Plan-dependent invariants 在 Planner 阶段未实际执行时标记为 NOT_EVALUATED
(不计 FAIL);stage timing 按 case 差分统计。证据与 baseline 报告见
evaluation/baselines/ 与 evaluation/mission_front_evidence/。
- 真实实现:进程管理(超时/终止/日志持久化/进程组清理)、spec 解析与校验、
digest、manifest/metrics/trace 基础设施、CLI(含 doctor 凭据检查)、
canonical metric 合同 v0.2(含范围校验与 unavailable 机制)、episode
identity 解析(官方横幅 + episode_log 回退)、EMOS 官方输出的 canonical
转换(success/simulation_steps/token_usage + unavailable 标注)、
wall_time回填、环境变量值的{model}占位符替换。 - Fixture / 待接(按任务边界有意保留):EMOS 官方命令的正式参数映射 (现由 local.yaml 模板承载)、RoboGuide Controller 路径驱动(保持 placeholder,等 Task/Role/ExecutionIntent 语义人工冻结后接 Habitat bridge)、Habitat bridge。
- Benchmark 侧观察(已对源码证伪的旧担忧,记录结论防止复发):此前怀疑
Env.log_episode_steps访问measures['pddl_stage_goals']会在 mobility 上 KeyError。实际验证:mobility measurements 列表中的composite_stage_goals就是PddlStageGoalsmeasurement(config-store 名、package 键pddl_stage_goals与 measure uuid 三者不同名),已注册 且被 HANDOFF 验证过的 social_rearrange 使用同一列表并成功写出 subgoals 文件——无 KeyError,无需任何 override。mobility 的 pddl spec 也定义了stage_goals,per-episode stage 数据会正常落episode_log/**/*_subgoals.json(subgoal metric 接入留待后续轮次)。
evaluation/results/ 是工作输出区,保持 Git 忽略;需要跨机器同步、评审或
作为论文证据的结果快照,显式复制到 evaluation/baselines/<suite-name>/
后提交(2026-09 起经项目负责人确认的约定变更)。当前已入库:
e1-habitat-mas-mobility/:E1 EMOS 臂 4 次 smoke run(含失败→修复→成功 的完整迭代证据与逐调用 token 记账);mission-front/mission-front-20260911T152347Z-c6eca836/:Mission Front-half 29 case 首轮真实模型 baseline(0/29 通过;主导发现:Interpreter 对简单指令也大量触发澄清,24/29 case 停在 NeedsClarification——属待 review 的前半段行为 evidence,非 harness 故障)。
入库前检查约定:无凭据(精确扫描)、无超大文件(单文件 >1MB 需说明)。