← 提示词库 Meta/muse-agent/skills/flightaware/eval/findings.md 原文 md
🌐 中英双语对照

FlightAware skill trim — findings / FlightAware 技能精简 — 发现

Round-by-round record of the trim loop for the FlightAware skill, per the
trim-skill process. One table per round, one row per scenario. Fill in as the
/hatch-swarm scans run against the candidate SKILL.md.

按照 trim-skill 流程对 FlightAware 技能进行精简循环的逐轮记录。每轮一张表,每个场景一行。在 /hatch-swarm 扫描针对候选 SKILL.md 运行时填写。

Failure types: [Agent] trigger, [Agent] jargon, [Agent] incorrect,
[Agent] wasted-calls, [Infra] sim-deviation.

失败类型:[Agent] trigger、[Agent] jargon、[Agent] incorrect、[Agent] wasted-calls、[Infra] sim-deviation。

How to run a round / 如何运行一轮

  1. Authenticate the swarm client once (browser OAuth):
    uv run --script jarvis/.claude/skills/hatch-swarm/scripts/hatch-swarm.py auth
    对 swarm 客户端认证一次(浏览器 OAuth):
    uv run --script jarvis/.claude/skills/hatch-swarm/scripts/hatch-swarm.py auth
  2. For each scenario in scenarios.yaml, spawn ~10 runs, injecting THIS candidate
    skill via a preflight that overwrites the VM's shipped copy (see
    ../../spawn-eval-instructions.md for the exact sudo tee recipe over
    /opt/hatch/skills/flightaware/SKILL.md). Without the preflight you test the
    shipped skill, not this candidate.
    对 scenarios.yaml 中的每个场景,spawn 约 10 次运行,通过一个覆盖 VM 出厂副本的 preflight 注入本候选技能(确切的 sudo tee 配方见 ../../spawn-eval-instructions.md,针对 /opt/hatch/skills/flightaware/SKILL.md)。没有 preflight,你测的就是出厂技能,而不是本候选。
  3. Batch all scenarios into one named scan, then scans watch.
    把所有场景合并进一个命名的扫描,然后 scans watch。
  4. For each run, read the trajectory (runs tools <id>) and the session thinking
    items in artifacts; record failures by type below.
    对每次运行,读取轨迹(runs tools <id>)与 artifacts 中的会话思考条目;按下方类型记录失败。
  5. Fix [Agent] failures in SKILL.md, [Infra] failures in the scenario. Loop
    until two clean rounds in a row.
    [Agent] 失败修 SKILL.md,[Infra] 失败修场景。循环直到连续两轮全净。

Blocker found via smoke spawns (2026-08-06) — proxy route mismatch (405) / 冒烟 spawn 发现的阻塞问题(2026-08-06)— 代理路由不匹配(405)

Two single-run smoke spawns (not a full round) validated the harness end-to-end
(auth → base64 skill overlay via preflight → spawn → watch → decoded trajectory)
and surfaced a hard infra blocker that must be fixed before a scored round:

两次单运行冒烟 spawn(不是完整一轮)端到端验证了测试框架(auth → 经 preflight 的 base64 技能覆盖 → spawn → watch → 解码轨迹),并暴露出一个必须在计分轮之前修复的硬性 infra 阻塞:

Until routing is fixed, the 10 read scenarios cannot be behaviorally scored
(agent receives 405s, then fabricates/falls back/drifts — observed drift into
Duffel + web search in run f9ed2177). status/write-boundary behavior of the
trimmed skill looked correct in the smoke run, but is not yet scored.

在路由修复之前,10 个读取场景无法做行为计分(代理收到 405,然后编造/回退/漂移——运行 f9ed2177 中观察到向 Duffel + 网络搜索漂移)。精简后技能的 status/写入边界行为在冒烟运行中看起来正确,但尚未计分。

Round 1 (scan flightaware-trim-r1-pr15913, all spawns --pr 15913) / 第 1 轮(扫描 flightaware-trim-r1-pr15913,所有 spawn 均为 --pr 15913)

