# Workflow Detailed expansion of the six-step Webwright loop, adapted for Claude Code. The original loop relied on `webwright.tools.image_qa` for visual QA and `webwright.tools.self_reflection` for the final verdict. Both are replaced here by your native abilities (`Read` on PNG files + reasoning against `plan.md`). No `OPENAI_API_KEY` is required. ## 1. Plan Parse the task into critical points (CPs) and write `WORKSPACE_DIR/plan.md`: ```markdown # Task # Critical Points - [ ] CP1: - [ ] CP2: ... ``` Rules for CPs: - One CP per independently verifiable requirement. - Numeric, date, quantity, and unit CPs must be exact. - Ranking CPs ("cheapest", "best-selling", "highest-rated", …) must reference the site's actual sort/filter control. - If the task asks for a final datum, make it its own CP (e.g. `CP5: Record the displayed cheapest economy fare`). ## 2. Explore Goal: discover stable selectors, confirm every required filter control exists, and identify how to capture evidence for each CP. - Run scratch Playwright scripts (see `playwright_patterns.md`) inside `WORKSPACE_DIR/`. Save scratch PNGs under `WORKSPACE_DIR/screenshots/` (separate from `final_runs/`). - Print URL, title, and `aria_snapshot()` for the region of interest at every step. - Use `Read` on saved PNGs to confirm UI state when ARIA evidence is ambiguous. - If a filter looks unavailable, expand drawers / accordions / mobile filter panels and inspect again before concluding it doesn't exist. - A search-box query never substitutes for a dedicated filter control. ## 3. Author `final_script.py` Create a fresh `final_runs/run_/` (use the next integer above any existing `run_*`) and place `final_script.py` inside it. Instrument per `playwright_patterns.md`: - viewport 1280×1800, headless local Firefox, no `full_page`; - one `final_execution__.png` per CP; - one `step action: ` log line per constraint-relevant interaction; - the final datum printed into `final_script_log.txt` at the end. Each screenshot should map to a CP from `plan.md` so verification is trivial. ## 4. Execute Run the script once. If it crashes, fix it inside the same run folder and re-execute — but if a partial run already produced screenshots that don't match the fixed flow, delete them so the run folder reflects a single clean execution. ## 5. Self-verify (replaces `self_reflection`) For every CP in `plan.md`: 1. Identify the screenshot(s) and/or log line that provide evidence. 2. `Read` each cited PNG. 3. Confirm the evidence is **unambiguous**: - Filter chip / selected state visibly applied (not hidden behind a closed drawer); - Numeric / date values match exactly (not broadened); - Sort applied via the site's control (not implied by result order); - Required submit / search / apply action visibly taken; - Final datum legibly displayed. 4. Tick the CP only when the evidence is concrete. Be harsh on partial, occluded, or ambiguous states. If any CP fails, diagnose the *specific* issue — wrong filter value, missing control, hidden chip, broadened range, missing confirmation, missing screenshot, etc. Fix `final_script.py`, run it again inside `final_runs/run_/`, and re-verify against `plan.md`. Empty result sets are acceptable when the correct filters were demonstrably applied. ## 6. Done Stop only when **all** of the following are true: 1. `plan.md` exists with every CP enumerated as a checklist item. 2. `final_runs/run_/final_script.py` ran cleanly from scratch and produced `final_script_log.txt` plus all CP screenshots. 3. Every CP is checked off with a cited screenshot and/or log line. 4. The final datum (if the task asked for one) is reported to the user verbatim and is also present in `final_script_log.txt`. 5. `ls -R final_runs/run_` and `cat final_runs/run_/final_script_log.txt` show the expected artifacts. If any of those is false, do not declare done — diagnose, fix, and re-run in a new `run_/`.