test(web): cover the settings surface and workspace management
Two new keyless scenarios for the functionality master gained since this lane's base (#644 websettings, #643 workspace browser rework), both zero model calls: - settings-chrome: the modal shell (sidebar-foot trigger aria states, role=dialog, aria-current section switch to the deliberately empty Models, Escape + close-button paths, dialog aria golden); the Appearance row as the REAL theme gesture — retiring lifecycle-chrome's TODO(web-theme-gesture): clicking 深色 runs aria-pressed -> persisted dsh.theme -> body[data-ds-dark-theme] -> alias-token flip, survives reload, and 'system' follows the emulated OS scheme both ways; the Language row switches the settings-scoped copy to English (dsh.locale persisted, survives reload) and restores zh. Intentional reloads tear the SSE stream, so the spec drains exactly its own reconnect warnings — the tripwire still fails on unexpected connection loss. - workspace-management: create-by-name twice through the region-header dialog (host-durable via ctx.workspace.list()); rename end to end — hover-revealed row menu (the button is display:none until the row hovers), duplicate-name pre-check (inline role=alert + disabled primary before any wire call), then workspace.rename through the real RPC, row update, host durability, reload survival; the flat 'In one list' view (section label flips, group headers drop, dsh.workspace.view persists across reload, grouped restored); the session hover card (dwell to open, closes on pointer leave). The one session row reuses seeded-history's committed seed — no new recording. Deliberately not driven: the inert menu rows and drag reorder (deferred in the note with re-entry triggers). Agent Note gains scenarios 8-9 and the drag-reorder deferred item in both languages; llm-replay README's zh side catches up with the { patches } paragraph; pairings re-recorded.
This commit is contained in:
@@ -2,5 +2,5 @@
|
||||
# side as of the last confirmed-consistent state. Both languages carry equal authority;
|
||||
# after editing either side, bring the other along and re-record with:
|
||||
# pnpm run verify-translation-pairing --write
|
||||
README.md: 901a3b7b4312fffd93e6d375c378e39064318260
|
||||
README.zh.md: b9a8068d329e28933c934e7ad352ac65641f3d23
|
||||
README.md: f184e271ff9e68760db43cfe79d4f39be81ef00f
|
||||
README.zh.md: a47bc81ab747fcdc130d535e116979e45304b319
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
Fixture 就是持久化会话日志(`<scenario>/session.jsonl`)。其 `assistant/chunk` 事件携带每个 `StreamChunk`,因此按 `(turn, step)` 对其分组可重建每次 `stream()` 调用的分片序列(每个 loop 步骤一次模型调用)。因此,录制操作是「运行一次真实 agent 并收集 `.jsonl`」,由快照 harness 完成;该插件不执行录制。Fixture 的 `request/header` 内容可能被 token 化为 `{{system}}`/`{{tools}}`(harness 在一个场景中固定该内容,并擦除其余场景);回放对此并不关心,因为派生只读取 `assistant/chunk` 事件和第 0 行会话 header。
|
||||
|
||||
有两种失败 mode 无法仅从 `assistant/chunk` 重建:在任何分片前纯抛出(例如 HTTP 401,日志只包含 `turn/end {error}` 而没有分片),以及 cancel/hang(是时序,而非分片内容)。需要这些的场景提供可选 sidecar(`<scenario>/replay.override.json`:一个 `ReplayEntry[]`),以替换派生脚本。`hang` 条目可以指定 `readyFile`;在其前缀分片到达 loop 后、等待取消前,回放会写入该空标记,使外部驱动器可以在不观察展示更新的情况下确定性取消。
|
||||
有两种失败 mode 无法仅从 `assistant/chunk` 重建:在任何分片前纯抛出(例如 HTTP 401,日志只包含 `turn/end {error}` 而没有分片),以及 cancel/hang(是时序,而非分片内容)。需要这些的场景提供可选 sidecar(`<scenario>/replay.override.json`),它要么替换派生脚本(裸 `ReplayEntry[]`),要么增补派生脚本(`{ patches: [{ at, entry }] }`:保留全部由 JSONL 派生的调用,仅在点名的调用索引处换入,索引从 0 计;`at` 等于派生长度时为追加,正是注入的瞬态抛出之后那次重试尝试所占的槽位)。`hang` 条目可以指定 `readyFile`;在其前缀分片到达 loop 后、等待取消前,回放会写入该空标记,使外部驱动器可以在不观察展示更新的情况下确定性取消。
|
||||
|
||||
## 嵌套 agent:每会话键控
|
||||
|
||||
|
||||
Reference in New Issue
Block a user