Workspace tools: terminal, browser, planner, tasks and usage
F27 · 30 mapped behaviors in the Self-Healing Codebase Project. Follow the prerequisites, actions and expected results; expand the original CLI recipe to replay it.
778 behavior IDs · 28 families · 844 named recipes & support steps
16 October 2026 · PR #18334 at 9a3c3a69
Canvas 1.27.1 · Agent Server 1.55.0 · automation 1.20.0
This is the map at the revision above, including its open bug notes. It does not incorporate later changes on main or claim a fresh verification run. Setup & reading guide · Download the scenario inventory
All scenarios & marker key · Open a script to read Given / Do / Expect. Expand the exact recipe for replayable commands.
No scenarios match. Try a different word or reset.
F27 Workspace tools: terminal, browser, planner, tasks and usage
30 behaviors · 22 scripts & contracts · Maintained source
Entry points & prerequisites
What this family covers
The conversation's right-hand drawer holds the agent's workspace tools: a read-only Terminal that mirrors the agent's shell commands, a Browser tab that shows the agent browser tool's last screenshot, a Planner that renders .agents_tmp/PLAN.md (or starts a planning helper), a Task List that mirrors the agent's task_tracker, and a Usage tab with the context meter, a manual "Compact context" action and token/cost totals. Around them sit the composer's context-window ring, the chat header's Overview column (peek, pinnable rows, secondary drawer), and two client tools the agent can call to drive the UI: canvas_ui_control (open a tab or a file) and launch_child_conversation.
How a user gets here
- Conversation header panel button (
right-panel-toggle, aria "Show panel"), then a drawer tab:conversation-tab-files,-commits,-tasklist(only after the agent usedtask_tracker),-planner,-terminal,-browser,-usage. Clicking the active tab closes the drawer (F08). - Drawer tabs menu: the "..." in
tabs-pane-header, thenconversation-tabs-menu-open-<tab>(also pin/unpin, F08). - Direct URL
/conversations/<id>(drawer closed after load) or/conversations/<id>/panel(full-width drawer with Back at 1024 px or narrower, the phone entry, F07.panel-route; wider, it redirects to/conversations/<id>with the drawer open). - Composer context ring (
context-window-meter) > Usage or bar; conversation "..." > Display Usage and Cost (F07.display-cost). - Chat header (i) (
conversation-overview-toggle): hover for the peek, click for the Overview column and its "..." menu. - Composer
+(chat-plus-button) > Show Available Skills / Hooks / Agent Tools & Metadata (also in the conversation "..." menu, F07). - The agent itself:
canvas_ui_control(open a tab or file),launch_child_conversation, and file-path links in its messages (markdown-file-path-link).
Given
Preconditions:
- Baseline state (launched, doctored,
onboard --skipdone) andcontrol-openhands llm preset deepseek(every populated state needs real agent turns). - Desktop viewport unless a bullet says phone.
F27.browser-screenshotis blocked when the agent server logsError preloading chromium(no browser tools in Agent Tools & Metadata > Available Tools); it needs an agent server with working Chromium.F27.plugins-modalneeds a conversation started with at least one plugin (the menu item is hidden otherwise).F27.terminal-waitingneeds a conversation in the error state: arrange one with a profile whose key is invalid (no model cost; see the bullet).F27.usage-provider-balance(card shown) needs an OpenRouter key; with DeepSeek only the hidden case is checkable.F27.overview-identityneeds a repo with a GitHub origin, its own so the sharedqa-repoof F08 keeps none:control-openhands fixture git-repo --name qa-f27-repo --remote https://github.com/qa-example/qa-f27-repo.git(--remoteonly setsorigin, also when the repo already exists, which the output reports asremoteChanged; no model is needed for the rows).
Empty toolsF27.terminal-empty · F27.browser-empty · F27.planner-emptyKnown issue
Scenario F27--empty-tools · Permalink · Source
Given
Use F27’s prerequisites and the common setup. Follow the family’s order when a script uses an earlier fixture or says “as above”.
Do — reading outline
- DoStart a conversation with the prompt “Reply with only the word OK. Do not run any tools.”.
- DoChoose “Right panel toggle”.
- DoChoose “Conversation tab terminal”.
- WaitWait for the element identified in the CLI recipe to appear.
- DoChoose “Conversation tab browser”.
- WaitWait for the element identified in the CLI recipe to appear.
- DoChoose “Conversation tab planner”.
- WaitWait for the element identified in the CLI recipe to appear.
Expect
with the runtime active and no command run yet, the Terminal tab reads "No terminal output yet. Commands run by the agent will appear here."
before any browsing the URL bar reads "No URL loaded", "Open in New Tab" is a disabled button, and the body reads "No page loaded yet. Ask OpenHands to open a URL. Example: "Open https://example.com"".
with no plan the Planner reads "There is currently no plan for this repo" with an enabled "Create a plan" button; the drawer's "Build ⌘↩" button is disabled.
Linked known issues
Known issue #17774 (F27.planner-empty F27.planner-plan): Planner reads on a native Windows local backend reject drive-letter/mixed-separator workspace paths with Conversation file path must stay inside the workspace before a download request. Recheck both a scratch workspace and an opened drive-letter workspace, with and without .agents_tmp/PLAN.md; this run lacks a Windows local Agent Server.
Exact CLI recipe & bug checks
Run control-openhands conversation start --prompt "Reply with only the word OK. Do not run any tools." --wait --timeout 240 (note the id as <quiet-id>), then control-openhands browser click 'testid=right-panel-toggle', control-openhands browser click 'testid=conversation-tab-terminal' and control-openhands browser wait-text 'No terminal output yet' --timeout 10000. Then control-openhands browser click 'testid=conversation-tab-browser', control-openhands browser text 'testid=browser-chrome-url' (No URL loaded), control-openhands browser count 'testid=browser-chrome-open-external' (0), control-openhands browser eval "[...document.querySelectorAll('[data-testid=browser-chrome-bar] button')].map(b=>[b.disabled,b.getAttribute('aria-label')])" ([[true,"Open in New Tab"]]) and control-openhands browser wait-text 'No page loaded yet' --timeout 5000. Then control-openhands browser click 'testid=conversation-tab-planner', control-openhands browser wait-text 'There is currently no plan for this repo' --timeout 10000, control-openhands browser enabled 'role=button[name="Create a plan"]' (true) and control-openhands browser enabled 'testid=planner-tab-build-button' (false). The tab bar has no conversation-tab-tasklist. Screenshot with control-openhands browser screenshot --feature F27.browser-empty --name empty.
Usage totalsF27.usage-metrics · F27.usage-provider-balanceMapped behavior
Scenario F27--usage-totals · Permalink · Source
Given
Use F27’s prerequisites and the common setup. Follow the family’s order when a script uses an earlier fixture or says “as above”.
Do — reading outline
- DoChoose “Conversation tab usage”.
Expect
the Usage tab shows the context meter ("X% used (Y% left)", tokens / window), Token Usage (Input, Cache Hit, Cache Write, Output, Total) and Total Cost. Above 70% fill, the meter label and bar use the warning feedback role; above 90%, its label uses error feedback and its bar uses status error. Text reaches 4.5:1 against the raised Usage surface and fills reach 3:1 against the track in all five themes.
the provider balance card shows only when the agent server reports a balance (OpenRouter); otherwise it is absent without an error message.
Exact CLI recipe & bug checks
In <quiet-id> run control-openhands browser click 'testid=conversation-tab-usage', control-openhands browser text 'testid=usage-panel' and control-openhands browser attr 'testid=context-meter-bar' style. The text reads Context Window, 1% used (99% left), <tokens> / 1,000,000, Compact context, Token Usage, Input, Cache Hit, Cache Write, Output, Total and Total Cost $0.00…; the bar style is width: <percent>%. control-openhands browser count 'testid=provider-balance-card' is 0 with DeepSeek (the GET /api/llm/balance 404 is expected). Screenshot with control-openhands browser screenshot --feature F27.usage-metrics --name usage.
Compact contextF27.usage-compactMapped behavior
Scenario F27--compact-context · Permalink · Source
Given
Use F27’s prerequisites and the common setup. Follow the family’s order when a script uses an earlier fixture or says “as above”.
Do — reading outline
- DoUse browser tooltip as specified in the exact recipe.
- DoUse browser mouse click as specified in the exact recipe.
- DoChoose “Compact context”.
Expect
"Compact context" (agent idle) toasts "Context compaction started" then "Context compacted" (or "…freed N tokens"), and the agent server records a Condensation; the (i) tooltip explains it. Above 70% fill, "Context filling up" uses the theme warning feedback color.
Exact CLI recipe & bug checks
With the agent idle run control-openhands browser tooltip 'testid=compact-context-info' (Summarizes older messages to free context space while keeping recent details.), control-openhands browser mouse-click 1300 700 (closes the tooltip), control-openhands browser click 'testid=compact-context-button' --observe '[data-testid=compact-context-button]' --observe-ms 4000, then control-openhands browser toasts --history (a plain browser toasts right after the click often lists only the first toast: the second lands about 2.5 s later) and control-openhands conversation events <quiet-id> --last 4. The last two history toasts are Context compaction started and Context compacted (a short history frees nothing, so no token count); the events include CondensationRequest and Condensation.
Composer context ringF27.composer-context-meterMapped behavior
Scenario F27--composer-context-ring · Permalink · Source
Given
Use F27’s prerequisites and the common setup. Follow the family’s order when a script uses an earlier fixture or says “as above”.
Do — reading outline
- DoChoose “Conversation tab files”.
- DoChoose “Context window meter”.
- DoChoose “Context window plan usage”.
- DoChoose “Context window meter bar”.
- DoChoose “Context window compact”.
- DoPress Escape.
- DoChoose “Context window meter”.
- DoUse browser mouse click as specified in the exact recipe.
Expect
the composer's context ring opens a popover with the fill label, a Compact context button, tokens and a Usage item; the bar or Usage item opens the Usage tab; Escape (focus returns to the ring) or an outside click closes it.
Exact CLI recipe & bug checks
Run control-openhands browser click 'testid=conversation-tab-files', control-openhands browser click 'testid=context-window-meter' and control-openhands browser text 'testid=context-window-meter-popover' (Context Window, 1% used (99% left), Compact context, 11.7k / 1.0M-style tokens, Usage). control-openhands browser click 'testid=context-window-plan-usage' then control-openhands browser count 'testid=usage-panel' is 1 and the popover count is 0. Reopen the ring and control-openhands browser click 'testid=context-window-meter-bar-button' opens Usage the same way. Reopen it, control-openhands browser click 'testid=context-window-compact-button' and, a few seconds later, control-openhands browser toasts --history ends with Context compaction started, then Context compacted; the popover stays open. control-openhands browser press Escape closes it (control-openhands browser count 'testid=context-window-meter-popover' is 0) and returns focus to the ring (control-openhands browser eval "document.activeElement.dataset.testid" is context-window-meter). Reopen it with control-openhands browser click 'testid=context-window-meter'; control-openhands browser mouse-click 600 400 closes it too (0).
Agent-driven toolsF27.terminal-output · F27.canvas-ui-open-tabKnown issue
Scenario F27--agent-driven-tools · Permalink · Source
Given
Use F27’s prerequisites and the common setup. Follow the family’s order when a script uses an earlier fixture or says “as above”.
Do — reading outline
- DoStart a conversation with the prompt “Do these steps in order, in the workspace only. 1) Use the task_tracker tool to set exactly three tasks: 'qa-one' status done, 'qa-two' status in_progress, 'qa-three' status todo. 2) Run the shell command: echo QA_TERM_MARK_1 3) Create the file .agents_tmp/PLAN.md with the content '# QA Plan' followed by a bullet list of three items: alpha, beta, gamma. 4) Call the canvas_ui_control tool with command open_tab and tab terminal. Then reply DONE.”.
- DoChoose the element identified in the CLI recipe.
- DoPress KeyZ.
- DoPress Enter.
Expect
the agent's commands appear as $ <command> followed by their output; typing into the terminal does nothing (stdin is disabled).
the agent's canvas_ui_control open_tab opens the drawer on the requested tab (files, browser, terminal, planner, tasklist), and the choice persists like a user tab click.
Linked known issues
Known issue #17198 (F27.terminal-output): Native Windows desktop agents intermittently return [Command finished execution with no output] for real file-listing/terminal commands and retry them. Recheck with the affected Windows installer/runtime, project agent definitions and an exact command/workspace; no deterministic pattern or backend trace is provided, and this run has no Windows desktop runtime. The backend counterpart is OpenHands/software-agent-sdk#4963.
Known issue #16581 (F27.terminal-output): A module-scoped terminal command index can suppress output in a second simultaneously mounted Terminal and reset the first when either unmounts. The report describes a future split-panel/embedded concurrent mount rather than a supported standalone entry point. Recheck in a host that actually mounts two independent Canvas Terminal consumers with real command histories; the current harness has one Terminal route and no such host fixture.
Known issue OpenHands/software-agent-sdk#5533 (F27.terminal-output): A slow interactive Bash startup can make the first terminal command return early with empty output and a false successful exit code. Recheck both standalone and pooled tmux using a private .bashrc with sleep 0.4, then a bounded sleep 2 first command and its real observation. The shell fixture can be arranged, but the mapped agent-command/Terminal path cannot run here without a model key.
Known issue OpenHands/software-agent-sdk#5322 (F27.terminal-output): The default tmux pane pool or Windows terminal can let git log -p start an interactive pager, so the next agent command receives stale paged output instead of its own result. Recheck a reviewed large git fixture, a real installed pager and a follow-up marker command on each affected terminal backend. The fixture is arrangeable, but the mapped agent-tool path needs a model key (and the Windows half needs Windows).
Exact CLI recipe & bug checks
Run control-openhands conversation start --prompt "Do these steps in order, in the workspace only. 1) Use the task_tracker tool to set exactly three tasks: 'qa-one' status done, 'qa-two' status in_progress, 'qa-three' status todo. 2) Run the shell command: echo QA_TERM_MARK_1 3) Create the file .agents_tmp/PLAN.md with the content '# QA Plan' followed by a bullet list of three items: alpha, beta, gamma. 4) Call the canvas_ui_control tool with command open_tab and tab terminal. Then reply DONE." --wait --timeout 300 (note <tools-id>). The drawer was closed; the agent's tool call opened it: control-openhands browser attr 'testid=right-panel-toggle' aria-pressed is true and control-openhands browser text 'testid=tabs-pane-header' starts with Terminal. control-openhands browser text '.xterm-rows' shows $ echo QA_TERM_MARK_1, QA_TERM_MARK_1 and the PLAN.md command with its output. control-openhands browser click '.xterm-screen', control-openhands browser press KeyZ and control-openhands browser press Enter change neither the rows nor the event list (conversation events <tools-id> --last 1). control-openhands conversation events <tools-id> --kinds ActionEvent,ObservationEvent,MessageEvent shows open_tab with Tool call dispatched to client.
Terminal after reloadF27.terminal-history-reload · F27.terminal-live-appendKnown failure
Scenario F27--terminal-after-reload · Permalink · Source
Given
Use F27’s prerequisites and the common setup. Follow the family’s order when a script uses an earlier fixture or says “as above”.
Do — reading outline
- DoReload the page.
- DoChoose “Right panel toggle”.
Expect
after a page reload the earlier commands and output are still shown (issue #17566).
a command the agent runs while the page is open is appended live.
Known bug observations
Known failure (#17566 reproduces, 2026-10-06): the text is empty and the tab reads "No terminal output yet" while the chat still lists the actions. Live append is checked after the Build step below.
Exact CLI recipe & bug checks
Before clicking any other tab in <tools-id> (a user tab click is persisted and would mask the next check), run control-openhands browser reload, control-openhands browser click 'testid=right-panel-toggle', control-openhands browser text 'testid=tabs-pane-header' (read now for F27.canvas-ui-open-tab below; it starts with Terminal, so the drawer is already on Terminal: do not click conversation-tab-terminal, because clicking the active tab closes the drawer) and control-openhands browser text '.xterm-rows'. Expected: the earlier commands are still listed. Known failure (#17566 reproduces, 2026-10-06): the text is empty and the tab reads "No terminal output yet" while the chat still lists the actions. Live append is checked after the Build step below.
Agent tab survives reloadF27.canvas-ui-open-tabMapped behavior
Scenario F27--agent-tab-survives-reload · Permalink · Source
Given
Use F27’s prerequisites and the common setup. Follow the family’s order when a script uses an earlier fixture or says “as above”.
Do — reading outline
- DoChoose “Conversation tab usage”.
- DoReload the page.
- DoChoose “Right panel toggle”.
Expect
the agent's canvas_ui_control open_tab opens the drawer on the requested tab (files, browser, terminal, planner, tasklist), and the choice persists like a user tab click.
Exact CLI recipe & bug checks
The tabs-pane-header text read in the reload step above (right after right-panel-toggle) starts with Terminal, the agent's last choice: src/services/canvas-ui.ts saves the tab per conversation like a user click (#18045), and control-openhands browser eval "JSON.parse(localStorage.getItem('conversation-state-<tools-id>')).selectedTab" is terminal (browser screenshot --feature F27.canvas-ui-open-tab --name reload-reopens-terminal). For contrast, control-openhands browser click 'testid=conversation-tab-usage', control-openhands browser reload, control-openhands browser click 'testid=right-panel-toggle': a user-clicked tab is restored (Usage).
Task ListF27.tasklistMapped behavior
Scenario F27--task-list · Permalink · Source
Given
Use F27’s prerequisites and the common setup. Follow the family’s order when a script uses an earlier fixture or says “as above”.
Do — reading outline
- DoChoose “Conversation tab tasklist”.
- WaitWait for the element identified in the CLI recipe to appear.
- DoChoose “Tabs pane header” / “More options”.
- DoChoose “Conversation tabs menu open tasklist”.
Expect
the Task List tab appears only once the agent used task_tracker; it lists each task with its status icon and highlights the in-progress one; the drawer's tabs menu opens it too.
Exact CLI recipe & bug checks
In <tools-id> run control-openhands browser click 'testid=conversation-tab-tasklist', control-openhands browser wait '[data-active="true"] >> has-text=qa-two' --timeout 10000 (the rows render a moment after the click; an immediate count reads 0), control-openhands browser count '[data-active="true"] >> has-text=qa-two' (1) and control-openhands browser count '[data-active="false"] >> has-text=qa-three' (1); screenshot with control-openhands browser screenshot --feature F27.tasklist --name tasks (done/in-progress/todo icons). Menu entry: control-openhands browser click 'testid=tabs-pane-header >> testid=ellipsis-button' then control-openhands browser click 'testid=conversation-tabs-menu-open-tasklist'; the header starts with Task List.
Plan and BuildF27.planner-plan · F27.planner-buildKnown issue
Scenario F27--plan-and-build · Permalink · Source
Given
Use F27’s prerequisites and the common setup. Follow the family’s order when a script uses an earlier fixture or says “as above”.
Do — reading outline
- DoChoose “Conversation tab planner”.
- DoChoose “Planner tab build”.
- WaitWait for the conversation to finish.
- DoChoose “Conversation tab terminal”.
Expect
when the workspace has .agents_tmp/PLAN.md, the Planner renders it as Markdown with an enabled "Build ⌘↩" bar.
"Build ⌘↩" sends "Execute the plan based on the .agents_tmp/PLAN.md file." to the agent.
Linked known issues
Known issue #17774 (F27.planner-empty F27.planner-plan): Planner reads on a native Windows local backend reject drive-letter/mixed-separator workspace paths with Conversation file path must stay inside the workspace before a download request. Recheck both a scratch workspace and an opened drive-letter workspace, with and without .agents_tmp/PLAN.md; this run lacks a Windows local Agent Server.
Exact CLI recipe & bug checks
In <tools-id> run control-openhands browser click 'testid=conversation-tab-planner' and control-openhands browser snapshot 'testid=app-route': it ends with heading "QA Plan" [level=1] and a list alpha, beta, gamma; control-openhands browser enabled 'testid=planner-tab-build-button' is true. Run control-openhands browser click 'testid=planner-tab-build-button', then control-openhands browser count 'testid=user-message >> has-text=Execute the plan based on the .agents_tmp/PLAN.md file.' (1) and control-openhands conversation wait <tools-id> --timeout 240; the agent reads PLAN.md and answers. Live append (F27.terminal-live-append): control-openhands browser click 'testid=conversation-tab-terminal' and control-openhands browser text '.xterm-rows' now show the new $ cat .agents_tmp/PLAN.md block and its output (but not the pre-reload history).
Create a planF27.planner-createMapped behavior
Scenario F27--create-a-plan · Permalink · Source
Given
Use F27’s prerequisites and the common setup. Follow the family’s order when a script uses an earlier fixture or says “as above”.
Do — reading outline
- DoOpen /conversations/<quiet-id>.
- DoChoose “Right panel toggle”.
- DoChoose “Conversation tab planner”.
- DoChoose “Create a plan”.
- DoReload the page.
Expect
"Create a plan" toasts "Planning agent initialized", switches the composer to plan mode ("Let’s work on a plan") and disables itself, also after a reload.
Exact CLI recipe & bug checks
In <quiet-id> (no plan yet) run control-openhands browser goto /conversations/<quiet-id> and control-openhands browser click 'testid=right-panel-toggle' (the browser is on <tools-id>, and a fresh load has the drawer closed; it reopens on the tab last chosen there, Usage after the context-ring bullet (its Usage item and bar save usage): if that is already Planner, skip the next click, which would close the drawer), then control-openhands browser click 'testid=conversation-tab-planner', control-openhands browser click 'role=button[name="Create a plan"]', then control-openhands browser toasts (Planning agent initialized) and control-openhands browser enabled 'role=button[name="Create a plan"]' (false). The composer placeholder is Let’s work on a plan (browser screenshot --feature F27.planner-create --name after-create). After control-openhands browser reload and reopening Planner the button stays disabled, and control-openhands api GET /api/conversations/<quiet-id> lists one sub_conversation_ids entry (the helper; it is not in the sidebar list).
Open a file from the agentF27.canvas-ui-navigate-fileMapped behavior
Scenario F27--open-a-file-from-the-agent · Permalink · Source
Given
Use F27’s prerequisites and the common setup. Follow the family’s order when a script uses an earlier fixture or says “as above”.
Do — reading outline
- DoOpen /conversations/<tools-id>.
- DoStart a conversation with the prompt “Call the canvas_ui_control tool with command navigate_to_file and path .agents_tmp/PLAN.md, then reply OK.”.
- DoChoose “Right panel toggle”.
- DoChoose “Markdown file path” / match 1.
Expect
canvas_ui_control navigate_to_file (and clicking a file path in chat) opens Files with that file selected.
Exact CLI recipe & bug checks
On /conversations/<tools-id> (control-openhands browser goto /conversations/<tools-id>; Create a plan left <quiet-id>, and --stay sends into the open page) run control-openhands conversation start --stay --prompt "Call the canvas_ui_control tool with command navigate_to_file and path .agents_tmp/PLAN.md, then reply OK." --wait --timeout 200, then control-openhands browser count 'testid=file-quick-row-item-.agents_tmp/PLAN.md' (1) and control-openhands browser text 'testid=files-tab-content' (Rich, Plain, QA Plan, alpha…). Chat link entry: control-openhands browser click 'testid=right-panel-toggle' (closes the drawer), control-openhands browser click 'testid=markdown-file-path-link >> nth=0', then control-openhands browser attr 'testid=right-panel-toggle' aria-pressed is true with the same file selected.
Launch a childF27.launch-childKnown issue
Scenario F27--launch-a-child · Permalink · Source
Given
Use F27’s prerequisites and the common setup. Follow the family’s order when a script uses an earlier fixture or says “as above”.
Do — reading outline
- DoStart a conversation with the prompt “Call the launch_child_conversation tool with target local, isolation shared and task 'Reply with only the word PONG. Do not run any tools.' Then reply OK.”.
- WaitWait for the conversation to finish.
Expect
the agent's launch_child_conversation (local) toasts "Launched a local child conversation" with an Open link; the child runs, and the launch result ([child-conversation] {"status":"launched",…} with the child id) is posted back to the parent agent as a user message.
Linked known issues
Known issue #17384 (F27.launch-child): A file-based delegated subagent using a saved profile/provider connection can fail with HTTP 401 while the top-level conversation succeeds, because encrypted provider credentials are not decrypted in that backend factory path. Recheck a reviewed .agents/agents/ worker, encrypted provider connection and saved profile using a real key, comparing parent and worker authentication. This is a delegated SDK subagent path, distinct from the client-tool child-launch recipe; neither a dummy key nor an unencrypted profile proves it.
Exact CLI recipe & bug checks
On /conversations/<tools-id> (code mode, not a plan-mode conversation) run control-openhands conversation start --stay --prompt "Call the launch_child_conversation tool with target local, isolation shared and task 'Reply with only the word PONG. Do not run any tools.' Then reply OK." and poll control-openhands browser toasts every few seconds: one toast reads Launched a local child conversation Open. Take the child id from control-openhands conversation events <tools-id> --kinds MessageEvent (the [child-conversation] {"status":"launched",…,"conversation_id":"<child-id>"…} message), then control-openhands conversation wait <child-id> --timeout 120 (finished) and control-openhands conversation events <child-id> --kinds MessageEvent (agent PONG). control-openhands browser count 'testid=conversation-card >> has-text=PONG' is 1.
OverviewF27.overview-peek · F27.overview-pin · F27.overview-changes-link · F27.overview-drawerMapped behavior
Scenario F27--overview · Permalink · Source
Given
Use F27’s prerequisites and the common setup. Follow the family’s order when a script uses an earlier fixture or says “as above”.
Do — reading outline
- DoOpen /conversations/<quiet-id>.
- DoChoose “Right panel toggle”.
- DoHover over “Conversation overview toggle”.
- DoChoose “Conversation overview toggle”.
- DoChoose “Conversation overview ellipsis”.
- DoChoose “Conversation overview menu pin workspace”.
- DoReload the page.
- DoChoose “Conversation overview toggle”.
- DoPress Escape.
- DoChoose “Conversation overview diffs”.
- DoChoose “Conversation overview ellipsis”.
- DoChoose “Conversation overview menu open git pull requests”.
- DoChoose “Conversation overview drawer close”.
- WaitWait for “Conversation overview drawer” to disappear.
Expect
while the drawer is open, hovering the chat header (i) button shows a peek of the Overview rows (with the drawer closed there is no peek; clicking opens the column).
the Overview "..." menu pins and unpins rows (Workspace, Git parts); an unpinned row stays hidden after a reload.
the Overview Changes row closes the Overview and opens the drawer on Commits.
Overview menu > Pull Requests opens the secondary drawer with a close button; without a git repository it reads "Connect a git repository to view pull requests and issues".
Exact CLI recipe & bug checks
On /conversations/<quiet-id> (control-openhands browser goto /conversations/<quiet-id>; Launch a child left <tools-id>) run control-openhands browser click 'testid=right-panel-toggle' (the peek exists only while the drawer is open; a fresh page load has it closed), control-openhands browser hover 'testid=conversation-overview-toggle' and control-openhands browser text 'testid=conversation-overview-peek' (Overview, Changes, +0, -0, Workspace, None). control-openhands browser click 'testid=conversation-overview-toggle'; control-openhands browser attr 'testid=conversation-overview-toggle' aria-pressed is true and right-panel-toggle is false. Pin: control-openhands browser click 'testid=conversation-overview-ellipsis', control-openhands browser click 'testid=conversation-overview-menu-pin-workspace'; control-openhands browser count 'testid=conversation-overview-workspace' is 0 and the pin button's aria-pressed is false; after control-openhands browser reload and browser click 'testid=conversation-overview-toggle' the count is still 0. Re-pin the same way (count 1). Git parts work the same: conversation-overview-menu-pin-git-changes hides testid=conversation-overview-diffs (count 0, also after a reload) and a second click restores it. Close the menu with control-openhands browser press Escape: control-openhands browser count 'testid=conversation-overview-context-menu' is 0, control-openhands browser eval "document.activeElement.dataset.testid" is conversation-overview-ellipsis and testid=conversation-overview-panel still counts 1 (a second click on the ellipsis closes the menu too). Changes: control-openhands browser click 'testid=conversation-overview-diffs'; the overview panel count is 0, right-panel-toggle is pressed and tabs-pane-header starts with Commits. Drawer: reopen the Overview, control-openhands browser click 'testid=conversation-overview-ellipsis', control-openhands browser click 'testid=conversation-overview-menu-open-git-pull_requests', control-openhands browser text 'testid=conversation-overview-drawer' (Pull Requests / Connect a git repository to view pull requests and issues), then control-openhands browser click 'testid=conversation-overview-drawer-close' and control-openhands browser wait 'testid=conversation-overview-drawer' --state hidden --timeout 5000 (an immediate visible still reads true during the slide-out animation).
Workspace and repository identityF27.overview-identityKnown issue
Scenario F27--workspace-and-repository-identity · Permalink · Source
Given
Use F27’s prerequisites and the common setup. Follow the family’s order when a script uses an earlier fixture or says “as above”.
Do — reading outline
- DoStart a conversation with the prompt “List the files in this folder with ls. Do nothing else.”.
- DoChoose “Conversation overview toggle”.
- WaitWait for “Conversation overview git repo” to appear.
- DoReload the page.
- DoChoose “Conversation overview toggle”.
- DoReload the page.
- WaitWait for “Conversation overview git repo” to appear.
Expect
the Overview's Workspace row shows the attached folder's basename (None without a workspace), and once the workspace's origin is a GitHub remote the Git block adds an owner/repo link to the repository and a branch link.
Linked known issues
Known issue OpenHands/software-agent-sdk#5835 (F27.overview-identity): the local Overview Git probe uses conversation-scoped Bash execution; an idle-eviction pass can kill scoped work without a final output. Recheck a disposable short-idle-TTL server while a genuine Canvas Git probe is still executing, with independently observed command lifetime and the eventual output/result. The report's standalone asynchronous sleep reproduction is supporting backend evidence, not proof of a Terminal-tab command, which uses the agent event stream instead.
Exact CLI recipe & bug checks
Run control-openhands conversation start --workspace qa-f27-repo --prompt "List the files in this folder with ls. Do nothing else." --wait --timeout 240 (note <repo-id>) and, staying on the page it leaves open, control-openhands browser click 'testid=conversation-overview-toggle', control-openhands browser wait 'testid=conversation-overview-git-repo' --timeout 20000, control-openhands browser text 'testid=conversation-overview-workspace' (Workspace, qa-f27-repo: the folder's basename, not its path), control-openhands browser text 'testid=conversation-overview-git-repo' (qa-example/qa-f27-repo), control-openhands browser attr 'testid=conversation-overview-git-repo' href (https://github.com/qa-example/qa-f27-repo), control-openhands browser text 'testid=conversation-overview-git-branch' (main; control-openhands browser attr 'testid=conversation-overview-git-branch' href is https://github.com/qa-example/qa-f27-repo/tree/main) and control-openhands browser snapshot 'testid=conversation-overview-panel': Changes +0 -0, the repo and branch links, the Commits and Pull Requests items, then Workspace qa-f27-repo. control-openhands browser screenshot --feature F27.overview-identity --name repo-rows. The repo and branch rows come from a git probe the page runs while the conversation is active: without an LLM key the conversation ends in error, and after control-openhands browser reload and control-openhands browser click 'testid=conversation-overview-toggle' the panel lists only Workspace qa-f27-repo (control-openhands browser count 'testid=conversation-overview-git-repo' is 0; see Gotchas), so read the rows before any reload. With a key the conversation finishes and the rows survive a reload: after browser reload, the toggle and browser wait 'testid=conversation-overview-git-repo' --timeout 20000, the count is 1, and control-openhands browser text 'testid=agent-message >> nth=-1' still shows the reply (driven 2026-10-08 with the prompt List the files in this folder with ls. Do nothing else., reply The folder contains: README.md src).
No browser tool here (`F27.browser-screenshot`, blocked)F27.browser-screenshotKnown issueBlocked
Scenario F27--no-browser-tool-here-f27-browser-screenshot-blocked · Permalink · Source
Given
Use F27’s prerequisites and the common setup. Follow the family’s order when a script uses an earlier fixture or says “as above”.
Do — reading outline
- DoStart a conversation with the prompt “Use your browser tool to navigate to https://example.com and then reply with the page title only.”.
- DoChoose “Chat plus”.
- DoChoose “Show agent tools”.
- DoChoose “System message modal” / “Available Tools”.
- DoChoose “Close system message modal”.
Expect
after the agent's browser tool ran, the tab shows the last screenshot under a bar with its URL and an enabled "Open in New Tab" link.
Linked known issues
Known issue #16551 (F27.browser-screenshot): On native Windows, the browser tool chooses system Chrome over installed Playwright Chromium and times out before returning state/screenshots. Recheck default browser selection and an explicit executable-path control on a Windows host with both browsers and the reported browser_use runtime; the verification Chromium itself is a different tool. Blocked here without Windows and real browser-tool execution credentials.
Known issue #17383 (F27.browser-screenshot; dependency counterpart OpenHands/software-agent-sdk#5152): unlocked dependency resolution can silently remove the agent's browser tools. The actual 2026-10-12 pinned runtime resolves browser-use 0.11.13, mcp 1.30.0 and fastmcp 3.4.8; its genuine BrowserToolExecutor constructs successfully. That narrowly fails to reproduce the SDK report's specified mcp 2.x import failure. Fresh constructor recheck on 2026-10-16 at b34ac59, using the actual Agent Server 1.55.0 interpreter and private HOME, again resolves browser-use 0.11.13, mcp 1.30.0 and fastmcp 3.4.8 and constructs successfully; no browser operation or model was run. The Canvas/global browser-operation path still needs an authorized real LLM and a genuine browser-enabled agent issuing a browser_* operation; construction alone does not establish that feature works.
Exact CLI recipe & bug checks
control-openhands conversation start --prompt "Use your browser tool to navigate to https://example.com and then reply with the page title only." --wait --timeout 240 made the agent fall back to curl. Confirm with control-openhands browser click 'testid=chat-plus-button', control-openhands browser click 'testid=show-agent-tools-button', control-openhands browser click 'testid=system-message-modal >> role=tab[name="Available Tools"]' and control-openhands browser snapshot 'testid=system-message-modal': the tools are terminal, file_editor, task_tracker, canvas_ui_control, launch_child_conversation, finish, think, switch_llm, invoke_skill (no browser tools). Close with control-openhands browser click 'testid=close-system-message-modal'. With a working browser tool, expect browser-chrome-url to hold the URL and browser-chrome-open-external count 1.
Info modals at phone widthF27.info-modals-phoneMapped behavior
Scenario F27--info-modals-at-phone-width · Permalink · Source
Given
Use F27’s prerequisites and the common setup. Follow the family’s order when a script uses an earlier fixture or says “as above”.
Do — reading outline
- SetupUse the phone viewport.
- DoChoose “Chat plus”.
- DoChoose “Show skills”.
- WaitWait for “Skills modal” to appear.
- DoChoose “Close skills modal”.
Expect
the composer + menu's Skills, Hooks and Agent Tools & Metadata modals fit a 390 px viewport (issue #17562); content is covered by F07.
Exact CLI recipe & bug checks
Run control-openhands browser viewport phone; for each of skills/skills-modal, hooks/hooks-modal, agent-tools/system-message-modal: control-openhands browser click 'testid=chat-plus-button', control-openhands browser click 'testid=show-skills-button', control-openhands browser wait 'testid=skills-modal' --timeout 10000, control-openhands browser bbox 'testid=skills-modal', control-openhands browser screenshot --feature F27.info-modals-phone --name skills, control-openhands browser click 'testid=close-skills-modal' (substitute the names). Each box is 351 px wide at x 19.5 with insideViewport true and pageHorizontalOverflow false.
Agent tab at phone widthF27.canvas-ui-phoneMapped behavior
Scenario F27--agent-tab-at-phone-width · Permalink · Source
Given
Use F27’s prerequisites and the common setup. Follow the family’s order when a script uses an earlier fixture or says “as above”.
Do — reading outline
- DoStart a conversation with the prompt “Call the canvas_ui_control tool with command open_tab and tab terminal, then reply OK.”.
Expect
at phone width an agent open_tab makes the requested tab visible on /conversations/<id>/panel.
Exact CLI recipe & bug checks
Still at phone width on /conversations/<id>, run control-openhands conversation start --stay --prompt "Call the canvas_ui_control tool with command open_tab and tab terminal, then reply OK." --wait --timeout 200, then control-openhands browser url (it ends /conversations/<id>/panel), control-openhands browser count 'testid=tabs-pane-header' (1) and control-openhands browser attr 'role=tab[name="Terminal"]' aria-selected (true). The panel page has no right-panel-toggle. Screenshot with control-openhands browser screenshot --feature F27.canvas-ui-phone --name panel-terminal.
Phone panel tabsF27.phoneMapped behavior
Scenario F27--phone-panel-tabs · Permalink · Source
Given
Use F27’s prerequisites and the common setup. Follow the family’s order when a script uses an earlier fixture or says “as above”.
Do — reading outline
- DoOpen /conversations/<tools-id>/panel.
- DoChoose “Tabs pane header” / “More options”.
- DoChoose “Conversation tabs menu open usage”.
- DoChoose “Conversation tab planner”.
- SetupUse the desktop viewport.
Expect
at 390 px the panel route shows the Usage, Task List and Planner tabs without overflow, and the tab row stays visible.
Exact CLI recipe & bug checks
At phone width run control-openhands browser goto /conversations/<tools-id>/panel; tabs that do not fit the 390 px row move into the tabs menu (with Commits active, as the Overview menu bullet leaves it, Usage is not in the row and conversation-tab-usage does not exist), so open Usage with control-openhands browser click 'testid=tabs-pane-header >> testid=ellipsis-button' and control-openhands browser click 'testid=conversation-tabs-menu-open-usage', then control-openhands browser bbox 'testid=usage-panel' (390 wide, insideViewport true, no overflow) and control-openhands browser screenshot --feature F27.phone --name usage. Then control-openhands browser click 'testid=conversation-tab-planner', control-openhands browser bbox 'testid=conversation-tab-planner' and control-openhands browser bbox 'testid=planner-tab-build-button': the tab row stays inside the viewport (the Planner tab at y 5.5, insideViewport true) and the Build bar sits below the 39 px top bar (Build at y 49.5); screenshot with control-openhands browser screenshot --feature F27.phone --name planner. Return with control-openhands browser viewport desktop; the app replaces /panel with /conversations/<tools-id>.
Terminal waitingF27.terminal-waitingMapped behavior
Scenario F27--terminal-waiting · Permalink · Source
Given
Use F27’s prerequisites and the common setup. Follow the family’s order when a script uses an earlier fixture or says “as above”.
Do — reading outline
- SetupConfigure or inspect the model profiles specified in the recipe.
- DoStart a conversation with the prompt “Reply OK.”.
- DoChoose “Right panel toggle”.
- DoChoose “Conversation tab terminal”.
- WaitWait for the element identified in the CLI recipe to appear.
- SetupConfigure or inspect the model profiles specified in the recipe.
- SetupArrange the prerequisite backend state through the API.
Expect
while the runtime is starting or the conversation is in an error state, the Terminal tab reads "Waiting for runtime to start..."; a paused (stopped) conversation shows the empty message instead, by design.
Exact CLI recipe & bug checks
Arrange an errored conversation without model cost: echo sk-qa-invalid > $OH_VERIFY_RUN/private/qa-bad.key, control-openhands llm set --profile qa-bad --model deepseek/deepseek-flash --api-key-file $OH_VERIFY_RUN/private/qa-bad.key --no-validate (activates it), then control-openhands conversation start --prompt "Reply OK." --wait --timeout 120 (status error, the chat shows the authentication error). Run control-openhands browser click 'testid=right-panel-toggle', control-openhands browser click 'testid=conversation-tab-terminal' and control-openhands browser wait-text 'Waiting for runtime to start' --timeout 10000; screenshot with control-openhands browser screenshot --feature F27.terminal-waiting --name error. Restore with control-openhands llm preset deepseek --api-key-file <key file> (re-activates deepseek-flash) and control-openhands api DELETE /api/profiles/qa-bad --write. For contrast, a conversation paused with F07's Stop Runtime (conversation status paused, composer Stopped) shows "No terminal output yet": PAUSED is not in RUNTIME_INACTIVE_STATES.
State not reachedF27.usage-emptyMapped behavior
Scenario F27--state-not-reached · Permalink · Source
Given
Use F27’s prerequisites and the common setup. Follow the family’s order when a script uses an earlier fixture or says “as above”.
Do — reading outline
- SetupChange the run-owned service state: stop agent-server.
Expect
before any metrics arrive the Usage tab reads "No metrics data available".
Exact CLI recipe & bug checks
A new conversation's metrics arrive before the drawer can be opened (the Usage tab shows Loading..., then numbers); even the errored conversation above shows all-zero totals, not the empty state; and control-openhands service stop agent-server replaces the page with "Manage backends". "No metrics data available" was not observed.
Plugins modalF27.plugins-modalBehavior contract
Scenario F27--contract-f27-plugins-modal · Permalink · Source
Given
Use F27’s prerequisites and the common setup. Follow the family’s order when a script uses an earlier fixture or says “as above”.
Do
This behavior has no separately named recipe in this snapshot. Use the family’s entry points and the contract below; the page does not invent a replay.
Expect
a conversation started with plugins offers a plugins item that lists active-plugin-<name> rows.
Family notes, prerequisites for known issues & limits Known issueBlocked
- After a reload the Task List (and tab bar entry) appears only once history has loaded; wait about 2 s before counting
[data-active="true"]rows. [data-active]is also used by sidebar conversation cards: always combine it withhas-text=<task title>.browser click --observetakes a plain CSS selector ('[data-testid=compact-context-button]'); thetestid=form fails with aquerySelectorAllSyntaxError.- "Create a plan" leaves that conversation in plan mode: the next composer message goes to the planner helper, which has no
launch_child_conversationorcanvas_ui_control. Use a separate conversation for client-tool prompts. - The child-launch toast's Open link animates;
browser clickon it times out with "element is not stable". Read the child id from the parent's[child-conversation]message instead. GET …/file/download?path=…/.agents_tmp/PLAN.md404 andGET /api/llm/balance404 are expected app-origin errors (no plan yet; no balance endpoint). Count them inbrowser errors --app-onlybut do not report them.- Escape closes the composer context popover and the Overview "..." menu and returns focus to the trigger (#18044); an outside click, or a second click on the trigger, closes them too.
- The Overview column is 28 px narrower than its content (
scrollWidth296,clientWidth268). After some clicks inside it, Playwright's scroll-into-view shifts it and the card looks cut off on the left;browser reloadrestores it before taking screenshots. - The agent may summarize a client-tool action with its own title (for example "Launch local child conversation to reply PONG") instead of "Launching a child conversation"; assert the toast and events, not the chat title.
- The Overview peek appears only while the drawer is open (
canPeekOnHoverneedsisRightPanelShown); abrowser gotoor reload starts with the drawer closed. - The Overview's repo and branch rows depend on a bash probe (
useLocalGitInfo) that runs only while the conversation's status is idle, running, waiting for confirmation or finished and the agent is not in error. Right afterconversation startthe probe has run and its result stays cached on the page, but on an errored conversation a reload hides the rows again, andconversation pausedoes not apply to an errored conversation. Read the rows before anygotoorreload. - At phone width (and in a narrow drawer) the tab row shows only the tabs that fit; the rest are reachable only through the tabs menu (
conversation-tabs-menu-open-<tab>), and which tabs fit depends on the active tab's label width. - Plain
agent-canvasinstances on one machine share the tmux socket/tmp/tmux-<uid>/openhands(OpenHands/OpenHands#17946), so another instance stopping can reset this one's terminal.control-openhands launchgives each run its ownTMUX_TMPDIR, so in verification runs a reset means this run's agent server restarted. - Agent Tools & Metadata remembers the last tab (it reopens on Available Tools).
- The Overview menu opens only Pull Requests (
conversation-overview-menu-open-git-pull_requests); its testids areconversation-overview-menu-open-*and-pin-*forworkspaceand the Git rows only. - Known open issues: terminal history after reload (#17566) still fails (reproduced 2026-10-06); info modals at phone width (#17562) pass.
- Agent tab requests (
open_tab,navigate_to_file, chat file links) are saved per conversation like a user tab click (#18045): after the agent opens Terminal or a file and the page reloads, the drawer starts closed and the panel toggle reopens it on that tab; clicking that tab then closes the drawer. At phone width they navigate to/conversations/<id>/panel. - Known issue #17774 (
F27.planner-emptyF27.planner-plan): Planner reads on a native Windows local backend reject drive-letter/mixed-separator workspace paths withConversation file path must stay inside the workspacebefore a download request. Recheck both a scratch workspace and an opened drive-letter workspace, with and without.agents_tmp/PLAN.md; this run lacks a Windows local Agent Server. - Known issue #17198 (
F27.terminal-output): Native Windows desktop agents intermittently return[Command finished execution with no output]for real file-listing/terminal commands and retry them. Recheck with the affected Windows installer/runtime, project agent definitions and an exact command/workspace; no deterministic pattern or backend trace is provided, and this run has no Windows desktop runtime. The backend counterpart is OpenHands/software-agent-sdk#4963. - Known issue #16551 (
F27.browser-screenshot): On native Windows, the browser tool chooses system Chrome over installed Playwright Chromium and times out before returning state/screenshots. Recheck default browser selection and an explicit executable-path control on a Windows host with both browsers and the reported browser_use runtime; the verification Chromium itself is a different tool. Blocked here without Windows and real browser-tool execution credentials. - Known issue #16581 (
F27.terminal-output): A module-scoped terminal command index can suppress output in a second simultaneously mounted Terminal and reset the first when either unmounts. The report describes a future split-panel/embedded concurrent mount rather than a supported standalone entry point. Recheck in a host that actually mounts two independent Canvas Terminal consumers with real command histories; the current harness has one Terminal route and no such host fixture. - Known issue #17384 (
F27.launch-child): A file-based delegated subagent using a saved profile/provider connection can fail with HTTP 401 while the top-level conversation succeeds, because encrypted provider credentials are not decrypted in that backend factory path. Recheck a reviewed.agents/agents/worker, encrypted provider connection and saved profile using a real key, comparing parent and worker authentication. This is a delegated SDK subagent path, distinct from the client-tool child-launch recipe; neither a dummy key nor an unencrypted profile proves it. - Known issue OpenHands/software-agent-sdk#5533 (
F27.terminal-output): A slow interactive Bash startup can make the first terminal command return early with empty output and a false successful exit code. Recheck both standalone and pooled tmux using a private.bashrcwithsleep 0.4, then a boundedsleep 2first command and its real observation. The shell fixture can be arranged, but the mapped agent-command/Terminal path cannot run here without a model key. - Known issue OpenHands/software-agent-sdk#5322 (
F27.terminal-output): The default tmux pane pool or Windows terminal can letgit log -pstart an interactive pager, so the next agent command receives stale paged output instead of its own result. Recheck a reviewed large git fixture, a real installed pager and a follow-up marker command on each affected terminal backend. The fixture is arrangeable, but the mapped agent-tool path needs a model key (and the Windows half needs Windows). - Known issue #17383 (
F27.browser-screenshot; dependency counterpart OpenHands/software-agent-sdk#5152): unlocked dependency resolution can silently remove the agent's browser tools. The actual 2026-10-12 pinned runtime resolves browser-use 0.11.13, mcp 1.30.0 and fastmcp 3.4.8; its genuine BrowserToolExecutor constructs successfully. That narrowly fails to reproduce the SDK report's specified mcp 2.x import failure. Fresh constructor recheck on 2026-10-16 atb34ac59, using the actual Agent Server 1.55.0 interpreter and private HOME, again resolves browser-use 0.11.13, mcp 1.30.0 and fastmcp 3.4.8 and constructs successfully; no browser operation or model was run. The Canvas/global browser-operation path still needs an authorized real LLM and a genuine browser-enabled agent issuing abrowser_*operation; construction alone does not establish that feature works. - Browser availability also depends on OpenHands/software-agent-sdk#5899 (
F27.browser-screenshot; canonical tool-selection note in F13): a Chromium installed only underPLAYWRIGHT_BROWSERS_PATHis missed by the agent-tool probe. Recheck the real browser-tool operation on a host with only that custom cache and no standard browser, default cache or PATH executable. This Mac's user Chrome must remain installed; an executor constructor or the verification browser is not a successful agent browser operation. - Known issue OpenHands/software-agent-sdk#5835 (
F27.overview-identity): the local Overview Git probe uses conversation-scoped Bash execution; an idle-eviction pass can kill scoped work without a final output. Recheck a disposable short-idle-TTL server while a genuine Canvas Git probe is still executing, with independently observed command lifetime and the eventual output/result. The report's standalone asynchronoussleepreproduction is supporting backend evidence, not proof of a Terminal-tab command, which uses the agent event stream instead.
Before you start
Use an OpenHands checkout at the source revision, with Node 24+, installed npm dependencies, uv / uvx, and a supported Chromium browser. The verification skill is the complete setup contract.
export PATH="$PWD/.agents/skills/verify-openhands/scripts:$PATH"
export OH_VERIFY_RUN=$(control-openhands launch --new --print-run)
control-openhands doctor
control-openhands onboard --skip
# Configure a model only for a scenario that needs one:
control-openhands llm preset deepseek
# When the run is complete:
control-openhands stop
F01 walks onboarding instead of skipping it. No-model checks run before model configuration. Keep OH_VERIFY_RUN set so commands address your own run. Desktop is 1440 × 1000; phone is 390 × 844. Model-backed checks need the configured provider key and budget.
Recipes run in source order within each family and can share fixtures. The page preserves that order; “as above” is a dependency on an earlier case. Setup commands and API writes arrange state. They do not prove a UI path. Follow the family cleanup steps.
A known failure preserves the intended expectation beside the observed defect. Executable known-bug blocks use xfail for a reproduced symptom and xpass when it stops reproducing. Cloud accounts, enterprise capabilities and other unavailable prerequisites remain explicit. “Not run” is different from “blocked”.
The maintained map describes application behavior at its pinned revision. Once a fix is verified in the application version under test, remove the obsolete failure note and keep the normal expectation. Dated evidence belongs in the backfill ledger.
Read the full map index and coverage boundaries, the CLI guide, or the earlier illustrated edition. The verification approach adapts Lauren Tan’s (@poteto) pstack verification-skill generators; attribution and adaptation.