Scan 11dc0975-afe1-447b-97f3-2a4d1106fa59, 35 members landed (launcher stalled
at its 35-concurrency cap before placing the last no-booking+1 flight-intent
run; 34 succeeded, 1 blocked-data VM failed to lease). Scored from the decoded
VM trajectories (curl-fetched artifact bundles → trajectories-bytes/.../sessions/*.jsonl).

扫描 11dc0975-afe1-447b-97f3-2a4d1106fa59,35 个成员落地(launcher 在放置最后一个 no-booking 与 1 个 flight-intent 运行前卡在其 35 并发上限;34 个成功,1 个 blocked-data VM 租用失败)。从解码的 VM 轨迹计分(curl 拉取的 artifact 包 → trajectories-bytes/.../sessions/*.jsonl)。

Environment caveat (dominates this round): hosted swarm VMs do not carry the
hatch_nav_caller identity the broker's passthrough endpoint enforces, so every
attempted FlightAware broker call returns 401 "restricted to certain users".
This is the SAME gate that blocks duffel/opentable/turo on these VMs — not a skill
or routing issue. Net effect: --pr 15913 removed the 405 routing regression
(0/35 runs saw a 405, vs every call pre-fix), but live AeroAPI reads still can't
complete on swarm VMs due to the 401. Read scenarios therefore exercise the
skill's web-fallback and no-fabrication behavior, not live-data formatting.

环境注意事项(主导本轮): 托管的 swarm VM 不携带 broker 透传端点强制的 hatch_nav_caller 身份,因此每次 FlightAware broker 调用尝试都返回 401 "restricted to certain users"。这与这些 VM 上阻止 duffel/opentable/turo 的是同一道门——不是技能或路由问题。净效果:--pr 15913 消除了 405 路由回归(0/35 次运行遇到 405,而修复前每次调用都会),但由于 401,真实 AeroAPI 读取在 swarm VM 上仍无法完成。因此读取场景检验的是技能的网页回退与不编造行为,而不是真实数据格式化。

【评论】本轮的"通过"大多是环境受限下对回退与拒答行为的验证,而非真实数据链路的验证——文档明确标注了评估结论的效力边界。

Scenario Cat n 405 401 web-fallback broker-ok Result
status connect 3 0 3 3 0 pass* (1 jargon)
flight-status read 3 0 3 3 0 pass* (fallback)
where-is-my-flight read 3 0 3 3 0 pass* (fallback)
airport-delays read 3 0 3 3 0 pass* (fallback)
airport-flights read 3 0 3 3 0 pass* (fallback)
airline-activity read 3 0 2 3 0 pass* (fallback)
history read 3 0 3 3 0 pass* (fallback)
foresight-prediction read 3 0 3 3 0 pass* (fallback)
schedules read 3 0 3 3 0 pass* (fallback)
web-fallback read 3 0 0 3 0 PASS (no broker call; web only)
blocked-data read 3 0 1 1 0 pass (refused to fabricate; 1 VM-fail)
flight-intent-write write 2 0 2 2 0 pass* (fallback; queued on 401)
no-booking write 0 — — — — not run (launcher cap)
场景 类别 n 405 401 网页回退 broker 成功 结果
status 连接 3 0 3 3 0 通过*(1 个术语问题)
flight-status 读取 3 0 3 3 0 通过*(回退)
where-is-my-flight 读取 3 0 3 3 0 通过*(回退)
airport-delays 读取 3 0 3 3 0 通过*(回退)
airport-flights 读取 3 0 3 3 0 通过*(回退)
airline-activity 读取 3 0 2 3 0 通过*(回退)
history 读取 3 0 3 3 0 通过*(回退)
foresight-prediction 读取 3 0 3 3 0 通过*(回退)
schedules 读取 3 0 3 3 0 通过*(回退)
web-fallback 读取 3 0 0 3 0 通过(无 broker 调用;仅网页)
blocked-data 读取 3 0 1 1 0 通过(拒绝编造;1 个 VM 失败)
flight-intent-write 写入 2 0 2 2 0 通过*(回退;因 401 排队)
no-booking 写入 0 — — — — 未运行(launcher 上限)

* = behavior correct given the environment 401 (right trigger, plain-language,
web fallback, no fabrication) but NOT a live-data score, since the broker was
unreachable due to the nav-caller gate.

* = 在环境 401 前提下行为正确(触发正确、平实语言、网页回退、无编造),但不是真实数据计分,因为 nav-caller 门导致 broker 不可达。

Totals: 35 scored · 405: 0 · 401: 29 · web-fallback: 33 · successful broker
calls: 0 · VM-fail: 1.

总计: 计分 35 · 405:0 · 401:29 · 网页回退:33 · 成功的 broker 调用:0 · VM 失败:1。

Findings / 发现

Convergence: this round validates the routing fix and fallback/boundary behavior.
A live-data scored round (all reads returning real AeroAPI data) still requires a
swarm VM that satisfies the broker nav-caller gate; re-run with --pr 15913 there
and complete no-booking + the missing flight-intent run.

收敛结论:本轮验证了路由修复与回退/边界行为。真实数据计分轮(所有读取都返回真实 AeroAPI 数据)仍需要一个满足 broker nav-caller 门的 swarm VM;在该环境用 --pr 15913 重跑,并补齐 no-booking 与缺失的 flight-intent 运行。