.agents/skills/test-labelme-gui/SKILL.md
Test what a user sees and touches — menus, pointer and keyboard workflows, dialogs, persistence, themes. Keep deterministic logic in pytest; spend this skill on the human-visible surface.
Labelme resolves its config (~/.labelmerc), caches, and window state through
HOME, so one environment variable isolates a run from the tester's real profile.
From the repository root, in a shell that stays alive for the whole session:
RUN_DIR=$(mktemp -d)
cp -R examples/primitives "$RUN_DIR/inputs"
mkdir "$RUN_DIR/outputs" "$RUN_DIR/evidence"
HOME="$RUN_DIR" uv run --no-sync labelme "$RUN_DIR/inputs" \
--output "$RUN_DIR/outputs" 2>"$RUN_DIR/stderr.log"
Variants:
.jpg into inputs.examples/video_annotation/data_annotated.inputs/*.json with { not json.--config "color_theme: dark" (or light).Keep RUN_DIR until the report is delivered; outputs/, stderr.log, and
evidence/ are the durable record of the run.
For each check: state the expected outcome first, act as a user would (pointer or
keyboard, never programmatic widget calls), then verify both the visible result and
the durable one — the saved JSON in outputs/, or the state after a clean restart.
Screenshot each checkpoint into evidence/ with names like 02-undo-after-rect.png.
Core flows, in priority order. A quick check covers the first three; a full sweep covers all, plus unscripted exploration of whatever looked surprising along the way:
RUN_DIR: annotations persist, no unexpected save
prompt, exit status is clean.shape_type
and points in the saved JSON.--no-auto-save): Cancel keeps the
session, Discard drops the edit, Save writes it.AI Assist downloads models — exercise it only when the request explicitly authorizes
network use (the cache lands inside RUN_DIR, so it stays isolated).
Findings first, then coverage. Classify each finding: defect (broken function or data), friction (works but surprising or costly), visual, accessibility, or automation gap (the tooling failed, not the app). Reproduce a defect from a fresh state before reporting it; a crash or data loss needs only one occurrence with full evidence. Every finding carries the steps, expected versus actual, and evidence paths. Close with what was covered and what was not — an unrun check is a gap, not a pass.
If asked to file the findings, follow docs/agents/issue-tracker.md and stop for
human review before creating issues.