explore-app
Explore App
When to use
- After ingest-spec has populated
parsed-spec.mdwith scenarios - Once per scenario — run separately for each scenario in the test plan
- When running as part of
run-testing-sessionpipeline (Stage 2, per scenario) - When exploration is stale after a UI change
Inputs
- Scenario name and slug (from
parsed-spec.md) - Base URL (from
project-context.mdor user-provided) docs/playwright-spec-testing/project-context.md(for baseURL only)docs/playwright-spec-testing/parsed-spec.md(this scenario's section)
What it does
Walk through the app in a browser, performing each step of the scenario, and capture real selectors, URLs, and behavior. No selector is invented — every selector in the exploration report must come from what you observe.
Phase 1: Open the browser
./node_modules/.bin/playwright open [BASE_URL]
Phase 2: Walk through each step
For EACH step in the scenario:
- Perform the action
- Capture after each action:
- Current URL
- Element interacted with: tag, role, visible text, best selector
- Any visible text changes (success messages, errors)
Selector priority (most to least preferred):
page.getByRole('button', { name: 'Sign In' })— role + accessible namepage.getByLabel('Email')— labelpage.getByPlaceholder('Enter email')— placeholderpage.getByTestId('login-button')— data-testidpage.locator('.login-btn')— CSS (last resort, fragile)
Phase 3: Capture expected outcome
After the final step, capture:
- Resulting URL
- Element/text confirming the expected outcome
- Its selector
Phase 4: Write exploration report
Save to docs/playwright-spec-testing/exploration/[SCENARIO_SLUG].md:
# Exploration: [Scenario Name]
_Explored on [DATE]_
_Base URL: [url]_
## Step N: [Step description]
**Action:** [what was done]
**Selector:** `[exact Playwright selector]`
**URL after:** [url]
**Expected state after:** `[selector]` shows "[text]" / count is [N] / URL is [url]
**Notes:** [anything unusual]
## Step N: ...
## Expected Outcome
**Assertion target:** `[selector]`
**Visible text:** "[text]"
**URL:** [url]
Phase 5: Update parsed-spec.md
For this scenario, fill in:
### Exploration Report
`docs/playwright-spec-testing/exploration/[SCENARIO_SLUG].md`
### Status
- [x] Planned
- [x] Explored
- [ ] Generated
- [ ] Passing
Key Rules
- NEVER invent a selector — if you can't find the element, report NEEDS_CONTEXT
- NEVER leave
Expected state after:blank. If no element changes, writeURL changes to [url]orNo visible state change. - Use the same selector-first discipline for
Expected state after:— observable evidence only, no inference. - NEVER run against production — use local dev URL only
- One exploration report per scenario
Output
docs/playwright-spec-testing/exploration/[SCENARIO_SLUG].md- Updated
docs/playwright-spec-testing/parsed-spec.md
Report when done:
- Status: DONE | DONE_WITH_CONCERNS | BLOCKED | NEEDS_CONTEXT
- Number of steps explored
- Any selectors that required CSS fallback
- Any elements that could not be found
More from lautaroleonhardt/pst
analyze-codebase
Use when starting a Playwright testing session or when project structure is unknown. Scans the project for Playwright config, test conventions, routing, and tech stack. Writes output to docs/playwright-spec-testing/project-context.md.
9plan-tests
Use after explore-app to synthesize an exhaustive, human-reviewable test plan from exploration reports and project context. Reads all exploration/<slug>.md files, parsed-spec.md, and project-context.md. Outputs test-plan.md with full steps, assertions, and assigned test file paths.
9ingest-spec
Use when you have a Gherkin .feature file or plain-English test cases to parse into structured scenarios. Writes output to docs/playwright-spec-testing/parsed-spec.md.
9generate-tests
Use after plan-tests to write a Playwright test for one scenario by mechanically translating test-plan.md into Playwright API calls. Requires docs/playwright-spec-testing/test-plan.md. Writes the test file at the path assigned in the plan.
9debug-test
Use when a Playwright test is failing. Diagnoses the root cause and applies a minimal fix. Requires the failing test file path and the full error output.
9run-testing-session
Use to run the full Playwright testing pipeline (analyze → ingest → plan → explore → generate → debug) with isolated subagent context per stage. Each stage is reviewed and fixed automatically. Requires a running target app and a spec input.
9